aboutsummaryrefslogtreecommitdiff
path: root/ld/emultempl
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2001-12-17 00:40:53 +0000
committerAlan Modra <amodra@gmail.com>2001-12-17 00:40:53 +0000
commit73e87d70385884aeb3a381e727cb81a8fe12b1d9 (patch)
tree7984cf3ced3a33ff6b77cff7273fc35e71cbeeb6 /ld/emultempl
parentd9464f48d7a5065d86b101078509be7889fb6318 (diff)
downloadbinutils-73e87d70385884aeb3a381e727cb81a8fe12b1d9.zip
binutils-73e87d70385884aeb3a381e727cb81a8fe12b1d9.tar.gz
binutils-73e87d70385884aeb3a381e727cb81a8fe12b1d9.tar.bz2
hash bfd sections for fast lookup and create.
bfd/ChangeLog * bfd.c (struct _bfd): Add section_htab, section_tail. * libbfd-in.h (_bfd_delete_bfd): Declare. (bfd_section_hash_newfunc): Declare. * opncls.c (_bfd_new_bfd): Free memory on failure. Init section_htab and section_tail. (_bfd_delete_bfd): New function. (bfd_openr): Use it. (bfd_fdopenr): Likewise. (bfd_openstreamr): Likewise. (bfd_openw): Likewise. (bfd_close): Likewise. (bfd_close_all_done): Likewise. (bfd_release): Comment. * section.c (struct section_hash_entry): New. (bfd_section_hash_newfunc): New function. (section_hash_lookup): Define. (bfd_section_init): New function, split out from bfd_make_section_anyway. (bfd_get_section_by_name): Lookup via hash table. (bfd_get_unique_section_name): Likewise. (bfd_make_section_old_way): Rewrite to use hash table. (bfd_make_section_anyway): Likewise. (bfd_make_section): Likewise. Return NULL for attempts to make BFD_{ABS,COM,UND,IND}_SECTION_NAME. (_bfd_strip_section_from_output): Adjust section_tail if needed. * configure.in: Bump bfd version. * configure: Regenerate. * libbfd.h: Regenerate. * bfd-in2.h: Regenerate. ld/ChangeLog * emultempl/elf32.em (gld${EMULATION_NAME}_place_orphan): Adjust section_tail when fiddling with section list. (gld${EMULATION_NAME}_list_options): Ensure sentences aren't broken into separate strings to make translation easier. * emultempl/mmo.em (mmo_place_orphan): Adjust section_tail when fiddling with section list. * emultempl/pe.em (gld_${EMULATION_NAME}_place_orphan): Likewise.
Diffstat (limited to 'ld/emultempl')
-rw-r--r--ld/emultempl/elf32.em7
-rw-r--r--ld/emultempl/mmo.em4
-rw-r--r--ld/emultempl/pe.em4
3 files changed, 13 insertions, 2 deletions
diff --git a/ld/emultempl/elf32.em b/ld/emultempl/elf32.em
index ef71595..d65923a 100644
--- a/ld/emultempl/elf32.em
+++ b/ld/emultempl/elf32.em
@@ -1274,10 +1274,14 @@ gld${EMULATION_NAME}_place_orphan (file, s)
for (pps = &output_bfd->sections; *pps != snew; pps = &(*pps)->next)
;
*pps = snew->next;
+ if (snew->next == NULL)
+ snew->owner->section_tail = pps;
/* Now tack it on to the "place->os" section list. */
snew->next = *place->section;
*place->section = snew;
+ if (snew->next == NULL)
+ snew->owner->section_tail = &snew->next;
}
/* Save the end of this list. Further ophans of this type will
@@ -1598,8 +1602,7 @@ cat >>e${EMULATION_NAME}.c <<EOF
fprintf (file, _(" -z nodlopen\t\tMark DSO not available to dlopen\n"));
fprintf (file, _(" -z nodump\t\tMark DSO not available to dldump\n"));
fprintf (file, _(" -z now\t\tMark object non-lazy runtime binding\n"));
- fprintf (file, _(" -z origin\t\tMark object requiring immediate \$ORIGIN processing\n"));
- fprintf (file, _("\t\t\t at runtime\n"));
+ fprintf (file, _(" -z origin\t\tMark object requiring immediate \$ORIGIN processing\n\t\t\t at runtime\n"));
fprintf (file, _(" -z KEYWORD\t\tIgnored for Solaris compatibility\n"));
EOF
fi
diff --git a/ld/emultempl/mmo.em b/ld/emultempl/mmo.em
index eaf0cae..f871dec 100644
--- a/ld/emultempl/mmo.em
+++ b/ld/emultempl/mmo.em
@@ -163,10 +163,14 @@ mmo_place_orphan (file, s)
for (pps = &output_bfd->sections; *pps != snew; pps = &(*pps)->next)
;
*pps = snew->next;
+ if (snew->next == NULL)
+ snew->owner->section_tail = pps;
/* Now tack it on to the "place->os" section list. */
snew->next = *place->section;
*place->section = snew;
+ if (snew->next == NULL)
+ snew->owner->section_tail = &snew->next;
}
place->section = &snew->next; /* Save the end of this list. */
diff --git a/ld/emultempl/pe.em b/ld/emultempl/pe.em
index 24ee657..0af1d76 100644
--- a/ld/emultempl/pe.em
+++ b/ld/emultempl/pe.em
@@ -1691,10 +1691,14 @@ gld_${EMULATION_NAME}_place_orphan (file, s)
pps = &(*pps)->next)
;
*pps = snew->next;
+ if (snew->next == NULL)
+ snew->owner->section_tail = pps;
/* Now tack it on to the "place->os" section list. */
snew->next = *place->section;
*place->section = snew;
+ if (snew->next == NULL)
+ snew->owner->section_tail = &snew->next;
}
/* Save the end of this list. Further ophans of this type will