[libbacktrace] Add btest_lto

Message ID 20190208094223.GA31322@delia.microfocus.com
State New
Headers show
Series
  • [libbacktrace] Add btest_lto
Related show

Commit Message

Tom de Vries Feb. 8, 2019, 9:42 a.m.
Hi,

Add libbacktrace test-case using -flto.

OK for trunk?

Thanks,
- Tom

[libbacktrace] Add btest_lto

2019-02-08  Tom de Vries  <tdevries@suse.de>

	* Makefile.am (BUILDTESTS): Add btest_lto.
	* Makefile.in: Regenerate.
	* btest.c (test1, f2, f3, test3, f22, f23): Declare with
	__attribute__((noclone)).

---
 libbacktrace/Makefile.am |  6 ++++++
 libbacktrace/Makefile.in | 47 ++++++++++++++++++++++++++++++++++++++++-------
 libbacktrace/btest.c     | 12 ++++++------
 3 files changed, 52 insertions(+), 13 deletions(-)

Comments

y2s1982 . via Gcc-patches Feb. 9, 2019, 9:49 p.m. | #1
On Fri, Feb 8, 2019 at 1:42 AM Tom de Vries <tdevries@suse.de> wrote:
>

> Add libbacktrace test-case using -flto.

>

> OK for trunk?

>

> Thanks,

> - Tom

>

> [libbacktrace] Add btest_lto

>

> 2019-02-08  Tom de Vries  <tdevries@suse.de>

>

>         * Makefile.am (BUILDTESTS): Add btest_lto.

>         * Makefile.in: Regenerate.

>         * btest.c (test1, f2, f3, test3, f22, f23): Declare with

>         __attribute__((noclone)).


This seems more or less fine, but are there any platforms where -flto
doesn't work?  The docs say "Link-time optimization does not work well
with generation of debugging information on systems other than those
using a combination of ELF and DWARF."  For example, does this test
pass on Windows?

Ian
Tom de Vries Feb. 9, 2019, 10:59 p.m. | #2
On 09-02-19 22:49, Ian Lance Taylor wrote:
> On Fri, Feb 8, 2019 at 1:42 AM Tom de Vries <tdevries@suse.de> wrote:

>>

>> Add libbacktrace test-case using -flto.

>>

>> OK for trunk?

>>

>> Thanks,

>> - Tom

>>

>> [libbacktrace] Add btest_lto

>>

>> 2019-02-08  Tom de Vries  <tdevries@suse.de>

>>

>>         * Makefile.am (BUILDTESTS): Add btest_lto.

>>         * Makefile.in: Regenerate.

>>         * btest.c (test1, f2, f3, test3, f22, f23): Declare with

>>         __attribute__((noclone)).

> 

> This seems more or less fine, but are there any platforms where -flto

> doesn't work?  The docs say "Link-time optimization does not work well

> with generation of debugging information on systems other than those

> using a combination of ELF and DWARF." 


So, we could require HAVE_ELF for this testcase.

> For example, does this test

> pass on Windows?


I don't know, I don't have a windows setup.

Thanks,
- Tom
Ian Lance Taylor Feb. 9, 2019, 11:09 p.m. | #3
On Sat, Feb 9, 2019 at 2:59 PM Tom de Vries <tdevries@suse.de> wrote:
>

> On 09-02-19 22:49, Ian Lance Taylor wrote:

> > On Fri, Feb 8, 2019 at 1:42 AM Tom de Vries <tdevries@suse.de> wrote:

> >>

> >> Add libbacktrace test-case using -flto.

> >>

> >> OK for trunk?

> >>

> >> Thanks,

> >> - Tom

> >>

> >> [libbacktrace] Add btest_lto

> >>

> >> 2019-02-08  Tom de Vries  <tdevries@suse.de>

> >>

> >>         * Makefile.am (BUILDTESTS): Add btest_lto.

> >>         * Makefile.in: Regenerate.

> >>         * btest.c (test1, f2, f3, test3, f22, f23): Declare with

> >>         __attribute__((noclone)).

> >

> > This seems more or less fine, but are there any platforms where -flto

> > doesn't work?  The docs say "Link-time optimization does not work well

> > with generation of debugging information on systems other than those

> > using a combination of ELF and DWARF."

>

