* 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>
* configure.tgt (LIB_PATH): Default to searching w32api directory under

View File

@ -263,13 +263,6 @@ build_section_lists (statement)
static void
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,
ie. doesn't affect any code, so we can delay resizing the
sections. It's likely we'll resize everything in the process of
@ -277,7 +270,12 @@ gld${EMULATION_NAME}_finish ()
if (bfd_elf${ELFSIZE}_discard_info (output_bfd, &link_info))
need_laying_out = 1;
ret = elf32_hppa_setup_section_lists (output_bfd, &link_info);
/* If generating a relocatable output file, then we don't
have to examine the relocs. */
if (! link_info.relocateable)
{
int ret = elf32_hppa_setup_section_lists (output_bfd, &link_info);
if (ret != 0)
{
if (ret < 0)
@ -301,10 +299,13 @@ gld${EMULATION_NAME}_finish ()
return;
}
}
}
if (need_laying_out)
hppaelf_layout_sections_again ();
if (! link_info.relocateable)
{
/* Set the global data pointer. */
if (! elf32_hppa_set_gp (output_bfd, &link_info))
{
@ -318,6 +319,7 @@ gld${EMULATION_NAME}_finish ()
if (! elf32_hppa_build_stubs (&link_info))
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_after_open PARAMS ((void));
static void ppc_before_allocation PARAMS ((void));
static asection *ppc_add_stub_section PARAMS ((const char *, asection *));
static void ppc_layout_sections_again PARAMS ((void));
static void gld${EMULATION_NAME}_after_allocation PARAMS ((void));
@ -84,6 +85,18 @@ ppc_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
{
lang_statement_list_type add;
@ -265,18 +278,11 @@ build_section_lists (statement)
static void
gld${EMULATION_NAME}_finish ()
{
int ret;
/* e_entry on PowerPC64 points to the function descriptor for
_start. If _start is missing, default to the first function
descriptor in the .opd section. */
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,
ie. doesn't affect any code, so we can delay resizing the
sections. It's likely we'll resize everything in the process of
@ -284,7 +290,11 @@ gld${EMULATION_NAME}_finish ()
if (bfd_elf${ELFSIZE}_discard_info (output_bfd, &link_info))
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
stubs. */
if (!link_info.relocateable)
{
int ret = ppc64_elf_setup_section_lists (output_bfd, &link_info);
if (ret != 0)
{
if (ret < 0)
@ -307,6 +317,7 @@ gld${EMULATION_NAME}_finish ()
return;
}
}
}
if (need_laying_out)
ppc_layout_sections_again ();
@ -486,6 +497,7 @@ PARSE_AND_LIST_ARGS_CASES='
# Put these extra ppc64elf routines in ld_${EMULATION_NAME}_emulation
#
LDEMUL_AFTER_OPEN=ppc_after_open
LDEMUL_BEFORE_ALLOCATION=ppc_before_allocation
LDEMUL_AFTER_ALLOCATION=gld${EMULATION_NAME}_after_allocation
LDEMUL_FINISH=gld${EMULATION_NAME}_finish
LDEMUL_CREATE_OUTPUT_SECTION_STATEMENTS=ppc_create_output_section_statements