[binutils-gdb] readelf: Do not warn about mapping symbols that extend beyond the end of mergeable sections
Nick Clifton
nickc@sourceware.org
Mon Dec 8 12:18:08 GMT 2025
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=45cf0b829303f4604757fdd052bc95d589bac8c8
commit 45cf0b829303f4604757fdd052bc95d589bac8c8
Author: Nick Clifton <nickc@redhat.com>
Date: Mon Dec 8 12:17:28 2025 +0000
readelf: Do not warn about mapping symbols that extend beyond the end of mergeable sections
Diff:
---
binutils/readelf.c | 23 ++++++++++++++++++-----
1 file changed, 18 insertions(+), 5 deletions(-)
diff --git a/binutils/readelf.c b/binutils/readelf.c
index 064c16056a2..b001d717746 100644
--- a/binutils/readelf.c
+++ b/binutils/readelf.c
@@ -14665,6 +14665,18 @@ print_symbol_size (uint64_t vma, int base)
}
}
+/* The AArch64, ARM and RISC-V architectures define mapping
+ symbols (eg $d, $x, $t) which sometime should be ignored. */
+
+static bool
+is_mapping_symbol (const char * name)
+{
+ return name[0] == '$'
+ && name [1] != 0
+ /* FIXME: Check that name[1] is lower case ASCII ? */
+ && name [2] == 0;
+}
+
/* Print information on a single symbol. */
static void
@@ -14801,7 +14813,9 @@ print_symbol (Filedata * filedata,
/* Local symbols whose value is larger than their section's size are suspicious
especially if that section is mergeable - and hence might change offsets of
- the contents inside the section. */
+ the contents inside the section.
+ Note - for some reason we can get mapping symbols that do not relate to their
+ section's contents - so we ignore those type of symbol as well. */
if (ELF_ST_BIND (psym->st_info) == STB_LOCAL
&& ! is_special
&& is_valid
@@ -14809,7 +14823,8 @@ print_symbol (Filedata * filedata,
&& filedata->section_headers != NULL
/* FIXME: Should we warn for non-mergeable sections ? */
&& (filedata->section_headers[psym->st_shndx].sh_flags & SHF_MERGE)
- && psym->st_value > filedata->section_headers[psym->st_shndx].sh_size)
+ && psym->st_value > filedata->section_headers[psym->st_shndx].sh_size
+ && ! is_mapping_symbol (strtab + psym->st_name))
warn (_("local symbol %s has a value (%#" PRIx64 ") which is larger than mergeable section %s's size (%#" PRIx64 ")\n"),
strtab + psym->st_name,
psym->st_value,
@@ -23032,9 +23047,7 @@ get_symbol_for_build_attribute (Filedata *filedata,
/* The AArch64, ARM and RISC-V architectures define mapping symbols
(eg $d, $x, $t) which we want to ignore. */
- if (ba_cache.strtab[sym->st_name] == '$'
- && ba_cache.strtab[sym->st_name + 1] != 0
- && ba_cache.strtab[sym->st_name + 2] == 0)
+ if (is_mapping_symbol (ba_cache.strtab + sym->st_name))
continue;
if (is_open_attr)
More information about the Binutils-cvs
mailing list