Wrong prefix checking of global variables

Marc Glisse marc.glisse at inria.fr
Mon Jan 25 20:40:32 UTC 2016


On Mon, 25 Jan 2016, Pavel Kopyl wrote:

> Hello,
>
> I faced with the situation where ./configure makes wrong decision about if 
> global variables should be prefixed or not.
>
> Conditions.
>
> Version:             trunk (GNU MP 6.1.99)
> Host type:         armv7l-unknown-linux-gnueabi
> Compiler:          Linaro GCC 4.9.2
>
> ./configure \
>    --prefix=/usr \
>    --includedir=/usr/include \
>    --libdir=/usr/lib \
>    --enable-cxx \
>
>
> To check if a global variable should be prefixed with underscore ./configure 
> "greps" variable's name in object file in the following test:
>
> cat conftest.c
> int gurkmacka;
>
>
> cat configure
> ..
> $NM conftest.$OBJEXT >conftest.out
>  if grep _gurkmacka conftest.out >/dev/null; then
>    gmp_cv_asm_underscore=yes
>  elif grep gurkmacka conftest.out >/dev/null; then
>    gmp_cv_asm_underscore=no
>  else
>    echo "configure: $NM doesn't have gurkmacka:" >&5
>    cat conftest.out >&5
> ...
>
> Generally it works fine, but being built with enabled AddressSanitizer 
> (-fsanitize=address, -fno-common), compiler generates instrumented code and
> object file contains additional symbols whose names may incorporate 
> "_gurkmacka" as a substring, though actually global variable is not prefixed.
>
> Lets see an example:
>
> Without AddressSanitizer:
>
> cat conftest.out
> 00000004 C gurkmacka
>
>
> With AddressSanitizer:
>
> cat conftest.out
> 00000000 t _GLOBAL__sub_D_00099_0_gurkmacka
> 00000000 t _GLOBAL__sub_I_00099_1_gurkmacka
>         U __aeabi_unwind_cpp_pr0
>         U __asan_init
>         U __asan_register_globals
>         U __asan_unregister_globals
>         U __asan_version_mismatch_check_v6
> 00000000 B gurkmacka
>
> Based on the former example ./configure erroneously assumes that global 
> variables should be prefixed.**
>
> Attached patch fixes this issue.

Hello,

thank you for the description and the patch. IIRC, \<\> is not a standard 
feature of grep but a GNU extension. How portable is it?

-- 
Marc Glisse


More information about the gmp-bugs mailing list