> So, we could require HAVE_ELF for this testcase.


Works for me.  OK with that change.  Thanks.

Ian
Thomas Schwinge Feb. 25, 2019, 10:48 a.m. | #4
Hi Tom!

On Fri, 8 Feb 2019 10:42:24 +0100, Tom de Vries <tdevries@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:

    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?


Grüße
 Thomas


> [libbacktrace] Add btest_lto

> 

> 2019-02-08  Tom de Vries  <tdevries@suse.de>

> 

> 	* Makefile.am (BUILDTESTS): Add btest_lto.

> 	* Makefile.in: Regenerate.

> 	* btest.c (test1, f2, f3, test3, f22, f23): Declare with

> 	__attribute__((noclone)).

> 

> ---

>  libbacktrace/Makefile.am |  6 ++++++

>  libbacktrace/Makefile.in | 47 ++++++++++++++++++++++++++++++++++++++++-------

>  libbacktrace/btest.c     | 12 ++++++------

>  3 files changed, 52 insertions(+), 13 deletions(-)

> 

> diff --git a/libbacktrace/Makefile.am b/libbacktrace/Makefile.am

> index 71a2ed478cc..46d7de48fd1 100644

> --- a/libbacktrace/Makefile.am

> +++ b/libbacktrace/Makefile.am

> @@ -222,6 +222,12 @@ btest_LDADD = libbacktrace.la

>  

>  BUILDTESTS += btest

>  

> +btest_lto_SOURCES = btest.c testlib.c

> +btest_lto_CFLAGS = $(AM_CFLAGS) -g -O -flto

> +btest_lto_LDADD = libbacktrace.la

> +

> +BUILDTESTS += btest_lto

> +

>  btest_alloc_SOURCES = $(btest_SOURCES)

>  btest_alloc_CFLAGS = $(btest_CFLAGS)

>  btest_alloc_LDADD = libbacktrace_alloc.la

> diff --git a/libbacktrace/Makefile.in b/libbacktrace/Makefile.in

> index a2b595e9bb0..c65c40d95d8 100644

> --- a/libbacktrace/Makefile.in

> +++ b/libbacktrace/Makefile.in

> @@ -126,8 +126,8 @@ TESTS = $(am__append_4) $(am__append_6) $(am__append_7) \

>  @HAVE_ELF_TRUE@@HAVE_OBJCOPY_DEBUGLINK_TRUE@@NATIVE_TRUE@am__append_1 = libbacktrace_elf_for_test.la

>  @NATIVE_TRUE@am__append_2 = test_elf test_xcoff_32 test_xcoff_64 \

>  @NATIVE_TRUE@	test_pecoff test_unknown unittest unittest_alloc \

> -@NATIVE_TRUE@	btest btest_alloc stest stest_alloc ztest \

> -@NATIVE_TRUE@	ztest_alloc edtest edtest_alloc

> +@NATIVE_TRUE@	btest btest_lto btest_alloc stest stest_alloc \

> +@NATIVE_TRUE@	ztest ztest_alloc edtest edtest_alloc

>  @NATIVE_TRUE@am__append_3 = allocfail

>  @NATIVE_TRUE@am__append_4 = allocfail.sh

>  @HAVE_ELF_TRUE@@HAVE_OBJCOPY_DEBUGLINK_TRUE@@NATIVE_TRUE@am__append_5 = b2test \

> @@ -205,10 +205,10 @@ libbacktrace_noformat_la_OBJECTS =  \

>  @NATIVE_TRUE@	test_xcoff_64$(EXEEXT) test_pecoff$(EXEEXT) \

>  @NATIVE_TRUE@	test_unknown$(EXEEXT) unittest$(EXEEXT) \

>  @NATIVE_TRUE@	unittest_alloc$(EXEEXT) btest$(EXEEXT) \

> -@NATIVE_TRUE@	btest_alloc$(EXEEXT) stest$(EXEEXT) \

> -@NATIVE_TRUE@	stest_alloc$(EXEEXT) ztest$(EXEEXT) \

> -@NATIVE_TRUE@	ztest_alloc$(EXEEXT) edtest$(EXEEXT) \

> -@NATIVE_TRUE@	edtest_alloc$(EXEEXT)

