Improve readelf's selection of a file start symbol when displaying a gnu build attribute.
authorNick Clifton <nickc@redhat.com>
Fri, 23 Mar 2018 12:20:03 +0000 (12:20 +0000)
committerNick Clifton <nickc@redhat.com>
Fri, 23 Mar 2018 12:20:03 +0000 (12:20 +0000)
* 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
binutils/readelf.c
binutils/testsuite/binutils-all/note-4-32.d
binutils/testsuite/binutils-all/note-4-32.s
binutils/testsuite/binutils-all/note-4-64.s

index cb4e3beac021686d2edf257db8301209cb6583bb..eb17a425e35de2cb8dc01dca1f7115e70f1377b2 100644 (file)
@@ -1,3 +1,13 @@
+2018-03-23  Nick Clifton  <nickc@redhat.com>
+
+       * 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  <hongjiu.lu@intel.com>
 
        * readelf.c (process_dynamic_section): Also dump DF_1_KMOD,
index d0bd6790328ffbac74acf7ed1191a0fb5db4136a..80075c21f83957f9cd62dee247e611ef30a36903 100644 (file)
@@ -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;
index 567af908f2d07e79ff5a284c541d2463d57ba6bb..6c9e98ef24c8950bf6fa2609ba1c38890c8ba532 100644 (file)
@@ -7,13 +7,13 @@
 #...
 Displaying notes found in: .gnu.build.attributes
 [      ]+Owner[        ]+Data size[    ]+Description
-[      ]+GA\$<version>3p3[     ]+0x00000008[   ]+OPEN[         ]+Applies to region from 0x100 to 0x110 \(note_4.s\)
-[      ]+GA\$<tool>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\*<stack prot>off[  ]+0x00000000[   ]+OPEN[         ]+Applies to region from 0x100 to 0x110
-[      ]+GA\*FORTIFY:0xff[     ]+0x00000000[   ]+OPEN[         ]+Applies to region from 0x100 to 0x110
-[      ]+GA\*<PIC>PIC[         ]+0x00000000[   ]+OPEN[         ]+Applies to region from 0x100 to 0x110
-[      ]+GA\!<short enum>false[        ]+0x00000000[   ]+OPEN[         ]+Applies to region from 0x100 to 0x110
-[      ]+GA\*<ABI>0x[0-9a-f]+[         ]+0x00000000[   ]+OPEN[         ]+Applies to region from 0x100 to 0x110
-[      ]+GA\*<stack prot>strong[       ]+0x00000008[   ]+func[         ]+Applies to region from 0x108 to 0x10c.*
+[      ]+GA\$<version>3p3[     ]+0x00000008[   ]+OPEN[         ]+Applies to region from 0x10. to 0x110 \(note_4.s\)
+[      ]+GA\$<tool>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\*<stack prot>off[  ]+0x00000000[   ]+OPEN[         ]+Applies to region from 0x10. to 0x110
+[      ]+GA\*FORTIFY:0xff[     ]+0x00000000[   ]+OPEN[         ]+Applies to region from 0x10. to 0x110
+[      ]+GA\*<PIC>PIC[         ]+0x00000000[   ]+OPEN[         ]+Applies to region from 0x10. to 0x110
+[      ]+GA\!<short enum>false[        ]+0x00000000[   ]+OPEN[         ]+Applies to region from 0x10. to 0x110
+[      ]+GA\*<ABI>0x[0-9a-f]+[         ]+0x00000000[   ]+OPEN[         ]+Applies to region from 0x10. to 0x110
+[      ]+GA\*<stack prot>strong[       ]+0x00000008[   ]+func[         ]+Applies to region from 0x10. to 0x10c.*
 #...
index 09c5652f1c5a6d1c5081984ba97f8b559a3300a6..20d9e7b9a48fd6fed9973efa8f23d79cdcd84ebe 100644 (file)
@@ -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$\ 13p3"
-       .dc.l note_4.s
+       .dc.l note_4.s - 2
        .dc.l note_4.s_end
 
        .dc.l 23
index 4f532986b7eb09d923f9a65c684184bca7fa429b..1901682bb941abd19cd5a1c3a097d36281d07aec 100644 (file)
@@ -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$\ 13p3"
-       .8byte note_4.s
+       .8byte note_4.s - 2
        .8byte note_4.s_end
 
        .dc.l 23