From c56feb2b8c5a2d4a3dc92317d7f547e2c89feb8a Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Thu, 15 Nov 2001 12:44:03 +0000 Subject: [PATCH] * emultempl/elf32.em (gld${EMULATION_NAME}_finish): Only emit this function when LDEMUL_FINISH isn't set to the same name. Don't call ${LDEMUL_FINISH}. (ld_${EMULATION_NAME}_emulation): Call $LDEMUL_FINISH if defined. * emultempl/armelf.em (arm_elf_finish): Call gld${EMULATION_NAME}_finish. * emultempl/hppaelf.em (hppaelf_finish): Rename to gld${EMULATION_NAME}_finish. Call bfd_elf32_discard_info and hppaelf_layout_sections_again if necessary. (need_laying_out): New var. (hppaelf_layaout_sections_again): Rename to hppaelf_layout_sections_again. Clear need_laying_out. (PARSE_AND_LIST_OPTIONS): Format text. --- ld/ChangeLog | 16 +++++++++++++++ ld/emultempl/armelf.em | 3 +++ ld/emultempl/elf32.em | 9 ++++++--- ld/emultempl/hppaelf.em | 44 +++++++++++++++++++++++++++-------------- 4 files changed, 54 insertions(+), 18 deletions(-) diff --git a/ld/ChangeLog b/ld/ChangeLog index cd6c11fe5c..4af4d6d55f 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,19 @@ +2001-11-15 Alan Modra + + * emultempl/elf32.em (gld${EMULATION_NAME}_finish): Only emit this + function when LDEMUL_FINISH isn't set to the same name. Don't + call ${LDEMUL_FINISH}. + (ld_${EMULATION_NAME}_emulation): Call $LDEMUL_FINISH if defined. + * emultempl/armelf.em (arm_elf_finish): Call + gld${EMULATION_NAME}_finish. + * emultempl/hppaelf.em (hppaelf_finish): Rename to + gld${EMULATION_NAME}_finish. Call bfd_elf32_discard_info and + hppaelf_layout_sections_again if necessary. + (need_laying_out): New var. + (hppaelf_layaout_sections_again): Rename to + hppaelf_layout_sections_again. Clear need_laying_out. + (PARSE_AND_LIST_OPTIONS): Format text. + 2001-11-14 H.J. Lu * emultempl/armelf.em (arm_elf_finish): Renamed from diff --git a/ld/emultempl/armelf.em b/ld/emultempl/armelf.em index fd27bcedad..c570486f6c 100644 --- a/ld/emultempl/armelf.em +++ b/ld/emultempl/armelf.em @@ -104,6 +104,9 @@ arm_elf_finish () { struct bfd_link_hash_entry * h; + /* Call the elf32.em routine. */ + gld${EMULATION_NAME}_finish (); + if (thumb_entry_symbol == NULL) return; diff --git a/ld/emultempl/elf32.em b/ld/emultempl/elf32.em index 27c2954005..3acc8fa41d 100644 --- a/ld/emultempl/elf32.em +++ b/ld/emultempl/elf32.em @@ -1320,12 +1320,15 @@ gld${EMULATION_NAME}_place_orphan (file, s) return true; } +EOF +fi + +if test x"$LDEMUL_FINISH" != xgld"$EMULATION_NAME"_finish; then +cat >>e${EMULATION_NAME}.c <head, abs_output_section, @@ -239,13 +243,20 @@ hppaelf_layaout_sections_again () to build linker stubs. */ static void -hppaelf_finish () +gld${EMULATION_NAME}_finish () { /* If generating a relocatable output file, then we don't have to examine the relocs. */ if (link_info.relocateable) return; + /* bfd_elf32_discard_info just plays with debugging sections, + ie. doesn't affect any code, so we can delay resizing the + sections. It's likely we'll resize everything in the process of + adding stubs. */ + if (bfd_elf${ELFSIZE}_discard_info (&link_info)) + need_laying_out = 1; + /* Call into the BFD backend to do the real work. */ if (! elf32_hppa_size_stubs (output_bfd, stub_file->the_bfd, @@ -253,12 +264,15 @@ hppaelf_finish () multi_subspace, group_size, &hppaelf_add_stub_section, - &hppaelf_layaout_sections_again)) + &hppaelf_layout_sections_again)) { einfo ("%X%P: can not size stub section: %E\n"); return; } + if (need_laying_out) + hppaelf_layout_sections_again (); + /* Set the global data pointer. */ if (! elf32_hppa_set_gp (output_bfd, &link_info)) { @@ -323,17 +337,17 @@ PARSE_AND_LIST_LONGOPTS=' PARSE_AND_LIST_OPTIONS=' fprintf (file, _("\ - --multi-subspace Generate import and export stubs to support\n\ - multiple sub-space shared libraries\n" + --multi-subspace Generate import and export stubs to support\n\ + multiple sub-space shared libraries\n" )); fprintf (file, _("\ - --stub-group-size=N Maximum size of a group of input sections that can be\n\ - handled by one stub section. A negative value\n\ - locates all stubs before their branches (with a\n\ - group size of -N), while a positive value allows\n\ - two groups of input sections, one before, and one\n\ - after each stub section. Values of +/-1 indicate\n\ - the linker should choose suitable defaults." + --stub-group-size=N Maximum size of a group of input sections that can be\n\ + handled by one stub section. A negative value\n\ + locates all stubs before their branches (with a\n\ + group size of -N), while a positive value allows\n\ + two groups of input sections, one before, and one\n\ + after each stub section. Values of +/-1 indicate\n\ + the linker should choose suitable defaults.\n" )); ' @@ -355,5 +369,5 @@ PARSE_AND_LIST_ARGS_CASES=' # Put these extra hppaelf routines in ld_${EMULATION_NAME}_emulation # LDEMUL_AFTER_PARSE=hppaelf_after_parse -LDEMUL_FINISH=hppaelf_finish +LDEMUL_FINISH=gld${EMULATION_NAME}_finish LDEMUL_CREATE_OUTPUT_SECTION_STATEMENTS=hppaelf_create_output_section_statements -- 2.34.1