> +@NATIVE_TRUE@	btest_lto$(EXEEXT) btest_alloc$(EXEEXT) \

> +@NATIVE_TRUE@	stest$(EXEEXT) stest_alloc$(EXEEXT) \

> +@NATIVE_TRUE@	ztest$(EXEEXT) ztest_alloc$(EXEEXT) \

> +@NATIVE_TRUE@	edtest$(EXEEXT) edtest_alloc$(EXEEXT)

>  @HAVE_PTHREAD_TRUE@@NATIVE_TRUE@am__EXEEXT_4 = ttest$(EXEEXT) \

>  @HAVE_PTHREAD_TRUE@@NATIVE_TRUE@	ttest_alloc$(EXEEXT)

>  @HAVE_COMPRESSED_DEBUG_TRUE@@NATIVE_TRUE@am__EXEEXT_5 =  \

> @@ -253,6 +253,13 @@ btest_alloc_OBJECTS = $(am_btest_alloc_OBJECTS)

>  btest_alloc_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \

>  	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(btest_alloc_CFLAGS) \

>  	$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@

> +@NATIVE_TRUE@am_btest_lto_OBJECTS = btest_lto-btest.$(OBJEXT) \

> +@NATIVE_TRUE@	btest_lto-testlib.$(OBJEXT)

> +btest_lto_OBJECTS = $(am_btest_lto_OBJECTS)

> +@NATIVE_TRUE@btest_lto_DEPENDENCIES = libbacktrace.la

> +btest_lto_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \

> +	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(btest_lto_CFLAGS) \

> +	$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@

>  @HAVE_COMPRESSED_DEBUG_TRUE@@NATIVE_TRUE@am_ctesta_OBJECTS = ctesta-btest.$(OBJEXT) \

>  @HAVE_COMPRESSED_DEBUG_TRUE@@NATIVE_TRUE@	ctesta-testlib.$(OBJEXT)

>  ctesta_OBJECTS = $(am_ctesta_OBJECTS)

> @@ -410,7 +417,7 @@ SOURCES = $(libbacktrace_la_SOURCES) $(EXTRA_libbacktrace_la_SOURCES) \

>  	$(libbacktrace_instrumented_alloc_la_SOURCES) \

>  	$(libbacktrace_noformat_la_SOURCES) $(allocfail_SOURCES) \

>  	$(b2test_SOURCES) $(b3test_SOURCES) $(btest_SOURCES) \

> -	$(btest_alloc_SOURCES) $(ctesta_SOURCES) \

> +	$(btest_alloc_SOURCES) $(btest_lto_SOURCES) $(ctesta_SOURCES) \

>  	$(ctesta_alloc_SOURCES) $(ctestg_SOURCES) \

>  	$(ctestg_alloc_SOURCES) $(edtest_SOURCES) \

>  	$(edtest_alloc_SOURCES) $(stest_SOURCES) \

> @@ -880,6 +887,9 @@ BUILDTESTS = $(am__append_2) $(am__append_11) $(am__append_13)

>  @NATIVE_TRUE@btest_SOURCES = btest.c testlib.c

>  @NATIVE_TRUE@btest_CFLAGS = $(AM_CFLAGS) -g -O

>  @NATIVE_TRUE@btest_LDADD = libbacktrace.la

> +@NATIVE_TRUE@btest_lto_SOURCES = btest.c testlib.c

> +@NATIVE_TRUE@btest_lto_CFLAGS = $(AM_CFLAGS) -g -O -flto

> +@NATIVE_TRUE@btest_lto_LDADD = libbacktrace.la

>  @NATIVE_TRUE@btest_alloc_SOURCES = $(btest_SOURCES)

>  @NATIVE_TRUE@btest_alloc_CFLAGS = $(btest_CFLAGS)

>  @NATIVE_TRUE@btest_alloc_LDADD = libbacktrace_alloc.la

