summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJose E. Marchesi <[email protected]>2015-10-13 18:39:15 +0200
committerMark Wielaard <[email protected]>2015-10-13 19:42:19 +0200
commitbc119074c2fadf5288ab8e635a930aac496282d7 (patch)
treed5e6c88745f09fd4a3e9a5cd352797e7e2530484
parentb9be1434ff0a4ce9ebe80fcda5c6a9891904b26e (diff)
Do not rely on ebl_check_special_section when checking debuginfo files.
The test run-strip-strmerge.sh is failing in sparc targets. This is because it does an `elflint -d' in a debuginfo file, and this fails with: section [21] '.plt' is both executable and writable elflint uses the ebl_check_special_section hook (implemented only by the alpha and sparc backends) in order to determine whether an executable+writable section must be flagged or not. In both cases the hook will fail analyzing eu-strip debuginfo files (as they should, because debuginfo files are broken ;). This patch just modifies elflint to not use the hook when -d is specified in the command-line. This fixes the test in sparc-* and sparc64-* targets (and presumably in alpha* targets too). Additionaly, the patch checks that the type of WE sections in debuginfo files is NOBITS. Signed-off-by: Jose E. Marchesi <[email protected]>
-rw-r--r--src/ChangeLog6
-rw-r--r--src/elflint.c18
2 files changed, 19 insertions, 5 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index 8ba25397..f459e117 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,9 @@
+2015-10-13 Jose E. Marchesi <[email protected]>
+
+ * elflint.c (check_sections): Do not rely on
+ ebl_check_special_section when checking debuginfo files. Also
+ check that the type of WE sections in debuginfo files is NOBITS.
+
2015-10-13 Mark Wielaard <[email protected]>
* elflint.c (check_program_header): Check relro flags are a subset
diff --git a/src/elflint.c b/src/elflint.c
index 63192bbd..0a6f0df3 100644
--- a/src/elflint.c
+++ b/src/elflint.c
@@ -3938,12 +3938,20 @@ section [%2zu] '%s' has unexpected type %d for an executable section\n"),
break;
}
- if ((shdr->sh_flags & SHF_WRITE)
- && !ebl_check_special_section (ebl, cnt, shdr,
- section_name (ebl, cnt)))
- ERROR (gettext ("\
+ if (shdr->sh_flags & SHF_WRITE)
+ {
+ if (is_debuginfo && shdr->sh_type != SHT_NOBITS)
+ ERROR (gettext ("\
+section [%2zu] '%s' must be of type NOBITS in debuginfo files\n"),
+ cnt, section_name (ebl, cnt));
+
+ if (!is_debuginfo
+ && !ebl_check_special_section (ebl, cnt, shdr,
+ section_name (ebl, cnt)))
+ ERROR (gettext ("\
section [%2zu] '%s' is both executable and writable\n"),
- cnt, section_name (ebl, cnt));
+ cnt, section_name (ebl, cnt));
+ }
}
if (ehdr->e_type != ET_REL && (shdr->sh_flags & SHF_ALLOC) != 0)