aboutsummaryrefslogtreecommitdiff
path: root/bfd/elf.c
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2005-04-05 04:01:12 +0000
committerH.J. Lu <hjl.tools@gmail.com>2005-04-05 04:01:12 +0000
commitda9f89d4e2ddc91160b2056d290031afd868cb90 (patch)
treeb2ca1cef314e46d027fe79e7aab804df3642c3ee /bfd/elf.c
parent7e4111adb2cc33e4770e634cd0039378e5b635e9 (diff)
downloadgdb-da9f89d4e2ddc91160b2056d290031afd868cb90.zip
gdb-da9f89d4e2ddc91160b2056d290031afd868cb90.tar.gz
gdb-da9f89d4e2ddc91160b2056d290031afd868cb90.tar.bz2
bfd/
2005-04-04 H.J. Lu <hongjiu.lu@intel.com> * elf.c (bfd_elf_set_group_contents): Ignore linker created group section. (assign_section_numbers): Accept link_info. Check SHT_GROUP sections for relocatable files only. Remove the linker created group sections. (_bfd_elf_compute_section_file_positions): Pass link_info to assign_section_numbers. * elfxx-ia64.c (elfNN_ia64_object_p): New. (elf_backend_object_p): Defined. gas/ 2005-04-04 H.J. Lu <hongjiu.lu@intel.com> * config/tc-ia64.c (start_unwind_section): Undo the change of 2004-08-18. (generate_unwind_image, dot_endp): Likewise.
Diffstat (limited to 'bfd/elf.c')
-rw-r--r--bfd/elf.c37
1 files changed, 28 insertions, 9 deletions
diff --git a/bfd/elf.c b/bfd/elf.c
index f1c5fdb..4c10096 100644
--- a/bfd/elf.c
+++ b/bfd/elf.c
@@ -2728,7 +2728,7 @@ bfd_elf_set_group_contents (bfd *abfd, asection *sec, void *failedptrarg)
in here too, while we're at it. */
static bfd_boolean
-assign_section_numbers (bfd *abfd)
+assign_section_numbers (bfd *abfd, struct bfd_link_info *link_info)
{
struct elf_obj_tdata *t = elf_tdata (abfd);
asection *sec;
@@ -2741,16 +2741,35 @@ assign_section_numbers (bfd *abfd)
_bfd_elf_strtab_clear_all_refs (elf_shstrtab (abfd));
- /* Put SHT_GROUP sections first. */
- for (sec = abfd->sections; sec; sec = sec->next)
+ /* SHT_GROUP sections are in relocatable files only. */
+ if (link_info == NULL || link_info->relocatable)
{
- d = elf_section_data (sec);
+ asection **secp;
- if (d->this_hdr.sh_type == SHT_GROUP)
+ /* Put SHT_GROUP sections first. */
+ secp = &abfd->sections;
+ while (*secp)
{
- if (section_number == SHN_LORESERVE)
- section_number += SHN_HIRESERVE + 1 - SHN_LORESERVE;
- d->this_idx = section_number++;
+ d = elf_section_data (*secp);
+
+ if (d->this_hdr.sh_type == SHT_GROUP)
+ {
+ if ((*secp)->flags & SEC_LINKER_CREATED)
+ {
+ /* Remove the linker created SHT_GROUP sections. */
+ bfd_section_list_remove (abfd, secp);
+ abfd->section_count--;
+ continue;
+ }
+ else
+ {
+ if (section_number == SHN_LORESERVE)
+ section_number += SHN_HIRESERVE + 1 - SHN_LORESERVE;
+ d->this_idx = section_number++;
+ }
+ }
+
+ secp = &(*secp)->next;
}
}
@@ -3277,7 +3296,7 @@ _bfd_elf_compute_section_file_positions (bfd *abfd,
if (failed)
return FALSE;
- if (!assign_section_numbers (abfd))
+ if (!assign_section_numbers (abfd, link_info))
return FALSE;
/* The backend linker builds symbol table information itself. */