* 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

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,7 +270,12 @@ 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
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)
{ {
if (ret < 0) if (ret < 0)
@ -301,10 +299,13 @@ gld${EMULATION_NAME}_finish ()
return; return;
} }
} }
}
if (need_laying_out) if (need_laying_out)
hppaelf_layout_sections_again (); hppaelf_layout_sections_again ();
if (! link_info.relocateable)
{
/* Set the global data pointer. */ /* Set the global data pointer. */
if (! elf32_hppa_set_gp (output_bfd, &link_info)) if (! elf32_hppa_set_gp (output_bfd, &link_info))
{ {
@ -319,6 +320,7 @@ gld${EMULATION_NAME}_finish ()
einfo ("%X%P: can not build stubs: %E\n"); einfo ("%X%P: can not build stubs: %E\n");
} }
} }
}
/* Avoid processing the fake stub_file in vercheck, stat_needed and /* Avoid processing the fake stub_file in vercheck, stat_needed and

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,7 +290,11 @@ 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
stubs. */
if (!link_info.relocateable)
{
int ret = ppc64_elf_setup_section_lists (output_bfd, &link_info);
if (ret != 0) if (ret != 0)
{ {
if (ret < 0) if (ret < 0)
@ -307,6 +317,7 @@ gld${EMULATION_NAME}_finish ()
return; return;
} }
} }
}
if (need_laying_out) if (need_laying_out)
ppc_layout_sections_again (); ppc_layout_sections_again ();
@ -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