mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-10-13 02:45:02 +08:00
* emultempl/elf32.em (gld${EMULATION_NAME}_layout_sections_again):
New function, extracted from static void gld${EMULATION_NAME}_finish. (gld${EMULATION_NAME}_strip_empty_sections): Likewise. (gld${EMULATION_NAME}_provide_init_fini_syms): Likewise. * emultempl/ppc64elf.em: Revert last change. (ppc_layout_sections_again): Use gld${EMULATION_NAME}_layout_sections_again. (ppc_finish): Don't call gld${EMULATION_NAME}_finish. Instead call gld${EMULATION_NAME}_strip_empty_sections and gld${EMULATION_NAME}_provide_init_fini_syms. * emultempl/hppaelf.em: Similarly.
This commit is contained in:
16
ld/ChangeLog
16
ld/ChangeLog
@ -1,3 +1,17 @@
|
|||||||
|
2005-03-29 Alan Modra <amodra@bigpond.net.au>
|
||||||
|
|
||||||
|
* emultempl/elf32.em (gld${EMULATION_NAME}_layout_sections_again):
|
||||||
|
New function, extracted from static void gld${EMULATION_NAME}_finish.
|
||||||
|
(gld${EMULATION_NAME}_strip_empty_sections): Likewise.
|
||||||
|
(gld${EMULATION_NAME}_provide_init_fini_syms): Likewise.
|
||||||
|
* emultempl/ppc64elf.em: Revert last change.
|
||||||
|
(ppc_layout_sections_again): Use
|
||||||
|
gld${EMULATION_NAME}_layout_sections_again.
|
||||||
|
(ppc_finish): Don't call gld${EMULATION_NAME}_finish. Instead call
|
||||||
|
gld${EMULATION_NAME}_strip_empty_sections and
|
||||||
|
gld${EMULATION_NAME}_provide_init_fini_syms.
|
||||||
|
* emultempl/hppaelf.em: Similarly.
|
||||||
|
|
||||||
2005-03-29 Alan Modra <amodra@bigpond.net.au>
|
2005-03-29 Alan Modra <amodra@bigpond.net.au>
|
||||||
|
|
||||||
* emultempl/ppc64elf.em (need_laying_out): Delete. Remove all refs.
|
* emultempl/ppc64elf.em (need_laying_out): Delete. Remove all refs.
|
||||||
@ -15,7 +29,7 @@
|
|||||||
implementation, not just the GNU C library.
|
implementation, not just the GNU C library.
|
||||||
* configure.tgt: Likewise.
|
* configure.tgt: Likewise.
|
||||||
* emultempl/elf32.em: Likewise.
|
* emultempl/elf32.em: Likewise.
|
||||||
|
|
||||||
2005-03-22 H.J. Lu <hongjiu.lu@intel.com>
|
2005-03-22 H.J. Lu <hongjiu.lu@intel.com>
|
||||||
|
|
||||||
* emultempl/elf32.em (gld${EMULATION_NAME}_provide_bound_symbols): New
|
* emultempl/elf32.em (gld${EMULATION_NAME}_provide_bound_symbols): New
|
||||||
|
@ -59,7 +59,10 @@ static void gld${EMULATION_NAME}_after_open (void);
|
|||||||
static void gld${EMULATION_NAME}_before_allocation (void);
|
static void gld${EMULATION_NAME}_before_allocation (void);
|
||||||
static bfd_boolean gld${EMULATION_NAME}_place_orphan
|
static bfd_boolean gld${EMULATION_NAME}_place_orphan
|
||||||
(lang_input_statement_type *file, asection *s);
|
(lang_input_statement_type *file, asection *s);
|
||||||
static void gld${EMULATION_NAME}_finish (void);
|
static void gld${EMULATION_NAME}_layout_sections_again (void);
|
||||||
|
static void gld${EMULATION_NAME}_strip_empty_sections (void);
|
||||||
|
static void gld${EMULATION_NAME}_provide_init_fini_syms (void);
|
||||||
|
static void gld${EMULATION_NAME}_finish (void) ATTRIBUTE_UNUSED;
|
||||||
|
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
@ -1450,25 +1453,58 @@ gld${EMULATION_NAME}_provide_bound_symbols (const char *sec,
|
|||||||
_bfd_elf_provide_symbol (&link_info, end, end_val);
|
_bfd_elf_provide_symbol (&link_info, end, end_val);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* If not building a shared library, provide
|
||||||
|
|
||||||
|
__preinit_array_start
|
||||||
|
__preinit_array_end
|
||||||
|
__init_array_start
|
||||||
|
__init_array_end
|
||||||
|
__fini_array_start
|
||||||
|
__fini_array_end
|
||||||
|
|
||||||
|
They are set here rather than via PROVIDE in the linker
|
||||||
|
script, because using PROVIDE inside an output section
|
||||||
|
statement results in unnecessary output sections. Using
|
||||||
|
PROVIDE outside an output section statement runs the risk of
|
||||||
|
section alignment affecting where the section starts. */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gld${EMULATION_NAME}_finish (void)
|
gld${EMULATION_NAME}_provide_init_fini_syms (void)
|
||||||
{
|
{
|
||||||
if (bfd_elf_discard_info (output_bfd, &link_info))
|
if (!link_info.relocatable && !link_info.shared)
|
||||||
{
|
{
|
||||||
lang_reset_memory_regions ();
|
gld${EMULATION_NAME}_provide_bound_symbols (".preinit_array",
|
||||||
|
"__preinit_array_start",
|
||||||
/* Resize the sections. */
|
"__preinit_array_end");
|
||||||
lang_size_sections (stat_ptr->head, abs_output_section,
|
gld${EMULATION_NAME}_provide_bound_symbols (".init_array",
|
||||||
&stat_ptr->head, 0, (bfd_vma) 0, NULL, TRUE);
|
"__init_array_start",
|
||||||
|
"__init_array_end");
|
||||||
/* Redo special stuff. */
|
gld${EMULATION_NAME}_provide_bound_symbols (".fini_array",
|
||||||
ldemul_after_allocation ();
|
"__fini_array_start",
|
||||||
|
"__fini_array_end");
|
||||||
/* Do the assignments again. */
|
|
||||||
lang_do_assignments (stat_ptr->head, abs_output_section,
|
|
||||||
(fill_type *) 0, (bfd_vma) 0);
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gld${EMULATION_NAME}_layout_sections_again (void)
|
||||||
|
{
|
||||||
|
lang_reset_memory_regions ();
|
||||||
|
|
||||||
|
/* Resize the sections. */
|
||||||
|
lang_size_sections (stat_ptr->head, abs_output_section,
|
||||||
|
&stat_ptr->head, 0, (bfd_vma) 0, NULL, TRUE);
|
||||||
|
|
||||||
|
/* Redo special stuff. */
|
||||||
|
ldemul_after_allocation ();
|
||||||
|
|
||||||
|
/* Do the assignments again. */
|
||||||
|
lang_do_assignments (stat_ptr->head, abs_output_section,
|
||||||
|
(fill_type *) 0, (bfd_vma) 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gld${EMULATION_NAME}_strip_empty_sections (void)
|
||||||
|
{
|
||||||
if (!link_info.relocatable)
|
if (!link_info.relocatable)
|
||||||
{
|
{
|
||||||
lang_output_section_statement_type *os;
|
lang_output_section_statement_type *os;
|
||||||
@ -1495,36 +1531,18 @@ gld${EMULATION_NAME}_finish (void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If not building shared library, provide
|
|
||||||
|
|
||||||
__preinit_array_start
|
|
||||||
__preinit_array_end
|
|
||||||
__init_array_start
|
|
||||||
__init_array_end
|
|
||||||
__fini_array_start
|
|
||||||
__fini_array_end
|
|
||||||
|
|
||||||
They are set here rather than via PROVIDE in the linker
|
|
||||||
script, because using PROVIDE inside an output section
|
|
||||||
statement results in unnecessary output sections. Using
|
|
||||||
PROVIDE outside an output section statement runs the risk of
|
|
||||||
section alignment affecting where the section starts. */
|
|
||||||
|
|
||||||
if (!link_info.shared)
|
|
||||||
{
|
|
||||||
gld${EMULATION_NAME}_provide_bound_symbols
|
|
||||||
(".preinit_array", "__preinit_array_start",
|
|
||||||
"__preinit_array_end");
|
|
||||||
gld${EMULATION_NAME}_provide_bound_symbols
|
|
||||||
(".init_array", "__init_array_start",
|
|
||||||
"__init_array_end");
|
|
||||||
gld${EMULATION_NAME}_provide_bound_symbols
|
|
||||||
(".fini_array", "__fini_array_start",
|
|
||||||
"__fini_array_end");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gld${EMULATION_NAME}_finish (void)
|
||||||
|
{
|
||||||
|
if (bfd_elf_discard_info (output_bfd, &link_info))
|
||||||
|
gld${EMULATION_NAME}_layout_sections_again ();
|
||||||
|
|
||||||
|
gld${EMULATION_NAME}_strip_empty_sections ();
|
||||||
|
gld${EMULATION_NAME}_provide_init_fini_syms ();
|
||||||
|
}
|
||||||
EOF
|
EOF
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -36,6 +36,9 @@ static lang_input_statement_type *stub_file;
|
|||||||
stubs. */
|
stubs. */
|
||||||
static int multi_subspace = 0;
|
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
|
/* 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
|
one stub section. A value of +/-1 indicates the bfd back-end
|
||||||
should use a suitable default size. */
|
should use a suitable default size. */
|
||||||
@ -217,18 +220,9 @@ hppaelf_layout_sections_again (void)
|
|||||||
/* If we have changed sizes of the stub sections, then we need
|
/* If we have changed sizes of the stub sections, then we need
|
||||||
to recalculate all the section offsets. This may mean we need to
|
to recalculate all the section offsets. This may mean we need to
|
||||||
add even more stubs. */
|
add even more stubs. */
|
||||||
lang_reset_memory_regions ();
|
need_laying_out = 0;
|
||||||
|
|
||||||
/* Resize the sections. */
|
gld${EMULATION_NAME}_layout_sections_again ();
|
||||||
lang_size_sections (stat_ptr->head, abs_output_section,
|
|
||||||
&stat_ptr->head, 0, (bfd_vma) 0, NULL, TRUE);
|
|
||||||
|
|
||||||
/* Redo special stuff. */
|
|
||||||
ldemul_after_allocation ();
|
|
||||||
|
|
||||||
/* Do the assignments again. */
|
|
||||||
lang_do_assignments (stat_ptr->head, abs_output_section,
|
|
||||||
(fill_type *) 0, (bfd_vma) 0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -253,6 +247,13 @@ build_section_lists (lang_statement_union_type *statement)
|
|||||||
static void
|
static void
|
||||||
hppaelf_finish (void)
|
hppaelf_finish (void)
|
||||||
{
|
{
|
||||||
|
/* bfd_elf_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_discard_info (output_bfd, &link_info))
|
||||||
|
need_laying_out = 1;
|
||||||
|
|
||||||
/* If generating a relocatable output file, then we don't
|
/* If generating a relocatable output file, then we don't
|
||||||
have to examine the relocs. */
|
have to examine the relocs. */
|
||||||
if (stub_file != NULL && !link_info.relocatable)
|
if (stub_file != NULL && !link_info.relocatable)
|
||||||
@ -284,6 +285,9 @@ hppaelf_finish (void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (need_laying_out)
|
||||||
|
hppaelf_layout_sections_again ();
|
||||||
|
|
||||||
if (! link_info.relocatable)
|
if (! link_info.relocatable)
|
||||||
{
|
{
|
||||||
/* Set the global data pointer. */
|
/* Set the global data pointer. */
|
||||||
@ -297,14 +301,12 @@ hppaelf_finish (void)
|
|||||||
if (stub_file != NULL && stub_file->the_bfd->sections != NULL)
|
if (stub_file != NULL && 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");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
gld${EMULATION_NAME}_finish ();
|
gld${EMULATION_NAME}_strip_empty_sections ();
|
||||||
|
gld${EMULATION_NAME}_provide_init_fini_syms ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -32,6 +32,9 @@ cat >>e${EMULATION_NAME}.c <<EOF
|
|||||||
static lang_input_statement_type *stub_file;
|
static lang_input_statement_type *stub_file;
|
||||||
static int stub_added = 0;
|
static int stub_added = 0;
|
||||||
|
|
||||||
|
/* Whether we need to call ppc_layout_sections_again. */
|
||||||
|
static int need_laying_out = 0;
|
||||||
|
|
||||||
/* Maximum size of a group of input sections that can be handled by
|
/* 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
|
one stub section. A value of +/-1 indicates the bfd back-end
|
||||||
should use a suitable default size. */
|
should use a suitable default size. */
|
||||||
@ -255,17 +258,9 @@ ppc_layout_sections_again (void)
|
|||||||
/* If we have changed sizes of the stub sections, then we need
|
/* If we have changed sizes of the stub sections, then we need
|
||||||
to recalculate all the section offsets. This may mean we need to
|
to recalculate all the section offsets. This may mean we need to
|
||||||
add even more stubs. */
|
add even more stubs. */
|
||||||
lang_reset_memory_regions ();
|
need_laying_out = 0;
|
||||||
|
|
||||||
/* Resize the sections. */
|
gld${EMULATION_NAME}_layout_sections_again ();
|
||||||
lang_size_sections (stat_ptr->head, abs_output_section,
|
|
||||||
&stat_ptr->head, 0, 0, NULL, TRUE);
|
|
||||||
|
|
||||||
/* Recalculate TOC base. */
|
|
||||||
ldemul_after_allocation ();
|
|
||||||
|
|
||||||
/* Do the assignments again. */
|
|
||||||
lang_do_assignments (stat_ptr->head, abs_output_section, NULL, 0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -316,6 +311,13 @@ ppc_finish (void)
|
|||||||
descriptor in the .opd section. */
|
descriptor in the .opd section. */
|
||||||
entry_section = ".opd";
|
entry_section = ".opd";
|
||||||
|
|
||||||
|
/* bfd_elf_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_discard_info (output_bfd, &link_info))
|
||||||
|
need_laying_out = 1;
|
||||||
|
|
||||||
/* If generating a relocatable output file, then we don't have any
|
/* If generating a relocatable output file, then we don't have any
|
||||||
stubs. */
|
stubs. */
|
||||||
if (stub_file != NULL && !link_info.relocatable)
|
if (stub_file != NULL && !link_info.relocatable)
|
||||||
@ -344,6 +346,9 @@ ppc_finish (void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (need_laying_out)
|
||||||
|
ppc_layout_sections_again ();
|
||||||
|
|
||||||
if (link_info.relocatable)
|
if (link_info.relocatable)
|
||||||
{
|
{
|
||||||
asection *toc = bfd_get_section_by_name (output_bfd, ".toc");
|
asection *toc = bfd_get_section_by_name (output_bfd, ".toc");
|
||||||
@ -374,7 +379,8 @@ ppc_finish (void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
ppc64_elf_restore_symbols (&link_info);
|
ppc64_elf_restore_symbols (&link_info);
|
||||||
gld${EMULATION_NAME}_finish ();
|
gld${EMULATION_NAME}_strip_empty_sections ();
|
||||||
|
gld${EMULATION_NAME}_provide_init_fini_syms ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user