From 81e1b023da77edb3576be645e73332a03407346c Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Wed, 23 Mar 2005 04:14:46 +0000 Subject: bfd/ 2005-03-22 H.J. Lu * bfd-in.h (_bfd_elf_provide_symbol): New. * bfd-in2.h: Regenerated. * elf32-ppc.c (set_linker_sym): Moved to elflink.c. (ppc_elf_set_sdata_syms): Call _bfd_elf_provide_symbol instead of set_linker_sym. * elflink.c (_bfd_elf_provide_symbol): New. Moved and renamed from elf32-ppc.c. ld/ 2005-03-22 H.J. Lu * emultempl/elf32.em (gld${EMULATION_NAME}_provide_bound_symbols): New (gld${EMULATION_NAME}_finish): Call gld${EMULATION_NAME}_provide_bound_symbols to provide __preinit_array_start, __preinit_array_end, __init_array_start, __init_array_end, __fini_array_start and __fini_array_end. * scripttempl/elf.sc: Don't provide __preinit_array_start, __preinit_array_end, __init_array_start, __init_array_end, __fini_array_start nor __fini_array_end. --- ld/emultempl/elf32.em | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) (limited to 'ld/emultempl') diff --git a/ld/emultempl/elf32.em b/ld/emultempl/elf32.em index 00805d5..b2d2a7c 100644 --- a/ld/emultempl/elf32.em +++ b/ld/emultempl/elf32.em @@ -1428,6 +1428,29 @@ if test x"$LDEMUL_FINISH" != xgld"$EMULATION_NAME"_finish; then cat >>e${EMULATION_NAME}.c <vma; + end_val = start_val + s->size; + } + else + { + start_val = 0; + end_val = 0; + } + _bfd_elf_provide_symbol (&link_info, start, start_val); + _bfd_elf_provide_symbol (&link_info, end, end_val); +} + +static void gld${EMULATION_NAME}_finish (void) { if (bfd_elf_discard_info (output_bfd, &link_info)) @@ -1472,6 +1495,34 @@ 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"); + } } } EOF -- cgit v1.1