> @@ -1065,6 +1075,10 @@ btest_alloc$(EXEEXT): $(btest_alloc_OBJECTS) $(btest_alloc_DEPENDENCIES) $(EXTRA

>  	@rm -f btest_alloc$(EXEEXT)

>  	$(AM_V_CCLD)$(btest_alloc_LINK) $(btest_alloc_OBJECTS) $(btest_alloc_LDADD) $(LIBS)

>  

> +btest_lto$(EXEEXT): $(btest_lto_OBJECTS) $(btest_lto_DEPENDENCIES) $(EXTRA_btest_lto_DEPENDENCIES) 

> +	@rm -f btest_lto$(EXEEXT)

> +	$(AM_V_CCLD)$(btest_lto_LINK) $(btest_lto_OBJECTS) $(btest_lto_LDADD) $(LIBS)

> +

>  ctesta$(EXEEXT): $(ctesta_OBJECTS) $(ctesta_DEPENDENCIES) $(EXTRA_ctesta_DEPENDENCIES) 

>  	@rm -f ctesta$(EXEEXT)

>  	$(AM_V_CCLD)$(ctesta_LINK) $(ctesta_OBJECTS) $(ctesta_LDADD) $(LIBS)

> @@ -1204,6 +1218,18 @@ btest_alloc-testlib.o: testlib.c

>  btest_alloc-testlib.obj: testlib.c

>  	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(btest_alloc_CFLAGS) $(CFLAGS) -c -o btest_alloc-testlib.obj `if test -f 'testlib.c'; then $(CYGPATH_W) 'testlib.c'; else $(CYGPATH_W) '$(srcdir)/testlib.c'; fi`

>  

> +btest_lto-btest.o: btest.c

> +	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(btest_lto_CFLAGS) $(CFLAGS) -c -o btest_lto-btest.o `test -f 'btest.c' || echo '$(srcdir)/'`btest.c

> +

> +btest_lto-btest.obj: btest.c

> +	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(btest_lto_CFLAGS) $(CFLAGS) -c -o btest_lto-btest.obj `if test -f 'btest.c'; then $(CYGPATH_W) 'btest.c'; else $(CYGPATH_W) '$(srcdir)/btest.c'; fi`

> +

> +btest_lto-testlib.o: testlib.c

> +	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(btest_lto_CFLAGS) $(CFLAGS) -c -o btest_lto-testlib.o `test -f 'testlib.c' || echo '$(srcdir)/'`testlib.c

> +

> +btest_lto-testlib.obj: testlib.c

> +	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(btest_lto_CFLAGS) $(CFLAGS) -c -o btest_lto-testlib.obj `if test -f 'testlib.c'; then $(CYGPATH_W) 'testlib.c'; else $(CYGPATH_W) '$(srcdir)/testlib.c'; fi`

> +

>  ctesta-btest.o: btest.c

>  	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ctesta_CFLAGS) $(CFLAGS) -c -o ctesta-btest.o `test -f 'btest.c' || echo '$(srcdir)/'`btest.c

>  

> @@ -1607,6 +1633,13 @@ btest.log: btest$(EXEEXT)

>  	--log-file $$b.log --trs-file $$b.trs \

>  	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \

>  	"$$tst" $(AM_TESTS_FD_REDIRECT)

> +btest_lto.log: btest_lto$(EXEEXT)

> +	@p='btest_lto$(EXEEXT)'; \

> +	b='btest_lto'; \

> +	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \

> +	--log-file $$b.log --trs-file $$b.trs \

> +	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \

> +	"$$tst" $(AM_TESTS_FD_REDIRECT)

>  btest_alloc.log: btest_alloc$(EXEEXT)

>  	@p='btest_alloc$(EXEEXT)'; \

>  	b='btest_alloc'; \

> diff --git a/libbacktrace/btest.c b/libbacktrace/btest.c

> index 636af4d24dc..b1c2a2a860d 100644

> --- a/libbacktrace/btest.c

> +++ b/libbacktrace/btest.c

> @@ -48,9 +48,9 @@ POSSIBILITY OF SUCH DAMAGE.  */

>  

>  /* Test the backtrace function with non-inlined functions.  */

>  

> -static int test1 (void) __attribute__ ((noinline, unused));

> -static int f2 (int) __attribute__ ((noinline));

> -static int f3 (int, int) __attribute__ ((noinline));

> +static int test1 (void) __attribute__ ((noinline, noclone, unused));

> +static int f2 (int) __attribute__ ((noinline, noclone));

> +static int f3 (int, int) __attribute__ ((noinline, noclone));

>  

>  static int

>  test1 (void)

> @@ -162,9 +162,9 @@ f13 (int f1line, int f2line)

