From 443304efce95d66ac089d95807a0002cf8558d13 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Fri, 15 Feb 2013 22:45:22 +0100 Subject: [PATCH] libdw: Handle FORM_GNU_strp_alt for files with string data only in dwz file. dwarf_formstring should check that the dbg file from which we want the strp data actually has a IDX_debug_str section. Reported-By: Tom Tromey Signed-off-by: Mark Wielaard --- libdw/ChangeLog | 5 +++ libdw/dwarf_formstring.c | 4 +- tests/ChangeLog | 8 ++++ tests/Makefile.am | 1 + tests/run-readelf-dwz-multi.sh | 73 +++++++++++++++++++++++++++++++- tests/testfile-dwzstr.bz2 | Bin 0 -> 2768 bytes tests/testfile-dwzstr.multi.bz2 | Bin 0 -> 518 bytes 7 files changed, 88 insertions(+), 3 deletions(-) create mode 100755 tests/testfile-dwzstr.bz2 create mode 100644 tests/testfile-dwzstr.multi.bz2 diff --git a/libdw/ChangeLog b/libdw/ChangeLog index 3cf303249..2900ef6c4 100644 --- a/libdw/ChangeLog +++ b/libdw/ChangeLog @@ -1,3 +1,8 @@ +2013-02-15 Mark Wielaard + + * dwarf_formstring.c (dwarf_formstring): Check dbg_ret->sectiondata, + not dbg->sectiondata. + 2013-01-07 Roland McGrath * memory-access.h diff --git a/libdw/dwarf_formstring.c b/libdw/dwarf_formstring.c index c66454e17..02b56d4a1 100644 --- a/libdw/dwarf_formstring.c +++ b/libdw/dwarf_formstring.c @@ -1,5 +1,5 @@ /* Return string associated with given attribute. - Copyright (C) 2003-2010 Red Hat, Inc. + Copyright (C) 2003-2010, 2013 Red Hat, Inc. This file is part of elfutils. Written by Ulrich Drepper , 2003. @@ -60,7 +60,7 @@ dwarf_formstring (attrp) if (unlikely (attrp->form != DW_FORM_strp && attrp->form != DW_FORM_GNU_strp_alt) - || dbg->sectiondata[IDX_debug_str] == NULL) + || dbg_ret->sectiondata[IDX_debug_str] == NULL) { __libdw_seterrno (DWARF_E_NO_STRING); return NULL; diff --git a/tests/ChangeLog b/tests/ChangeLog index 0a26e7ed9..c1e0ef96b 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,11 @@ +2013-02-15 Mark Wielaard + + * testfile-dwzstr.bz2: New testfile. + * testfile-dwzstr.multi.bz2: Likewise. + * run-readelf-dwz-multi.sh: Add readelf testfile-dwzstr test. + * Makefile.am (EXTRA_DIST): Add testfile-dwzstr.bz2 and + testfile-dwzstr.multi.bz2. + 2013-01-30 Mark Wielaard * testfileloc.bz2: New testfile. diff --git a/tests/Makefile.am b/tests/Makefile.am index a26e5c262..44b4e61bd 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -154,6 +154,7 @@ EXTRA_DIST = run-arextract.sh run-arsymtest.sh \ run-readelf-loc.sh testfileloc.bz2 \ run-readelf-dwz-multi.sh libtestfile_multi_shared.so.bz2 \ testfile_multi.dwz.bz2 testfile_multi_main.bz2 \ + testfile-dwzstr.bz2 testfile-dwzstr.multi.bz2 \ run-prelink-addr-test.sh \ testfile52-32.so.bz2 testfile52-32.so.debug.bz2 \ testfile52-32.prelink.so.bz2 testfile52-32.noshdrs.so.bz2 \ diff --git a/tests/run-readelf-dwz-multi.sh b/tests/run-readelf-dwz-multi.sh index aadbbbe11..20c00c5fb 100755 --- a/tests/run-readelf-dwz-multi.sh +++ b/tests/run-readelf-dwz-multi.sh @@ -1,5 +1,5 @@ #! /bin/sh -# Copyright (C) 2012 Red Hat, Inc. +# Copyright (C) 2012, 2013 Red Hat, Inc. # This file is part of elfutils. # # This file is free software; you can redistribute it and/or modify @@ -56,7 +56,27 @@ # gcc -g -o testfile_multi_main -L. -ltestfile_multi_shared main.c -Wl,-rpath,. # dwz -m testfile_multi.dwz testfile_multi_main libtestfile_multi_shared.so +# main.c +# +# struct foobarbaz +# { +# int counter; +# char *bookstore; +# }; +# +# int +# main (int argc, char **argv) +# { +# struct foobarbaz fbb; +# return 0; +# } + +# gcc -g -o testfile-dwzstr main.c +# cp testfile-dwzstr testfile-dwzstr.alt +# dwz -m testfile-dwzstr.multi testfile-dwzstr testfile-dwzstr.alt + testfiles libtestfile_multi_shared.so testfile_multi_main testfile_multi.dwz +testfiles testfile-dwzstr testfile-dwzstr.multi testrun_compare ../src/readelf --debug-dump=info testfile_multi_main <<\EOF @@ -153,4 +173,55 @@ DWARF section [25] '.debug_info' at offset 0x106c: [ 0] fbreg -24 EOF +testrun_compare ../src/readelf --debug-dump=info testfile-dwzstr <<\EOF + +DWARF section [28] '.debug_info' at offset 0x1088: + [Offset] + Compilation unit at offset 0: + Version: 4, Abbreviation section offset: 0, Address size: 8, Offset size: 4 + [ b] compile_unit + producer (GNU_strp_alt) "GNU C 4.7.2 20121109 (Red Hat 4.7.2-8) -mtune=generic -march=x86-64 -g" + language (data1) C89 (1) + name (GNU_strp_alt) "main.c" + comp_dir (GNU_strp_alt) "/home/mark/src/tests" + low_pc (addr) 0x00000000004004ec
+ high_pc (udata) 18 + stmt_list (sec_offset) 0 + [ 26] imported_unit + import (GNU_ref_alt) [ b] + [ 2b] subprogram + external (flag_present) + name (GNU_strp_alt) "main" + decl_file (data1) 1 + decl_line (data1) 8 + prototyped (flag_present) + type (GNU_ref_alt) [ 30] + low_pc (addr) 0x00000000004004ec
+ high_pc (udata) 18 + frame_base (exprloc) + [ 0] call_frame_cfa + GNU_all_call_sites (flag_present) + [ 41] formal_parameter + name (GNU_strp_alt) "argc" + decl_file (data1) 1 + decl_line (data1) 8 + type (GNU_ref_alt) [ 30] + location (exprloc) + [ 0] fbreg -36 + [ 4f] formal_parameter + name (GNU_strp_alt) "argv" + decl_file (data1) 1 + decl_line (data1) 8 + type (GNU_ref_alt) [ 41] + location (exprloc) + [ 0] fbreg -48 + [ 5d] variable + name (string) "fbb" + decl_file (data1) 1 + decl_line (data1) 10 + type (GNU_ref_alt) [ 14] + location (exprloc) + [ 0] fbreg -32 +EOF + exit 0 diff --git a/tests/testfile-dwzstr.bz2 b/tests/testfile-dwzstr.bz2 new file mode 100755 index 0000000000000000000000000000000000000000..8d2d326e0b0f5cd84b91097b51a17084c7162f82 GIT binary patch literal 2768 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 W3U>F~jV8^1i@744C`fkcp8J4TR{XR8 literal 0 Hc-jL100001 diff --git a/tests/testfile-dwzstr.multi.bz2 b/tests/testfile-dwzstr.multi.bz2 new file mode 100644 index 0000000000000000000000000000000000000000..5e84991d42ec673a87a2caf4ce39cc8847c3e3fc GIT binary patch literal 518 zc-jF50{Q(yT4*^jL0KkKS>m>W+yDVhfA|02?uu38_y234004jx z0sue&FaeAs5Y;@URPv4JQ!igGH3t+p^2cxkv$|Hp!EYyJt3ge(EtWO05kv@00xefrD|jAp#%4hNH15} zZIB&o!1=AQYTraHK*00XF;i5<;sbdKXb?UmrxX?N7z0%kQ4q>|n1XlE4@SZydR1U% zm5i~m%tYgg%mJAS7VY}?R>pJgRESQ{w5>klDlWP74U1; z!+uz#mPq2WI+b5aj_%j=Je)#^X@^JUp!ixcx<@u@??BcNRxk$|vlAh!skWvu z>=52%@1sDtaONVeT>i$uLPWBI^!F6C_s`fsZcR83B-{lu`CpZ9Uqcl*!k@_qe^?e7 zn3iE%3@Zla#E48Vt>luP#F#1T>sT;ju955vUI<#|8hmBMqR){dEN^8#qoqa?vyTZP zYt)?4NfakZEbfd;CamEkr3hl#jm&+pK8836=ztl@Y(*rjZqWWHA#j_;O8?^SNT&)C I99Ga