This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
PATCH: PR ld/11946: Invalid memory access in ELF before_allocation
- From: "H.J. Lu" <hongjiu dot lu at intel dot com>
- To: binutils at sourceware dot org
- Date: Wed, 25 Aug 2010 09:58:36 -0700
- Subject: PATCH: PR ld/11946: Invalid memory access in ELF before_allocation
- Reply-to: "H.J. Lu" <hjl dot tools at gmail dot com>
Hi,
We should check ELF audit entry only on ELF input. I checked in this
patch as an obvious fix.
H.J.
---
diff --git a/ld/ChangeLog b/ld/ChangeLog
index 55fd8e3..c5a8859 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,3 +1,9 @@
+2010-08-25 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/11946
+ * emultempl/elf32.em (_before_allocation): Check audit entry
+ only on ELF input.
+
2010-08-22 H.J. Lu <hongjiu.lu@intel.com>
PR ld/11937
diff --git a/ld/emultempl/elf32.em b/ld/emultempl/elf32.em
index aa9d787..c8682ae 100644
--- a/ld/emultempl/elf32.em
+++ b/ld/emultempl/elf32.em
@@ -1495,33 +1495,34 @@ gld${EMULATION_NAME}_before_allocation (void)
rpath = (const char *) getenv ("LD_RUN_PATH");
for (abfd = link_info.input_bfds; abfd; abfd = abfd->link_next)
- {
- const char *audit_libs = elf_dt_audit (abfd);
+ if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
+ {
+ const char *audit_libs = elf_dt_audit (abfd);
- /* If the input bfd contains an audit entry, we need to add it as
- a dep audit entry. */
- if (audit_libs && *audit_libs != '\0')
- {
- char *cp = xstrdup (audit_libs);
- do
- {
- int more = 0;
- char *cp2 = strchr (cp, config.rpath_separator);
+ /* If the input bfd contains an audit entry, we need to add it as
+ a dep audit entry. */
+ if (audit_libs && *audit_libs != '\0')
+ {
+ char *cp = xstrdup (audit_libs);
+ do
+ {
+ int more = 0;
+ char *cp2 = strchr (cp, config.rpath_separator);
- if (cp2)
- {
- *cp2 = '\0';
- more = 1;
- }
-
- if (cp != NULL && *cp != '\0')
- gld${EMULATION_NAME}_append_to_separated_string (&depaudit, cp);
+ if (cp2)
+ {
+ *cp2 = '\0';
+ more = 1;
+ }
- cp = more ? ++cp2 : NULL;
- }
- while (cp != NULL);
- }
- }
+ if (cp != NULL && *cp != '\0')
+ gld${EMULATION_NAME}_append_to_separated_string (&depaudit, cp);
+
+ cp = more ? ++cp2 : NULL;
+ }
+ while (cp != NULL);
+ }
+ }
if (! (bfd_elf_size_dynamic_sections
(link_info.output_bfd, command_line.soname, rpath,