>  

>  /* Test the backtrace_simple function with non-inlined functions.  */

>  

> -static int test3 (void) __attribute__ ((noinline, unused));

> -static int f22 (int) __attribute__ ((noinline));

> -static int f23 (int, int) __attribute__ ((noinline));

> +static int test3 (void) __attribute__ ((noinline, noclone, unused));

> +static int f22 (int) __attribute__ ((noinline, noclone));

> +static int f23 (int, int) __attribute__ ((noinline, noclone));

>  

>  static int

>  test3 (void)
Tom de Vries Feb. 25, 2019, 5:11 p.m. | #5
On 25-02-19 11:48, Thomas Schwinge wrote:
> Hi Tom!

> 

> On Fri, 8 Feb 2019 10:42:24 +0100, Tom de Vries <tdevries@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:

> 


Hi Thomas,

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. ]

>     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?

> 


Well, the backtrace_syminfo function looks at the minimal symbol info
(so, not the dwarf info) and it seems lto has done an optimization that
has changed the name of the variable in the minimal symbol info.

There's probably a standard way to annotate the 'global' variable to
prevent the optimization from happening, which would fix the failure
(but, we need to know which optimization renamed it).

OTOH, we could just limit this test to target libbacktrace only, given
the fact that host compilers may not even support flto.

Thanks,
- Tom
Thomas Schwinge Feb. 26, 2019, 9:40 a.m. | #6
Hi Tom!

On Mon, 25 Feb 2019 18:11:23 +0100, Tom de Vries <tdevries@suse.de> wrote:
> On 25-02-19 11:48, Thomas Schwinge wrote:

> > On Fri, 8 Feb 2019 10:42:24 +0100, Tom de Vries <tdevries@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.)

> >     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

> Well, the backtrace_syminfo function looks at the minimal symbol info

> (so, not the dwarf info) and it seems lto has done an optimization that

> has changed the name of the variable in the minimal symbol info.

> 

> There's probably a standard way to annotate the 'global' variable to

> prevent the optimization from happening, which would fix the failure

> (but, we need to know which optimization renamed it).

> 

> OTOH, we could just limit this test to target libbacktrace only, given

> the fact that host compilers may not even support flto.



Grüße
 Thomas
Tom de Vries Feb. 26, 2019, 11:28 a.m. | #7
On 26-02-19 10:40, Thomas Schwinge wrote:
> Hi Tom!

> 

> On Mon, 25 Feb 2019 18:11:23 +0100, Tom de Vries <tdevries@suse.de> wrote:

>> On 25-02-19 11:48, Thomas Schwinge wrote:

>>> On Fri, 8 Feb 2019 10:42:24 +0100, Tom de Vries <tdevries@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

> 


How about:
...
- int global;
+ static int global;
...

Does that fix the failure?

Thanks,
- Tom
Thomas Schwinge Feb. 26, 2019, noon | #8
Hi Tom!

On Tue, 26 Feb 2019 12:28:34 +0100, Tom de Vries <tdevries@suse.de> wrote:
> On 26-02-19 10:40, Thomas Schwinge wrote:

> > On Mon, 25 Feb 2019 18:11:23 +0100, Tom de Vries <tdevries@suse.de> wrote:

> >> On 25-02-19 11:48, Thomas Schwinge wrote:

> >>> On Fri, 8 Feb 2019 10:42:24 +0100, Tom de Vries <tdevries@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".  ;-\


Grüße
 Thomas
Tom de Vries Feb. 26, 2019, 2:28 p.m. | #9
On 26-02-19 13:00, Thomas Schwinge wrote:
> Hi Tom!

> 

> On Tue, 26 Feb 2019 12:28:34 +0100, Tom de Vries <tdevries@suse.de> wrote:

>> On 26-02-19 10:40, Thomas Schwinge wrote:

>>> On Mon, 25 Feb 2019 18:11:23 +0100, Tom de Vries <tdevries@suse.de> wrote:

>>>> On 25-02-19 11:48, Thomas Schwinge wrote:

>>>>> On Fri, 8 Feb 2019 10:42:24 +0100, Tom de Vries <tdevries@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  <tdevries@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",
y2s1982 . via Gcc-patches Feb. 26, 2019, 2:53 p.m. | #10
On Tue, Feb 26, 2019 at 6:27 AM Tom de Vries <tdevries@suse.de> wrote:
>

