2005-11-03 Paul Brook <paul@codesourcery.com>

* scripttempl/elf.sc: Add .init_array.* and .fini_array.*.
	* scripttempl/armbpabi.sc: Make init/fini array consistent with
	elf.sc.
	* scripttempl/elf32sh-symbian.sc: Ditto.
	* scripttempl/elfxtensa.sc: Ditto.
This commit is contained in:
Paul Brook 2005-11-03 15:01:58 +00:00
parent 6ece8836a6
commit 6f2942edf0
5 changed files with 74 additions and 39 deletions

View file

@ -1,3 +1,11 @@
2005-11-03 Paul Brook <paul@codesourcery.com>
* scripttempl/elf.sc: Add .init_array.* and .fini_array.*.
* scripttempl/armbpabi.sc: Make init/fini array consistent with
elf.sc.
* scripttempl/elf32sh-symbian.sc: Ditto.
* scripttempl/elfxtensa.sc: Ditto.
2005-11-03 Alan Modra <amodra@bigpond.net.au> 2005-11-03 Alan Modra <amodra@bigpond.net.au>
* ldlang.h (lang_output_section_statement_type): Rearrange. Remove * ldlang.h (lang_output_section_statement_type): Rearrange. Remove

View file

@ -211,26 +211,30 @@ cat <<EOF
segment; there is no runtime relocation applied to these segment; there is no runtime relocation applied to these
arrays. */ arrays. */
/* Ensure the __preinit_array_start label is properly aligned. We .preinit_array ${RELOCATING-0} :
could instead move the label definition inside the section, but {
the linker would then create the section even if it turns out to ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (__preinit_array_start = .);}}
be empty, which isn't pretty. */ KEEP (*(.preinit_array))
${RELOCATING+. = ALIGN(${ALIGNMENT});} ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (__preinit_array_end = .);}}
${RELOCATING+${CREATE_SHLIB-PROVIDE (__preinit_array_start = .);}} }
.preinit_array ${RELOCATING-0} : { *(.preinit_array) } .init_array ${RELOCATING-0} :
${RELOCATING+${CREATE_SHLIB-PROVIDE (__preinit_array_end = .);}} {
${RELOCATING+${CREATE_SHLIB-PROVIDE (__init_array_start = .);}}
/* SymbianOS uses this symbol. */ /* SymbianOS uses this symbol. */
${RELOCATING+PROVIDE (SHT\$\$INIT_ARRAY\$\$Base = .);} ${RELOCATING+PROVIDE (SHT\$\$INIT_ARRAY\$\$Base = .);}
.init_array ${RELOCATING-0} : { *(.init_array) } ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (__init_array_start = .);}}
KEEP (*(SORT(.init_array.*)))
KEEP (*(.init_array))
${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (__init_array_end = .);}}
/* SymbianOS uses this symbol. */ /* SymbianOS uses this symbol. */
${RELOCATING+PROVIDE (SHT\$\$INIT_ARRAY\$\$Limit = .);} ${RELOCATING+PROVIDE (SHT\$\$INIT_ARRAY\$\$Limit = .);}
${RELOCATING+${CREATE_SHLIB-PROVIDE (__init_array_end = .);}} }
.fini_array ${RELOCATING-0} :
${RELOCATING+${CREATE_SHLIB-PROVIDE (__fini_array_start = .);}} {
.fini_array ${RELOCATING-0} : { *(.fini_array) } ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (__fini_array_start = .);}}
${RELOCATING+${CREATE_SHLIB-PROVIDE (__fini_array_end = .);}} KEEP (*(.fini_array))
KEEP (*(SORT(.fini_array.*)))
${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (__fini_array_end = .);}}
}
${OTHER_READONLY_SECTIONS} ${OTHER_READONLY_SECTIONS}
.eh_frame_hdr : { *(.eh_frame_hdr) } .eh_frame_hdr : { *(.eh_frame_hdr) }

View file

@ -384,6 +384,7 @@ cat <<EOF
.init_array ${RELOCATING-0} : .init_array ${RELOCATING-0} :
{ {
${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (__init_array_start = .);}} ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (__init_array_start = .);}}
KEEP (*(SORT(.init_array.*)))
KEEP (*(.init_array)) KEEP (*(.init_array))
${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (__init_array_end = .);}} ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (__init_array_end = .);}}
} }
@ -391,6 +392,7 @@ cat <<EOF
{ {
${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (__fini_array_start = .);}} ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (__fini_array_start = .);}}
KEEP (*(.fini_array)) KEEP (*(.fini_array))
KEEP (*(SORT(.fini_array.*)))
${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (__fini_array_end = .);}} ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (__fini_array_end = .);}}
} }
${SMALL_DATA_CTOR-${RELOCATING+${CTOR}}} ${SMALL_DATA_CTOR-${RELOCATING+${CTOR}}}

