summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Wielaard <mjw@redhat.com>2015-10-16 21:19:05 +0200
committerMark Wielaard <mjw@redhat.com>2015-10-16 21:19:05 +0200
commita1e17a2551ddd1b2c4853e053dc1b254440211bd (patch)
treeb675cdd05cd9a408b0b1d8fc3d4c27bca33318d0
parent0479e127b146b585b023380579e11e7015de9c6c (diff)
downloadelfutils-a1e17a2551ddd1b2c4853e053dc1b254440211bd.tar.gz
elflint: Don't check shdr or TLS symbol offsets against debuginfo phdrs.
In debuginfo files the phdrs file offsets match those of the original ELF file. So the section header file offsets and the TLS symbol value offset in debuginfo files cannot be sanity checked against the phdrs file offset. The issue can be triggered with run-strip-strmerge.sh test when configured with --enable-gcov. Which will insert a .tbss section and TLS symbols that trigger the above checks. Signed-off-by: Mark Wielaard <mjw@redhat.com>
-rw-r--r--src/ChangeLog7
-rw-r--r--src/elflint.c5
2 files changed, 10 insertions, 2 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index 0d2b1d61..f9e3b4a5 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,5 +1,12 @@
2015-10-16 Mark Wielaard <mjw@redhat.com>
+ * elflint.c (check_symtab): Don't check TLS symbol value against TLS
+ phdr offset in debuginfo files.
+ (check_sections): Don't try to match section offsets to phdrs offsets
+ in debuginfo files.
+
+2015-10-16 Mark Wielaard <mjw@redhat.com>
+
* elflint.c (check_reloc_shdr): Reject only desthdrs if they have both
SHF_MERGE and SHF_STRINGS set.
diff --git a/src/elflint.c b/src/elflint.c
index eada4d50..7d72a1f7 100644
--- a/src/elflint.c
+++ b/src/elflint.c
@@ -864,7 +864,7 @@ section [%2d] '%s': symbol %zu: TLS symbol but no TLS program header entry\n"),
section [%2d] '%s': symbol %zu: TLS symbol but couldn't get TLS program header entry\n"),
idx, section_name (ebl, idx), cnt);
}
- else
+ else if (!is_debuginfo)
{
if (st_value
< destshdr->sh_offset - phdr->p_offset)
@@ -3955,7 +3955,8 @@ section [%2zu] '%s' is both executable and writable\n"),
}
}
- if (ehdr->e_type != ET_REL && (shdr->sh_flags & SHF_ALLOC) != 0)
+ if (ehdr->e_type != ET_REL && (shdr->sh_flags & SHF_ALLOC) != 0
+ && !is_debuginfo)
{
/* Make sure the section is contained in a loaded segment
and that the initialization part matches NOBITS sections. */