> On 26-02-19 13:00, Thomas Schwinge wrote:

> > Hi Tom!

> >

> > On Tue, 26 Feb 2019 12:28:34 +0100, Tom de Vries <tdevries@suse.de> wrote:

> >> On 26-02-19 10:40, Thomas Schwinge wrote:

> >>> On Mon, 25 Feb 2019 18:11:23 +0100, Tom de Vries <tdevries@suse.de> wrote:

> >>>> On 25-02-19 11:48, Thomas Schwinge wrote:

> >>>>> On Fri, 8 Feb 2019 10:42:24 +0100, Tom de Vries <tdevries@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?


I would drop the #ifdef and just always accept it.

    if (strncmp (symdata.name, "global") == 0
        && (symdata.name[6] == '\0' || symdata.name[6] == '.'))

Ian

Patch

diff --git a/libbacktrace/Makefile.am b/libbacktrace/Makefile.am
index 71a2ed478cc..46d7de48fd1 100644
--- a/libbacktrace/Makefile.am
+++ b/libbacktrace/Makefile.am
@@ -222,6 +222,12 @@  btest_LDADD = libbacktrace.la
 
 BUILDTESTS += btest
 
+btest_lto_SOURCES = btest.c testlib.c
+btest_lto_CFLAGS = $(AM_CFLAGS) -g -O -flto
+btest_lto_LDADD = libbacktrace.la
+
+BUILDTESTS += btest_lto
+
 btest_alloc_SOURCES = $(btest_SOURCES)
 btest_alloc_CFLAGS = $(btest_CFLAGS)
 btest_alloc_LDADD = libbacktrace_alloc.la
diff --git a/libbacktrace/Makefile.in b/libbacktrace/Makefile.in
index a2b595e9bb0..c65c40d95d8 100644
--- a/libbacktrace/Makefile.in
+++ b/libbacktrace/Makefile.in
@@ -126,8 +126,8 @@  TESTS = $(am__append_4) $(am__append_6) $(am__append_7) \
 @HAVE_ELF_TRUE@@HAVE_OBJCOPY_DEBUGLINK_TRUE@@NATIVE_TRUE@am__append_1 = libbacktrace_elf_for_test.la
 @NATIVE_TRUE@am__append_2 = test_elf test_xcoff_32 test_xcoff_64 \
 @NATIVE_TRUE@	test_pecoff test_unknown unittest unittest_alloc \
-@NATIVE_TRUE@	btest btest_alloc stest stest_alloc ztest \
-@NATIVE_TRUE@	ztest_alloc edtest edtest_alloc
+@NATIVE_TRUE@	btest btest_lto btest_alloc stest stest_alloc \
+@NATIVE_TRUE@	ztest ztest_alloc edtest edtest_alloc
 @NATIVE_TRUE@am__append_3 = allocfail
 @NATIVE_TRUE@am__append_4 = allocfail.sh
 @HAVE_ELF_TRUE@@HAVE_OBJCOPY_DEBUGLINK_TRUE@@NATIVE_TRUE@am__append_5 = b2test \
@@ -205,10 +205,10 @@  libbacktrace_noformat_la_OBJECTS =  \
 @NATIVE_TRUE@	test_xcoff_64$(EXEEXT) test_pecoff$(EXEEXT) \
 @NATIVE_TRUE@	test_unknown$(EXEEXT) unittest$(EXEEXT) \
 @NATIVE_TRUE@	unittest_alloc$(EXEEXT) btest$(EXEEXT) \
-@NATIVE_TRUE@	btest_alloc$(EXEEXT) stest$(EXEEXT) \
-@NATIVE_TRUE@	stest_alloc$(EXEEXT) ztest$(EXEEXT) \
-@NATIVE_TRUE@	ztest_alloc$(EXEEXT) edtest$(EXEEXT) \
-@NATIVE_TRUE@	edtest_alloc$(EXEEXT)
+@NATIVE_TRUE@	btest_lto$(EXEEXT) btest_alloc$(EXEEXT) \
+@NATIVE_TRUE@	stest$(EXEEXT) stest_alloc$(EXEEXT) \
+@NATIVE_TRUE@	ztest$(EXEEXT) ztest_alloc$(EXEEXT) \
+@NATIVE_TRUE@	edtest$(EXEEXT) edtest_alloc$(EXEEXT)
 @HAVE_PTHREAD_TRUE@@NATIVE_TRUE@am__EXEEXT_4 = ttest$(EXEEXT) \
 @HAVE_PTHREAD_TRUE@@NATIVE_TRUE@	ttest_alloc$(EXEEXT)
 @HAVE_COMPRESSED_DEBUG_TRUE@@NATIVE_TRUE@am__EXEEXT_5 =  \
