[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: checking command to parse /usr/bin/nm -B output from gcc object... f

From: Nick Bowler
Subject: Re: checking command to parse /usr/bin/nm -B output from gcc object... failed
Date: Tue, 7 Jan 2020 17:26:11 -0500

On 2020-01-07, Nick Bowler <address@hidden> wrote:
> On 1/7/20, Martin Liška <address@hidden> wrote:
>> nm -B detection fails to be detected with -flto and -fno-common CFLAGS:
>> configure:6307: checking command to parse /usr/bin/nm -B output from gcc
>> object
> [...]
>> configure:6536: gcc -o conftest -O2 -Wall -D_FORTIFY_SOURCE=2
>> -fstack-protector-strong -funwind-tables -fasynchronous-unwind-tables
>> -fstack-clash-protection -Werror=return-type -g -fno-common -flto  -O2
>> -Wall -D_FORTIFY_SOURCE=2 -fstack-protector-strong -funwind-tables
>> -fasynchronous-unwind-tables -fstack-clash-protection
>> -Werror=return-type -g -fno-common -flto conftest.c conftstm.o >&5
>> conftest.c:18:12: error: variable 'nm_test_var' redeclared as function
>>     18 | extern int nm_test_var();
>>        |            ^
>> conftest.c:4:6: note: previously declared here
>>      4 |    relocations are performed -- see ld's documentation on
>> pseudo-relocs.  */
>>        |      ^
>> lto1: fatal error: errors during merging of translation units
>> compilation terminated.
> However, LTO breaks nm really badly and with -fno-common this variable
> gets marked as "T" in the nm output.  So it is indistinguishable from
> functions and when the C file is generated, a function declaration for
> nm_test_var is emitted (if it was correctly marked "B", then a variable
> declaration will be emitted).

Workaround: add -ffat-lto-objects to CFLAGS so you get proper symbol
tables in object files and then set NM='nm --plugin ""' to completely
disable the busted LTO support in nm.

For example:

  ./configure CFLAGS='-flto -fno-common -ffat-lto-objects' NM='nm --plugin ""'

reply via email to

[Prev in Thread] Current Thread [Next in Thread]