* emultempl/ppc64elf.em (ppc_before_allocation): New function.

(LDEMUL_BEFORE_ALLOCATION): Define.
	(gld${EMULATION_NAME}_finish): Run discard_info for relocatable
	linking.
	* emultemp/hppaelf.em ((gld${EMULATION_NAME}_finish): Likewise.
This commit is contained in:
Alan Modra
2002-11-12 07:56:38 +00:00
parent d6fe2dc102
commit 836c6af1fd
3 changed files with 83 additions and 61 deletions

View File

@ -1,3 +1,11 @@
2002-11-12 Alan Modra <amodra@bigpond.net.au>
* emultempl/ppc64elf.em (ppc_before_allocation): New function.
(LDEMUL_BEFORE_ALLOCATION): Define.
(gld${EMULATION_NAME}_finish): Run discard_info for relocatable
linking.
* emultemp/hppaelf.em ((gld${EMULATION_NAME}_finish): Likewise.
2002-11-11 Christopher Faylor <cgf@redhat.com> 2002-11-11 Christopher Faylor <cgf@redhat.com>
* configure.tgt (LIB_PATH): Default to searching w32api directory under * configure.tgt (LIB_PATH): Default to searching w32api directory under
@ -27,7 +35,7 @@
* emultempl/pe.em (pe_fixup_stdcalls): Don't fixup fastcall * emultempl/pe.em (pe_fixup_stdcalls): Don't fixup fastcall
symbols to cdecl names or vise-versa. symbols to cdecl names or vise-versa.
2002-10-13 Eric Kohl <ekohl@rz-online.de> 2002-10-13 Eric Kohl <ekohl@rz-online.de>
* pe-dll.c (process_def_file): Handle fastcall symbols when * pe-dll.c (process_def_file): Handle fastcall symbols when
generating undecorated aliases. Don't prefix decorated fastcall generating undecorated aliases. Don't prefix decorated fastcall

View File

@ -263,13 +263,6 @@ build_section_lists (statement)
static void static void
gld${EMULATION_NAME}_finish () gld${EMULATION_NAME}_finish ()
{ {
int ret;
/* 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, /* bfd_elf32_discard_info just plays with debugging sections,
ie. doesn't affect any code, so we can delay resizing the ie. doesn't affect any code, so we can delay resizing the
sections. It's likely we'll resize everything in the process of sections. It's likely we'll resize everything in the process of
@ -277,46 +270,55 @@ gld${EMULATION_NAME}_finish ()
if (bfd_elf${ELFSIZE}_discard_info (output_bfd, &link_info)) if (bfd_elf${ELFSIZE}_discard_info (output_bfd, &link_info))
need_laying_out = 1; need_laying_out = 1;
ret = elf32_hppa_setup_section_lists (output_bfd, &link_info); /* If generating a relocatable output file, then we don't
if (ret != 0) have to examine the relocs. */
if (! link_info.relocateable)
{ {
if (ret < 0) int ret = elf32_hppa_setup_section_lists (output_bfd, &link_info);
{
einfo ("%X%P: can not size stub section: %E\n");
return;
}
lang_for_each_statement (build_section_lists); if (ret != 0)
/* Call into the BFD backend to do the real work. */
if (! elf32_hppa_size_stubs (output_bfd,
stub_file->the_bfd,
&link_info,
multi_subspace,
group_size,
&hppaelf_add_stub_section,
&hppaelf_layout_sections_again))
{ {
einfo ("%X%P: can not size stub section: %E\n"); if (ret < 0)
return; {
einfo ("%X%P: can not size stub section: %E\n");
return;
}
lang_for_each_statement (build_section_lists);
/* Call into the BFD backend to do the real work. */
if (! elf32_hppa_size_stubs (output_bfd,
stub_file->the_bfd,
&link_info,
multi_subspace,
group_size,
&hppaelf_add_stub_section,
&hppaelf_layout_sections_again))
{
einfo ("%X%P: can not size stub section: %E\n");
return;
}
} }
} }
if (need_laying_out) if (need_laying_out)
hppaelf_layout_sections_again (); hppaelf_layout_sections_again ();
/* Set the global data pointer. */ if (! link_info.relocateable)
if (! elf32_hppa_set_gp (output_bfd, &link_info))
{ {
einfo ("%X%P: can not set gp\n"); /* Set the global data pointer. */
return; if (! elf32_hppa_set_gp (output_bfd, &link_info))
} {
einfo ("%X%P: can not set gp\n");
return;
}
/* Now build the linker stubs. */ /* Now build the linker stubs. */
if (stub_file->the_bfd->sections != NULL) if (stub_file->the_bfd->sections != NULL)
{ {
if (! elf32_hppa_build_stubs (&link_info)) if (! elf32_hppa_build_stubs (&link_info))
einfo ("%X%P: can not build stubs: %E\n"); einfo ("%X%P: can not build stubs: %E\n");
}
} }
} }

View File

@ -43,6 +43,7 @@ static int dotsyms = 1;
static void ppc_create_output_section_statements PARAMS ((void)); static void ppc_create_output_section_statements PARAMS ((void));
static void ppc_after_open PARAMS ((void)); static void ppc_after_open PARAMS ((void));
static void ppc_before_allocation PARAMS ((void));
static asection *ppc_add_stub_section PARAMS ((const char *, asection *)); static asection *ppc_add_stub_section PARAMS ((const char *, asection *));
static void ppc_layout_sections_again PARAMS ((void)); static void ppc_layout_sections_again PARAMS ((void));
static void gld${EMULATION_NAME}_after_allocation PARAMS ((void)); static void gld${EMULATION_NAME}_after_allocation PARAMS ((void));
@ -84,6 +85,18 @@ ppc_after_open ()
gld${EMULATION_NAME}_after_open (); gld${EMULATION_NAME}_after_open ();
} }
static void
ppc_before_allocation ()
{
if (!ppc64_elf_edit_opd (output_bfd, &link_info))
{
einfo ("%X%P: can not edit opd %E\n");
return;
}
gld${EMULATION_NAME}_before_allocation ();
}
struct hook_stub_info struct hook_stub_info
{ {
lang_statement_list_type add; lang_statement_list_type add;
@ -265,18 +278,11 @@ build_section_lists (statement)
static void static void
gld${EMULATION_NAME}_finish () gld${EMULATION_NAME}_finish ()
{ {
int ret;
/* e_entry on PowerPC64 points to the function descriptor for /* e_entry on PowerPC64 points to the function descriptor for
_start. If _start is missing, default to the first function _start. If _start is missing, default to the first function
descriptor in the .opd section. */ descriptor in the .opd section. */
entry_section = ".opd"; entry_section = ".opd";
/* If generating a relocatable output file, then we don't have any
stubs. */
if (link_info.relocateable)
return;
/* bfd_elf64_discard_info just plays with debugging sections, /* bfd_elf64_discard_info just plays with debugging sections,
ie. doesn't affect any code, so we can delay resizing the ie. doesn't affect any code, so we can delay resizing the
sections. It's likely we'll resize everything in the process of sections. It's likely we'll resize everything in the process of
@ -284,27 +290,32 @@ gld${EMULATION_NAME}_finish ()
if (bfd_elf${ELFSIZE}_discard_info (output_bfd, &link_info)) if (bfd_elf${ELFSIZE}_discard_info (output_bfd, &link_info))
need_laying_out = 1; need_laying_out = 1;
ret = ppc64_elf_setup_section_lists (output_bfd, &link_info); /* If generating a relocatable output file, then we don't have any
if (ret != 0) stubs. */
if (!link_info.relocateable)
{ {
if (ret < 0) int ret = ppc64_elf_setup_section_lists (output_bfd, &link_info);
if (ret != 0)
{ {
einfo ("%X%P: can not size stub section: %E\n"); if (ret < 0)
return; {
} einfo ("%X%P: can not size stub section: %E\n");
return;
}
lang_for_each_statement (build_section_lists); lang_for_each_statement (build_section_lists);
/* Call into the BFD backend to do the real work. */ /* Call into the BFD backend to do the real work. */
if (!ppc64_elf_size_stubs (output_bfd, if (!ppc64_elf_size_stubs (output_bfd,
stub_file->the_bfd, stub_file->the_bfd,
&link_info, &link_info,
group_size, group_size,
&ppc_add_stub_section, &ppc_add_stub_section,
&ppc_layout_sections_again)) &ppc_layout_sections_again))
{ {
einfo ("%X%P: can not size stub section: %E\n"); einfo ("%X%P: can not size stub section: %E\n");
return; return;
}
} }
} }
@ -486,6 +497,7 @@ PARSE_AND_LIST_ARGS_CASES='
# Put these extra ppc64elf routines in ld_${EMULATION_NAME}_emulation # Put these extra ppc64elf routines in ld_${EMULATION_NAME}_emulation
# #
LDEMUL_AFTER_OPEN=ppc_after_open LDEMUL_AFTER_OPEN=ppc_after_open
LDEMUL_BEFORE_ALLOCATION=ppc_before_allocation
LDEMUL_AFTER_ALLOCATION=gld${EMULATION_NAME}_after_allocation LDEMUL_AFTER_ALLOCATION=gld${EMULATION_NAME}_after_allocation
LDEMUL_FINISH=gld${EMULATION_NAME}_finish LDEMUL_FINISH=gld${EMULATION_NAME}_finish
LDEMUL_CREATE_OUTPUT_SECTION_STATEMENTS=ppc_create_output_section_statements LDEMUL_CREATE_OUTPUT_SECTION_STATEMENTS=ppc_create_output_section_statements