@@ -253,6 +253,13 @@  btest_alloc_OBJECTS = $(am_btest_alloc_OBJECTS)
 btest_alloc_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
 	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(btest_alloc_CFLAGS) \
 	$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+@NATIVE_TRUE@am_btest_lto_OBJECTS = btest_lto-btest.$(OBJEXT) \
+@NATIVE_TRUE@	btest_lto-testlib.$(OBJEXT)
+btest_lto_OBJECTS = $(am_btest_lto_OBJECTS)
+@NATIVE_TRUE@btest_lto_DEPENDENCIES = libbacktrace.la
+btest_lto_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(btest_lto_CFLAGS) \
+	$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
 @HAVE_COMPRESSED_DEBUG_TRUE@@NATIVE_TRUE@am_ctesta_OBJECTS = ctesta-btest.$(OBJEXT) \
 @HAVE_COMPRESSED_DEBUG_TRUE@@NATIVE_TRUE@	ctesta-testlib.$(OBJEXT)
 ctesta_OBJECTS = $(am_ctesta_OBJECTS)
@@ -410,7 +417,7 @@  SOURCES = $(libbacktrace_la_SOURCES) $(EXTRA_libbacktrace_la_SOURCES) \
 	$(libbacktrace_instrumented_alloc_la_SOURCES) \
 	$(libbacktrace_noformat_la_SOURCES) $(allocfail_SOURCES) \
 	$(b2test_SOURCES) $(b3test_SOURCES) $(btest_SOURCES) \
-	$(btest_alloc_SOURCES) $(ctesta_SOURCES) \
+	$(btest_alloc_SOURCES) $(btest_lto_SOURCES) $(ctesta_SOURCES) \
 	$(ctesta_alloc_SOURCES) $(ctestg_SOURCES) \
 	$(ctestg_alloc_SOURCES) $(edtest_SOURCES) \
 	$(edtest_alloc_SOURCES) $(stest_SOURCES) \
@@ -880,6 +887,9 @@  BUILDTESTS = $(am__append_2) $(am__append_11) $(am__append_13)
 @NATIVE_TRUE@btest_SOURCES = btest.c testlib.c
 @NATIVE_TRUE@btest_CFLAGS = $(AM_CFLAGS) -g -O
 @NATIVE_TRUE@btest_LDADD = libbacktrace.la
+@NATIVE_TRUE@btest_lto_SOURCES = btest.c testlib.c
+@NATIVE_TRUE@btest_lto_CFLAGS = $(AM_CFLAGS) -g -O -flto
+@NATIVE_TRUE@btest_lto_LDADD = libbacktrace.la
 @NATIVE_TRUE@btest_alloc_SOURCES = $(btest_SOURCES)
 @NATIVE_TRUE@btest_alloc_CFLAGS = $(btest_CFLAGS)
 @NATIVE_TRUE@btest_alloc_LDADD = libbacktrace_alloc.la
