From 8fd75781892c7458702f72b3b9cb1927609716de Mon Sep 17 00:00:00 2001 From: Nick Clifton Date: Fri, 23 Mar 2018 12:20:03 +0000 Subject: [PATCH] Improve readelf's selection of a file start symbol when displaying a gnu build attribute. * readelf.c (get_symbol_for_build_attribute): Skip ARM mapping symbols. (print_gnu_build_attribute_description): If no file start symbol could be found, look for one two bytes into the file. * testsuite/binutils-all/note-4-64.s: Set the address of the file start symbol to two bytes into the file. * testsuite/binutils-all/note-4-32.s: Likewise. --- binutils/ChangeLog | 10 ++++++++++ binutils/readelf.c | 13 +++++++++++++ binutils/testsuite/binutils-all/note-4-32.d | 18 +++++++++--------- binutils/testsuite/binutils-all/note-4-32.s | 4 ++-- binutils/testsuite/binutils-all/note-4-64.s | 4 ++-- 5 files changed, 36 insertions(+), 13 deletions(-) diff --git a/binutils/ChangeLog b/binutils/ChangeLog index cb4e3beac02..eb17a425e35 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -1,3 +1,13 @@ +2018-03-23 Nick Clifton + + * readelf.c (get_symbol_for_build_attribute): Skip ARM mapping + symbols. + (print_gnu_build_attribute_description): If no file start symbol + could be found, look for one two bytes into the file. + * testsuite/binutils-all/note-4-64.s: Set the address of the file + start symbol to two bytes into the file. + * testsuite/binutils-all/note-4-32.s: Likewise. + 2018-03-21 H.J. Lu * readelf.c (process_dynamic_section): Also dump DF_1_KMOD, diff --git a/binutils/readelf.c b/binutils/readelf.c index d0bd6790328..80075c21f83 100644 --- a/binutils/readelf.c +++ b/binutils/readelf.c @@ -17502,6 +17502,13 @@ get_symbol_for_build_attribute (Filedata * filedata, if (strtab[sym->st_name] == 0) continue; + /* The AArch64 and ARM architectures define mapping symbols + (eg $d, $x, $t) which we want to ignore. */ + if (strtab[sym->st_name] == '$' + && strtab[sym->st_name + 1] != 0 + && strtab[sym->st_name + 2] == 0) + continue; + if (is_open_attr) { /* For OPEN attributes we prefer GLOBAL over LOCAL symbols @@ -17630,6 +17637,12 @@ print_gnu_build_attribute_description (Elf_Internal_Note * pnote, name = NULL; sym = get_symbol_for_build_attribute (filedata, start, is_open_attr, & name); + /* As of version 5 of the annobin plugin, filename symbols are biased by 2 + in order to avoid them being confused with the start address of the + first function in the file... */ + if (sym == NULL && is_open_attr) + sym = get_symbol_for_build_attribute (filedata, start + 2, is_open_attr, + & name); if (end == 0 && sym != NULL && sym->st_size > 0) end = start + sym->st_size; diff --git a/binutils/testsuite/binutils-all/note-4-32.d b/binutils/testsuite/binutils-all/note-4-32.d index 567af908f2d..6c9e98ef24c 100644 --- a/binutils/testsuite/binutils-all/note-4-32.d +++ b/binutils/testsuite/binutils-all/note-4-32.d @@ -7,13 +7,13 @@ #... Displaying notes found in: .gnu.build.attributes [ ]+Owner[ ]+Data size[ ]+Description -[ ]+GA\$3p3[ ]+0x00000008[ ]+OPEN[ ]+Applies to region from 0x100 to 0x110 \(note_4.s\) -[ ]+GA\$gcc 7.2.1 20170915[ ]+0x00000000[ ]+OPEN[ ]+Applies to region from 0x100 to 0x110 -[ ]+GA\*GOW:0x700[ ]+0x00000000[ ]+OPEN[ ]+Applies to region from 0x100 to 0x110 -[ ]+GA\*off[ ]+0x00000000[ ]+OPEN[ ]+Applies to region from 0x100 to 0x110 -[ ]+GA\*FORTIFY:0xff[ ]+0x00000000[ ]+OPEN[ ]+Applies to region from 0x100 to 0x110 -[ ]+GA\*PIC[ ]+0x00000000[ ]+OPEN[ ]+Applies to region from 0x100 to 0x110 -[ ]+GA\!false[ ]+0x00000000[ ]+OPEN[ ]+Applies to region from 0x100 to 0x110 -[ ]+GA\*0x[0-9a-f]+[ ]+0x00000000[ ]+OPEN[ ]+Applies to region from 0x100 to 0x110 -[ ]+GA\*strong[ ]+0x00000008[ ]+func[ ]+Applies to region from 0x108 to 0x10c.* +[ ]+GA\$3p3[ ]+0x00000008[ ]+OPEN[ ]+Applies to region from 0x10. to 0x110 \(note_4.s\) +[ ]+GA\$gcc 7.2.1 20170915[ ]+0x00000000[ ]+OPEN[ ]+Applies to region from 0x10. to 0x110 +[ ]+GA\*GOW:0x700[ ]+0x00000000[ ]+OPEN[ ]+Applies to region from 0x10. to 0x110 +[ ]+GA\*off[ ]+0x00000000[ ]+OPEN[ ]+Applies to region from 0x10. to 0x110 +[ ]+GA\*FORTIFY:0xff[ ]+0x00000000[ ]+OPEN[ ]+Applies to region from 0x10. to 0x110 +[ ]+GA\*PIC[ ]+0x00000000[ ]+OPEN[ ]+Applies to region from 0x10. to 0x110 +[ ]+GA\!false[ ]+0x00000000[ ]+OPEN[ ]+Applies to region from 0x10. to 0x110 +[ ]+GA\*0x[0-9a-f]+[ ]+0x00000000[ ]+OPEN[ ]+Applies to region from 0x10. to 0x110 +[ ]+GA\*strong[ ]+0x00000008[ ]+func[ ]+Applies to region from 0x10. to 0x10c.* #... diff --git a/binutils/testsuite/binutils-all/note-4-32.s b/binutils/testsuite/binutils-all/note-4-32.s index 09c5652f1c5..20d9e7b9a48 100644 --- a/binutils/testsuite/binutils-all/note-4-32.s +++ b/binutils/testsuite/binutils-all/note-4-32.s @@ -1,6 +1,6 @@ .text .org 0x100 -note_4.s: + .equiv note_4.s, . + 2 .dc.l 0 .dc.l 0 @@ -18,7 +18,7 @@ note_4.s_end: .dc.l 8 .dc.l 0x100 .asciz "GA$3p3" - .dc.l note_4.s + .dc.l note_4.s - 2 .dc.l note_4.s_end .dc.l 23 diff --git a/binutils/testsuite/binutils-all/note-4-64.s b/binutils/testsuite/binutils-all/note-4-64.s index 4f532986b7e..1901682bb94 100644 --- a/binutils/testsuite/binutils-all/note-4-64.s +++ b/binutils/testsuite/binutils-all/note-4-64.s @@ -1,6 +1,6 @@ .text .org 0x100 -note_4.s: + .equiv note_4.s, . + 2 .dc.l 0 .dc.l 0 .dc.l 0 @@ -22,7 +22,7 @@ note_4.s_end: .dc.l 16 .dc.l 0x100 .asciz "GA$3p3" - .8byte note_4.s + .8byte note_4.s - 2 .8byte note_4.s_end .dc.l 23 -- 2.30.2