On 26-02-19 13:00, Thomas Schwinge wrote:
> Hi Tom!
> 
> On Tue, 26 Feb 2019 12:28:34 +0100, Tom de Vries <tdevr...@suse.de> wrote:
>> On 26-02-19 10:40, Thomas Schwinge wrote:
>>> On Mon, 25 Feb 2019 18:11:23 +0100, Tom de Vries <tdevr...@suse.de> wrote:
>>>> On 25-02-19 11:48, Thomas Schwinge wrote:
>>>>> On Fri, 8 Feb 2019 10:42:24 +0100, Tom de Vries <tdevr...@suse.de> wrote:
>>>>>> Add libbacktrace test-case using -flto.
>>>>>
>>>>> I'm seeing this one fail is some configurations, but only in the
>>>>> 'build-gcc/libbacktrace/btest_lto.log' variant:
>>>
>>>> Meaning, compiling libbacktrace using the host compiler, so it would be
>>>> useful to known which compiler that is.
>>>>
>>>> [ I've tried a gcc-4.8 and gcc-6 and gcc-7 as host compiler, and a
>>>> couple of CFLAGS settings (-O2, -O3) to reproduce this, but didn't manage. 
>>>> ]
>>>
>>> Years old:
>>>
>>>     $ gcc --version
>>>     gcc (Sourcery CodeBench 2014.05-45) 4.8.3 20140320 (prerelease)
>>>     [...]
>>>     $ ld --version
>>>     GNU ld (Sourcery CodeBench 2014.05-45) 2.24.51.20140217
>>>     [...]
>>>
>>> (It'll be fine for me if you just declare that unsupported.)
>>
>> I see. The 4.8 I tried is a 4.8.5.
>>
>>>>>     test5: unexpected syminfo name got global.2537 expected global
>>>>>     PASS: backtrace_full noinline
>>>>>     PASS: backtrace_full inline
>>>>>     PASS: backtrace_simple noinline
>>>>>     PASS: backtrace_simple inline
>>>>>     FAIL: backtrace_syminfo variable
>>>>>     FAIL btest_lto (exit status: 1)
>>>>>
>>>>> I haven't looked yet which details about these GCC build configurations
>>>>> might be different/important; maybe you've got an idea already?
>>>
>>> I can reproduce this with '-O0' ("unexpected syminfo name got global.2528
>>> expected global", in that case).  With '-O0 -fdump-tree-all
>>> -fdump-ipa-all -save-temps', the 'global.2528' name appears only in
>>> 'btest_lto.ltrans0.000i.cgraph', and 'btest_lto.ltrans0.s':
>>>
>>>     ./btest_lto.ltrans0.000i.cgraph:  References: global.2528/12 
>>> (addr)state.2526/56 (read)callback_three.2389/64 
>>> (addr)error_callback_three.2384/65 (addr)stderr/20 (read)stderr/20 
>>> (read)stderr/20 (read)global.2528/12 (addr)global.2528/12 (addr)stderr/20 
>>> (read)stderr/20 (read)failures.2527/57 (read)failures.2527/57 
>>> (write)failures.2527/57 (read)
>>>     ./btest_lto.ltrans0.000i.cgraph:global.2528/12 (global) @0xf7454118
>>>     ./btest_lto.ltrans0.000i.cgraph:global.2528/12 (global) @0xf7454118
>>>     ./btest_lto.ltrans0.000i.cgraph:  References: global.2528/12 
>>> (addr)state.2526/56 (read)callback_three.2389/64 
>>> (addr)error_callback_three.2384/65 (addr)stderr/20 (read)stderr/20 
>>> (read)stderr/20 (read)global.2528/12 (addr)global.2528/12 (addr)stderr/20 
>>> (read)stderr/20 (read)failures.2527/57 (read)failures.2527/57 
>>> (write)failures.2527/57 (read)
>>>     ./btest_lto.ltrans0.000i.cgraph:global.2528/12 (global) @0xf7454118
>>>     ./btest_lto.ltrans0.000i.cgraph:  References: global.2528/12 
>>> (addr)state.2526/56 (read)callback_three.2389/64 
>>> (addr)error_callback_three.2384/65 (addr)stderr/20 (read)stderr/20 
>>> (read)stderr/20 (read)global.2528/12 (addr)global.2528/12 (addr)stderr/20 
>>> (read)stderr/20 (read)failures.2527/57 (read)failures.2527/57 
>>> (write)failures.2527/57 (read)
>>>     ./btest_lto.ltrans0.s:  .type   global.2528, @object
>>>     ./btest_lto.ltrans0.s:  .size   global.2528, 4
>>>     ./btest_lto.ltrans0.s:global.2528:
>>>     ./btest_lto.ltrans0.s:  movq    $global.2528, -8(%rbp)  #, addr
>>>     ./btest_lto.ltrans0.s:  movl    $global.2528, %eax      #, global.22
>>>     ./btest_lto.ltrans0.s:  movl    $global.2528, %ecx      #, global.23
>>>     ./btest_lto.ltrans0.s:  .quad   global.2528
> 
> With '-fdump-rtl-all' added, I see it appear in
> 'btest_lto.ltrans0.166r.expand':
> 
>     ./btest_lto.ltrans0.166r.expand:        (symbol_ref:DI ("global.2528") 
> [flags 0x2]  <var_decl 0xf7400170 global>)) [...]/libbacktrace/btest.c:399 -1
>     ./btest_lto.ltrans0.166r.expand:        (symbol_ref:DI ("global.2528") 
> [flags 0x2]  <var_decl 0xf7400170 global>)) [...]/libbacktrace/btest.c:433 -1
>     ./btest_lto.ltrans0.166r.expand:        (symbol_ref:DI ("global.2528") 
> [flags 0x2]  <var_decl 0xf7400170 global>)) [...]/libbacktrace/btest.c:435 -1
> 
>> How about:
>> ...
>> - int global;
>> + static int global;
>> ...
>>
>> Does that fix the failure?
> 
> No, that gets us "unexpected syminfo name got global.2479.2528 expected
> global".  ;-\
> 

