diff options
author | Alan Modra <amodra@gmail.com> | 2003-07-10 00:38:19 +0000 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2003-07-10 00:38:19 +0000 |
commit | 68f8ff14d1fb0bd1254ca950188a8aadc8104de4 (patch) | |
tree | f722d16b601da9b59743731ba88d35e527f12cb3 | |
parent | e717da7ead54704139ab3c160e95ed3db479d871 (diff) | |
download | gdb-68f8ff14d1fb0bd1254ca950188a8aadc8104de4.zip gdb-68f8ff14d1fb0bd1254ca950188a8aadc8104de4.tar.gz gdb-68f8ff14d1fb0bd1254ca950188a8aadc8104de4.tar.bz2 |
* emulparams/elf64ppc.sh (OTHER_GOT_SECTIONS): Don't define.
(GOT): Define.
* emultempl/ppc64elf.em (stub_added): New static var.
(ppc_create_output_section_statements): Call ppc64_elf_init_stub_bfd.
(ppc_add_stub_section): Set stub_added.
(gld${EMULATION_NAME}_finish): Look for .got rather than .toc. Adjust
ppc64_elf_size_stubs call and test for stubs.
* scripttempl/elf.sc (GOT): Define and use.
-rw-r--r-- | ld/ChangeLog | 11 | ||||
-rw-r--r-- | ld/emulparams/elf64ppc.sh | 4 | ||||
-rw-r--r-- | ld/emultempl/ppc64elf.em | 8 | ||||
-rw-r--r-- | ld/scripttempl/elf.sc | 3 |
4 files changed, 20 insertions, 6 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog index 7dc68c6..0a643fa 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,14 @@ +2003-07-10 Alan Modra <amodra@bigpond.net.au> + + * emulparams/elf64ppc.sh (OTHER_GOT_SECTIONS): Don't define. + (GOT): Define. + * emultempl/ppc64elf.em (stub_added): New static var. + (ppc_create_output_section_statements): Call ppc64_elf_init_stub_bfd. + (ppc_add_stub_section): Set stub_added. + (gld${EMULATION_NAME}_finish): Look for .got rather than .toc. Adjust + ppc64_elf_size_stubs call and test for stubs. + * scripttempl/elf.sc (GOT): Define and use. + 2003-07-08 J"orn Rennecke <joern.rennecke@superh.com> * emultempl/sh64elf.em (sh64_elf_${EMULATION_NAME}_after_allocation): diff --git a/ld/emulparams/elf64ppc.sh b/ld/emulparams/elf64ppc.sh index 5f812f6..e1d9e1d 100644 --- a/ld/emulparams/elf64ppc.sh +++ b/ld/emulparams/elf64ppc.sh @@ -18,8 +18,8 @@ OTHER_BSS_SYMBOLS=" .tocbss ${RELOCATING-0}${RELOCATING+ALIGN(8)} : { *(.tocbss)}" OTHER_PLT_RELOC_SECTIONS=" .rela.tocbss ${RELOCATING-0} : { *(.rela.tocbss) }" -OTHER_GOT_SECTIONS=" - .toc ${RELOCATING-0}${RELOCATING+ALIGN(8)} : { *(.toc) }" +GOT=" + .got ${RELOCATING-0}${RELOCATING+ALIGN(8)} : { *(.got .toc) }" OTHER_GOT_RELOC_SECTIONS=" .rela.toc ${RELOCATING-0} : { *(.rela.toc) }" OTHER_READWRITE_SECTIONS=" diff --git a/ld/emultempl/ppc64elf.em b/ld/emultempl/ppc64elf.em index dfe7932..b1b3f9e 100644 --- a/ld/emultempl/ppc64elf.em +++ b/ld/emultempl/ppc64elf.em @@ -29,6 +29,7 @@ cat >>e${EMULATION_NAME}.c <<EOF /* Fake input file for stubs. */ static lang_input_statement_type *stub_file; +static int stub_added = 0; /* Whether we need to call ppc_layout_sections_again. */ static int need_laying_out = 0; @@ -77,6 +78,7 @@ ppc_create_output_section_statements (void) } ldlang_add_file (stub_file); + ppc64_elf_init_stub_bfd (stub_file->the_bfd, &link_info); } static void @@ -232,6 +234,7 @@ ppc_add_stub_section (const char *stub_sec_name, asection *input_section) if (info.add.head == NULL) goto err_ret; + stub_added = 1; if (hook_in_stub (&info, &os->children.head)) return stub_sec; @@ -330,7 +333,7 @@ gld${EMULATION_NAME}_finish (void) return; } - toc_section = bfd_get_section_by_name (output_bfd, ".toc"); + toc_section = bfd_get_section_by_name (output_bfd, ".got"); if (toc_section != NULL) lang_for_each_statement (build_toc_list); @@ -340,7 +343,6 @@ gld${EMULATION_NAME}_finish (void) /* Call into the BFD backend to do the real work. */ if (!ppc64_elf_size_stubs (output_bfd, - stub_file->the_bfd, &link_info, group_size, &ppc_add_stub_section, @@ -355,7 +357,7 @@ gld${EMULATION_NAME}_finish (void) if (need_laying_out) ppc_layout_sections_again (); - if (stub_file != NULL && stub_file->the_bfd->sections != NULL) + if (stub_added) { char *msg = NULL; char *line, *endline; diff --git a/ld/scripttempl/elf.sc b/ld/scripttempl/elf.sc index 0c1f5c6..a63ef94 100644 --- a/ld/scripttempl/elf.sc +++ b/ld/scripttempl/elf.sc @@ -82,6 +82,7 @@ if test -n "${COMMONPAGESIZE}"; then fi INTERP=".interp ${RELOCATING-0} : { *(.interp) }" PLT=".plt ${RELOCATING-0} : { *(.plt) }" +test -z "$GOT" && GOT=".got ${RELOCATING-0} : { *(.got.plt) *(.got) }" DYNAMIC=".dynamic ${RELOCATING-0} : { *(.dynamic) }" RODATA=".rodata ${RELOCATING-0} : { *(.rodata${RELOCATING+ .rodata.* .gnu.linkonce.r.*}) }" STACKNOTE="/DISCARD/ : { *(.note.GNU-stack) }" @@ -325,7 +326,7 @@ cat <<EOF .jcr ${RELOCATING-0} : { KEEP (*(.jcr)) } ${DATA_PLT+${PLT}} ${RELOCATING+${OTHER_GOT_SYMBOLS}} - .got ${RELOCATING-0} : { *(.got.plt) *(.got) } + ${GOT} ${OTHER_GOT_SECTIONS} ${CREATE_SHLIB+${SDATA2}} ${CREATE_SHLIB+${SBSS2}} |