View file

@ -204,22 +204,26 @@ SECTIONS
/* Adjust the address for the data segment. We want to adjust up to /* Adjust the address for the data segment. We want to adjust up to
the same address within the page on the next page up. */ the same address within the page on the next page up. */
. = ALIGN(128) + (. & (128 - 1)); . = ALIGN(128) + (. & (128 - 1));
/* Ensure the __preinit_array_start label is properly aligned. We .preinit_array ${RELOCATING-0} :
could instead move the label definition inside the section, but {
the linker would then create the section even if it turns out to ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (__preinit_array_start = .);}}
be empty, which isn't pretty. */ KEEP (*(.preinit_array))
${RELOCATING+. = ALIGN(${ALIGNMENT});} ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (__preinit_array_end = .);}}
${RELOCATING+${CREATE_SHLIB-PROVIDE (__preinit_array_start = .);}} }
.preinit_array ${RELOCATING-0} : { *(.preinit_array) } .init_array ${RELOCATING-0} :
${RELOCATING+${CREATE_SHLIB-PROVIDE (__preinit_array_end = .);}} {
${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (__init_array_start = .);}}
${RELOCATING+${CREATE_SHLIB-PROVIDE (__init_array_start = .);}} KEEP (*(SORT(.init_array.*)))
.init_array ${RELOCATING-0} : { *(.init_array) } KEEP (*(.init_array))
${RELOCATING+${CREATE_SHLIB-PROVIDE (__init_array_end = .);}} ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (__init_array_end = .);}}
}
${RELOCATING+${CREATE_SHLIB-PROVIDE (__fini_array_start = .);}} .fini_array ${RELOCATING-0} :
.fini_array ${RELOCATING-0} : { *(.fini_array) } {
${RELOCATING+${CREATE_SHLIB-PROVIDE (__fini_array_end = .);}} ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (__fini_array_start = .);}}
KEEP (*(.fini_array))
KEEP (*(SORT(.fini_array.*)))
${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (__fini_array_end = .);}}
}
${CREATE_SHLIB-${CREATE_PIE-${RELOCATING+. = ${DATA_ADDR-${DATA_SEGMENT_ALIGN}};}}} ${CREATE_SHLIB-${CREATE_PIE-${RELOCATING+. = ${DATA_ADDR-${DATA_SEGMENT_ALIGN}};}}}
${CREATE_SHLIB+${RELOCATING+. = ${SHLIB_DATA_ADDR-${DATA_SEGMENT_ALIGN}};}} ${CREATE_SHLIB+${RELOCATING+. = ${SHLIB_DATA_ADDR-${DATA_SEGMENT_ALIGN}};}}

View file

@ -350,9 +350,26 @@ cat <<EOF
.tdata ${RELOCATING-0} : { *(.tdata${RELOCATING+ .tdata.* .gnu.linkonce.td.*}) } .tdata ${RELOCATING-0} : { *(.tdata${RELOCATING+ .tdata.* .gnu.linkonce.td.*}) }
.tbss ${RELOCATING-0} : { *(.tbss${RELOCATING+ .tbss.* .gnu.linkonce.tb.*})${RELOCATING+ *(.tcommon)} } .tbss ${RELOCATING-0} : { *(.tbss${RELOCATING+ .tbss.* .gnu.linkonce.tb.*})${RELOCATING+ *(.tcommon)} }
.preinit_array ${RELOCATING-0} : { KEEP (*(.preinit_array)) } .preinit_array ${RELOCATING-0} :
.init_array ${RELOCATING-0} : { KEEP (*(.init_array)) } {
.fini_array ${RELOCATING-0} : { KEEP (*(.fini_array)) } ${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (__preinit_array_start = .);}}
KEEP (*(.preinit_array))
${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (__preinit_array_end = .);}}
}
.init_array ${RELOCATING-0} :
{
${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (__init_array_start = .);}}
KEEP (*(SORT(.init_array.*)))
KEEP (*(.init_array))
${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (__init_array_end = .);}}
}
.fini_array ${RELOCATING-0} :
{
${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (__fini_array_start = .);}}
KEEP (*(.fini_array))
KEEP (*(SORT(.fini_array.*)))
${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (__fini_array_end = .);}}
}
${SMALL_DATA_CTOR-${RELOCATING+${CTOR}}} ${SMALL_DATA_CTOR-${RELOCATING+${CTOR}}}
${SMALL_DATA_DTOR-${RELOCATING+${DTOR}}} ${SMALL_DATA_DTOR-${RELOCATING+${DTOR}}}