aboutsummaryrefslogtreecommitdiff
path: root/binutils
diff options
context:
space:
mode:
authorNick Clifton <nickc@redhat.com>2018-07-06 13:52:59 +0100
committerNick Clifton <nickc@redhat.com>2018-07-06 13:52:59 +0100
commitd20e98ab59ea49d3f90bf05ac7b16c0d3588ce41 (patch)
tree3c3d366162599ad1b96b6f7a8013392794097d31 /binutils
parent2e48456f0236d39b6de98feb7168f56cef155912 (diff)
downloadbinutils-d20e98ab59ea49d3f90bf05ac7b16c0d3588ce41.zip
binutils-d20e98ab59ea49d3f90bf05ac7b16c0d3588ce41.tar.gz
binutils-d20e98ab59ea49d3f90bf05ac7b16c0d3588ce41.tar.bz2
Stop readelf from reporting gaps in the gnu build notes if the gap crosses a section boundary.
* readelf.c (same_section): New function. (print_gnu_build_attribute_description): Do not complain about gaps that cross a section boundary.
Diffstat (limited to 'binutils')
-rw-r--r--binutils/ChangeLog6
-rw-r--r--binutils/readelf.c24
2 files changed, 28 insertions, 2 deletions
diff --git a/binutils/ChangeLog b/binutils/ChangeLog
index 8b37aae..a9e0d68 100644
--- a/binutils/ChangeLog
+++ b/binutils/ChangeLog
@@ -1,3 +1,9 @@
+2018-07-06 Nick Clifton <nickc@redhat.com>
+
+ * readelf.c (same_section): New function.
+ (print_gnu_build_attribute_description): Do not complain about
+ gaps that cross a section boundary.
+
2018-07-05 Nick Clifton <nickc@redhat.com>
* po/bg.po: Updated Bulgarian translation.
diff --git a/binutils/readelf.c b/binutils/readelf.c
index 1b50ba7..88fb356 100644
--- a/binutils/readelf.c
+++ b/binutils/readelf.c
@@ -17705,6 +17705,20 @@ get_symbol_for_build_attribute (Filedata * filedata,
return saved_sym;
}
+/* Returns true iff addr1 and addr2 are in the same section. */
+
+static bfd_boolean
+same_section (Filedata * filedata, unsigned long addr1, unsigned long addr2)
+{
+ Elf_Internal_Shdr * a1;
+ Elf_Internal_Shdr * a2;
+
+ a1 = find_section_by_address (filedata, addr1);
+ a2 = find_section_by_address (filedata, addr2);
+
+ return a1 == a2 && a1 != NULL;
+}
+
static bfd_boolean
print_gnu_build_attribute_description (Elf_Internal_Note * pnote,
Filedata * filedata)
@@ -17786,8 +17800,14 @@ print_gnu_build_attribute_description (Elf_Internal_Note * pnote,
if (is_open_attr)
{
- /* FIXME: Need to properly allow for section alignment. 16 is just the alignment used on x86_64. */
- if (global_end > 0 && start > BFD_ALIGN (global_end, 16))
+ /* FIXME: Need to properly allow for section alignment.
+ 16 is just the alignment used on x86_64. */
+ if (global_end > 0
+ && start > BFD_ALIGN (global_end, 16)
+ /* Build notes are not guaranteed to be organised in order of
+ increasing address, but we should find the all of the notes
+ for one section in the same place. */
+ && same_section (filedata, start, global_end))
warn (_("Gap in build notes detected from %#lx to %#lx\n"),
global_end + 1, start - 1);