@@ -1065,6 +1075,10 @@  btest_alloc$(EXEEXT): $(btest_alloc_OBJECTS) $(btest_alloc_DEPENDENCIES) $(EXTRA
 	@rm -f btest_alloc$(EXEEXT)
 	$(AM_V_CCLD)$(btest_alloc_LINK) $(btest_alloc_OBJECTS) $(btest_alloc_LDADD) $(LIBS)
 
+btest_lto$(EXEEXT): $(btest_lto_OBJECTS) $(btest_lto_DEPENDENCIES) $(EXTRA_btest_lto_DEPENDENCIES) 
+	@rm -f btest_lto$(EXEEXT)
+	$(AM_V_CCLD)$(btest_lto_LINK) $(btest_lto_OBJECTS) $(btest_lto_LDADD) $(LIBS)
+
 ctesta$(EXEEXT): $(ctesta_OBJECTS) $(ctesta_DEPENDENCIES) $(EXTRA_ctesta_DEPENDENCIES) 
 	@rm -f ctesta$(EXEEXT)
 	$(AM_V_CCLD)$(ctesta_LINK) $(ctesta_OBJECTS) $(ctesta_LDADD) $(LIBS)
@@ -1204,6 +1218,18 @@  btest_alloc-testlib.o: testlib.c
 btest_alloc-testlib.obj: testlib.c
 	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(btest_alloc_CFLAGS) $(CFLAGS) -c -o btest_alloc-testlib.obj `if test -f 'testlib.c'; then $(CYGPATH_W) 'testlib.c'; else $(CYGPATH_W) '$(srcdir)/testlib.c'; fi`
 
+btest_lto-btest.o: btest.c
+	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(btest_lto_CFLAGS) $(CFLAGS) -c -o btest_lto-btest.o `test -f 'btest.c' || echo '$(srcdir)/'`btest.c
+
+btest_lto-btest.obj: btest.c
+	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(btest_lto_CFLAGS) $(CFLAGS) -c -o btest_lto-btest.obj `if test -f 'btest.c'; then $(CYGPATH_W) 'btest.c'; else $(CYGPATH_W) '$(srcdir)/btest.c'; fi`
+
+btest_lto-testlib.o: testlib.c
+	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(btest_lto_CFLAGS) $(CFLAGS) -c -o btest_lto-testlib.o `test -f 'testlib.c' || echo '$(srcdir)/'`testlib.c
+
+btest_lto-testlib.obj: testlib.c
+	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(btest_lto_CFLAGS) $(CFLAGS) -c -o btest_lto-testlib.obj `if test -f 'testlib.c'; then $(CYGPATH_W) 'testlib.c'; else $(CYGPATH_W) '$(srcdir)/testlib.c'; fi`
+
 ctesta-btest.o: btest.c
 	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ctesta_CFLAGS) $(CFLAGS) -c -o ctesta-btest.o `test -f 'btest.c' || echo '$(srcdir)/'`btest.c
 
@@ -1607,6 +1633,13 @@  btest.log: btest$(EXEEXT)
 	--log-file $$b.log --trs-file $$b.trs \
 	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
 	"$$tst" $(AM_TESTS_FD_REDIRECT)
+btest_lto.log: btest_lto$(EXEEXT)
+	@p='btest_lto$(EXEEXT)'; \
+	b='btest_lto'; \
+	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+	--log-file $$b.log --trs-file $$b.trs \
+	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+	"$$tst" $(AM_TESTS_FD_REDIRECT)
 btest_alloc.log: btest_alloc$(EXEEXT)
 	@p='btest_alloc$(EXEEXT)'; \
 	b='btest_alloc'; \
diff --git a/libbacktrace/btest.c b/libbacktrace/btest.c
index 636af4d24dc..b1c2a2a860d 100644
--- a/libbacktrace/btest.c
+++ b/libbacktrace/btest.c
@@ -48,9 +48,9 @@  POSSIBILITY OF SUCH DAMAGE.  */
 
 /* Test the backtrace function with non-inlined functions.  */
 
-static int test1 (void) __attribute__ ((noinline, unused));
-static int f2 (int) __attribute__ ((noinline));
-static int f3 (int, int) __attribute__ ((noinline));
+static int test1 (void) __attribute__ ((noinline, noclone, unused));
+static int f2 (int) __attribute__ ((noinline, noclone));
+static int f3 (int, int) __attribute__ ((noinline, noclone));
 
 static int
 test1 (void)
@@ -162,9 +162,9 @@  f13 (int f1line, int f2line)
 
 /* Test the backtrace_simple function with non-inlined functions.  */
 
-static int test3 (void) __attribute__ ((noinline, unused));
-static int f22 (int) __attribute__ ((noinline));
-static int f23 (int, int) __attribute__ ((noinline));
+static int test3 (void) __attribute__ ((noinline, noclone, unused));
+static int f22 (int) __attribute__ ((noinline, noclone));
+static int f23 (int, int) __attribute__ ((noinline, noclone));
 
 static int
 test3 (void)