Ian,

Is this approach OK?

Thanks,
- Tom
[libbacktrace] Fix btest-lto for older gcc

With gcc 4.8.5, btest_lto ends up with a privatized name for the variable with
name 'global':
...
$ nm btest_lto | grep ' d ' | grep global
0000000000617150 d global.2530
...
which makes test5 fail:
...
    test5: unexpected syminfo name got global.2530 expected global
...

Fix this failure by accepting this type of name as a valid name in btest_lto.

2019-02-26  Tom de Vries  <tdevr...@suse.de>

	* Makefile.am (btest_lto_CFLAGS): Add -DHAVE_LTO.
	* Makefile.in: Regenerate.
	* btest.c (test5) [HAVE_LTO]: Allow global.* as minimal symbol name
	for global.

---
 libbacktrace/Makefile.am | 2 +-
 libbacktrace/Makefile.in | 2 +-
 libbacktrace/btest.c     | 7 +++++++
 3 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/libbacktrace/Makefile.am b/libbacktrace/Makefile.am
index 7ddee4962ec..0798583eebe 100644
--- a/libbacktrace/Makefile.am
+++ b/libbacktrace/Makefile.am
@@ -229,7 +229,7 @@ BUILDTESTS += btest
 if HAVE_ELF
 
 btest_lto_SOURCES = btest.c testlib.c
-btest_lto_CFLAGS = $(AM_CFLAGS) -g -O -flto
+btest_lto_CFLAGS = $(AM_CFLAGS) -g -O -flto -DHAVE_LTO
 btest_lto_LDADD = libbacktrace.la
 
 BUILDTESTS += btest_lto
diff --git a/libbacktrace/Makefile.in b/libbacktrace/Makefile.in
index a896a26dff8..0844adae087 100644
--- a/libbacktrace/Makefile.in
+++ b/libbacktrace/Makefile.in
@@ -896,7 +896,7 @@ BUILDTESTS = $(am__append_2) $(am__append_9) $(am__append_10) \
 @NATIVE_TRUE@btest_CFLAGS = $(AM_CFLAGS) -g -O
 @NATIVE_TRUE@btest_LDADD = libbacktrace.la
 @HAVE_ELF_TRUE@@NATIVE_TRUE@btest_lto_SOURCES = btest.c testlib.c
-@HAVE_ELF_TRUE@@NATIVE_TRUE@btest_lto_CFLAGS = $(AM_CFLAGS) -g -O -flto
+@HAVE_ELF_TRUE@@NATIVE_TRUE@btest_lto_CFLAGS = $(AM_CFLAGS) -g -O -flto -DHAVE_LTO
 @HAVE_ELF_TRUE@@NATIVE_TRUE@btest_lto_LDADD = libbacktrace.la
 @NATIVE_TRUE@btest_alloc_SOURCES = $(btest_SOURCES)
 @NATIVE_TRUE@btest_alloc_CFLAGS = $(btest_CFLAGS)
diff --git a/libbacktrace/btest.c b/libbacktrace/btest.c
index b1c2a2a860d..b624ba1f0cc 100644
--- a/libbacktrace/btest.c
+++ b/libbacktrace/btest.c
@@ -423,7 +423,14 @@ test5 (void)
 	  fprintf (stderr, "test5: NULL syminfo name\n");
 	  symdata.failed = 1;
 	}
+#ifdef HAVE_LTO
+      else if (!(strlen (symdata.name) >= 6
+		 && strncmp (symdata.name, "global", 6) == 0
+		 && (symdata.name[6] == '\0'
+		     || symdata.name[6] == '.')))
+#else
       else if (strcmp (symdata.name, "global") != 0)
+#endif
 	{
 	  fprintf (stderr,
 		   "test5: unexpected syminfo name got %s expected %s\n",

Reply via email to