[PATCH][libbacktrace] Handle DW_FORM_GNU_strp_alt

Tom de Vries tdevries@suse.de
Wed Nov 14 13:08:00 GMT 2018


On 13-11-18 14:42, Tom de Vries wrote:
> diff --git a/libbacktrace/Makefile.am b/libbacktrace/Makefile.am
> index 3c1bd49dd7b..2fec9bbb4b6 100644
> --- a/libbacktrace/Makefile.am
> +++ b/libbacktrace/Makefile.am
> @@ -96,6 +96,28 @@ btest_LDADD = libbacktrace.la
>  
>  check_PROGRAMS += btest
>  
> +if HAVE_DWZ
> +
> +btest_dwz_SOURCES = btest_dwz.c testlib.c
> +btest_dwz_CFLAGS = $(AM_CFLAGS) -g -O0

Hmm, I already discovered that specifying the -O0 doesn't work, since
it's overridden by $(CFLAGS).

With a hack like this:
...
diff --git a/libbacktrace/Makefile.am b/libbacktrace/Makefile.am
index 2fec9bbb4b6..8bdf13b3546 100644
--- a/libbacktrace/Makefile.am
+++ b/libbacktrace/Makefile.am
@@ -99,11 +99,14 @@ check_PROGRAMS += btest
 if HAVE_DWZ

 btest_dwz_SOURCES = btest_dwz.c testlib.c
-btest_dwz_CFLAGS = $(AM_CFLAGS) -g -O0
+btest_dwz_CFLAGS = $(AM_CFLAGS) -g
 btest_dwz_LDADD = libbacktrace.la

 check_PROGRAMS += btest_dwz

+btest_dwz-btest_dwz.o: btest_dwz.c
+       $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(AM_CPPFLAGS) $(CPPFLAGS) $(btest_dwz_CFLAGS) $(CFLAGS) -O0 -c -o
btest_dwz-btest_dwz.o `test -f 'btest_dwz.c' || echo
'$(srcdir)/'`btest_dwz.c
+
 TESTS += btest_dwz_2 btest_dwz_3

 btest_dwz_2 btest_dwz_3: btest_dwz_23
...
I manage to get the -O0 to be effective.

Then copying btest.c to btest_dwz.c and replacing "btest.c" with
"btest_dwz.c" gets me passes for all but the inline tests:
...
$ ./btest_dwz_2
PASS: backtrace_full noinline
test2: [0]: got main expected f13
FAIL: backtrace_full inline
PASS: backtrace_simple noinline
test4: [0]: got main expected f33
FAIL: backtrace_simple inline
PASS: backtrace_syminfo variable
...
which is expected because in the inline case some DW_AT_abstract_origins
are using DW_FORM_GNU_ref_alt, which is not supported yet.

Thanks,
- Tom



More information about the Gcc-patches mailing list