aboutsummaryrefslogtreecommitdiff
path: root/ld
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2010-08-22 19:11:58 +0000
committerH.J. Lu <hjl.tools@gmail.com>2010-08-22 19:11:58 +0000
commita654efd60a7daee081082be0dae2a006759b6ea8 (patch)
treee0ae2e1a7566088f2d186680174a1a0fe5b46295 /ld
parent14d8bca30e85638c1f31a83f50ede4ad6a8dd620 (diff)
downloadgdb-a654efd60a7daee081082be0dae2a006759b6ea8.zip
gdb-a654efd60a7daee081082be0dae2a006759b6ea8.tar.gz
gdb-a654efd60a7daee081082be0dae2a006759b6ea8.tar.bz2
Find an ELF input for --build-id and --eh-frame-hdr.
2010-08-22 H.J. Lu <hongjiu.lu@intel.com> PR ld/11937 * emultempl/elf32.em (_after_open): Find an ELF input for --build-id and --eh-frame-hdr.
Diffstat (limited to 'ld')
-rw-r--r--ld/ChangeLog6
-rw-r--r--ld/emultempl/elf32.em43
2 files changed, 32 insertions, 17 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog
index 992f6a3..886bd89 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,3 +1,9 @@
+2010-08-22 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/11937
+ * emultempl/elf32.em (_after_open): Find an ELF input for
+ --build-id and --eh-frame-hdr.
+
2010-08-20 Maciej W. Rozycki <macro@codesourcery.com>
* Makefile.am (eshlelf_fd.c): Correct the name of the tool
diff --git a/ld/emultempl/elf32.em b/ld/emultempl/elf32.em
index 2decd18..bf4359d 100644
--- a/ld/emultempl/elf32.em
+++ b/ld/emultempl/elf32.em
@@ -1065,7 +1065,11 @@ gld${EMULATION_NAME}_after_open (void)
asection *s;
bfd_size_type size;
- abfd = link_info.input_bfds;
+ /* Find an ELF input. */
+ for (abfd = link_info.input_bfds;
+ abfd != (bfd *) NULL; abfd = abfd->link_next)
+ if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
+ break;
if (abfd == NULL)
{
@@ -1120,33 +1124,38 @@ gld${EMULATION_NAME}_after_open (void)
if (link_info.eh_frame_hdr
&& !link_info.traditional_format)
{
- bfd *abfd;
+ bfd *abfd, *elfbfd = NULL;
+ bfd_boolean warn_eh_frame = FALSE;
asection *s;
for (abfd = link_info.input_bfds; abfd; abfd = abfd->link_next)
{
+ if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
+ elfbfd = abfd;
s = bfd_get_section_by_name (abfd, ".eh_frame");
- if (s && s->size > 8 && !bfd_is_abs_section (s->output_section))
- break;
+ if (s && s->size > 8 && !bfd_is_abs_section (s->output_section))
+ warn_eh_frame = TRUE;
+ if (elfbfd && warn_eh_frame)
+ break;
}
- if (abfd)
+ if (elfbfd)
{
const struct elf_backend_data *bed;
- bed = get_elf_backend_data (abfd);
- if (bed == NULL)
- s = NULL;
- else
- s = bfd_make_section_with_flags (abfd, ".eh_frame_hdr",
- bed->dynamic_sec_flags
- | SEC_READONLY);
+ bed = get_elf_backend_data (elfbfd);
+ s = bfd_make_section_with_flags (elfbfd, ".eh_frame_hdr",
+ bed->dynamic_sec_flags
+ | SEC_READONLY);
if (s != NULL
- && bfd_set_section_alignment (abfd, s, 2))
- htab->eh_info.hdr_sec = s;
- else
- einfo ("%P: warning: Cannot create .eh_frame_hdr section,"
- " --eh-frame-hdr ignored.\n");
+ && bfd_set_section_alignment (elfbfd, s, 2))
+ {
+ htab->eh_info.hdr_sec = s;
+ warn_eh_frame = FALSE;
+ }
}
+ if (warn_eh_frame)
+ einfo ("%P: warning: Cannot create .eh_frame_hdr section,"
+ " --eh-frame-hdr ignored.\n");
}
/* Get the list of files which appear in DT_NEEDED entries in