diff options
author | Alan Modra <amodra@gmail.com> | 2001-11-15 12:44:03 +0000 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2001-11-15 12:44:03 +0000 |
commit | c56feb2b8c5a2d4a3dc92317d7f547e2c89feb8a (patch) | |
tree | 8e431d3328f359303ec6a86c820b3f4274742e0a /ld/emultempl | |
parent | c86380b5864fac8325a2b3abbc684df5d42696ca (diff) | |
download | gdb-c56feb2b8c5a2d4a3dc92317d7f547e2c89feb8a.zip gdb-c56feb2b8c5a2d4a3dc92317d7f547e2c89feb8a.tar.gz gdb-c56feb2b8c5a2d4a3dc92317d7f547e2c89feb8a.tar.bz2 |
* 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.
Diffstat (limited to 'ld/emultempl')
-rw-r--r-- | ld/emultempl/armelf.em | 3 | ||||
-rw-r--r-- | ld/emultempl/elf32.em | 9 | ||||
-rw-r--r-- | ld/emultempl/hppaelf.em | 44 |
3 files changed, 38 insertions, 18 deletions
diff --git a/ld/emultempl/armelf.em b/ld/emultempl/armelf.em index fd27bce..c570486 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 27c2954..3acc8fa 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 <<EOF static void gld${EMULATION_NAME}_finish () { - ${LDEMUL_FINISH+${LDEMUL_FINISH} ();} - if (bfd_elf${ELFSIZE}_discard_info (&link_info)) { /* Resize the sections. */ @@ -1639,7 +1642,7 @@ struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation = ${LDEMUL_GET_SCRIPT-gld${EMULATION_NAME}_get_script}, "${EMULATION_NAME}", "${OUTPUT_FORMAT}", - gld${EMULATION_NAME}_finish, + ${LDEMUL_FINISH-gld${EMULATION_NAME}_finish}, ${LDEMUL_CREATE_OUTPUT_SECTION_STATEMENTS-NULL}, ${LDEMUL_OPEN_DYNAMIC_ARCHIVE-gld${EMULATION_NAME}_open_dynamic_archive}, ${LDEMUL_PLACE_ORPHAN-gld${EMULATION_NAME}_place_orphan}, diff --git a/ld/emultempl/hppaelf.em b/ld/emultempl/hppaelf.em index 31ef43c..80965015 100644 --- a/ld/emultempl/hppaelf.em +++ b/ld/emultempl/hppaelf.em @@ -31,8 +31,8 @@ static void hppaelf_after_parse PARAMS((void)); static void hppaelf_create_output_section_statements PARAMS ((void)); static asection *hppaelf_add_stub_section PARAMS ((const char *, asection *)); -static void hppaelf_layaout_sections_again PARAMS ((void)); -static void hppaelf_finish PARAMS ((void)); +static void hppaelf_layout_sections_again PARAMS ((void)); +static void gld${EMULATION_NAME}_finish PARAMS ((void)); /* Fake input file for stubs. */ @@ -43,6 +43,9 @@ static lang_input_statement_type *stub_file; stubs. */ static int multi_subspace = 0; +/* Whether we need to call hppa_layout_sections_again. */ +static int need_laying_out = 0; + /* Maximum size of a group of input sections that can be handled by one stub section. A value of +/-1 indicates the bfd back-end should use a suitable default size. */ @@ -216,11 +219,12 @@ hppaelf_add_stub_section (stub_sec_name, input_section) /* Another call-back for elf32_hppa_size_stubs. */ static void -hppaelf_layaout_sections_again () +hppaelf_layout_sections_again () { /* If we have changed sizes of the stub sections, then we need to recalculate all the section offsets. This may mean we need to add even more stubs. */ + need_laying_out = 0; /* Resize the sections. */ lang_size_sections (stat_ptr->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 |