* scripttempl/armbpabi.sc: Don't combine .init_array.* or
.fini_array.* when do relocatable linking. * scripttempl/elf.sc: Likewise. * scripttempl/elf32sh-symbian.sc: Likewise. * scripttempl/elf64hppa.sc: Likewise. * scripttempl/elfxtensa.sc: Likewise. testsuite/ * ld-elf/init-fini-arrays.s: New test. * ld-elf/init-fini-arrays.d: New test.
This commit is contained in:
parent
eb1956643d
commit
3cff7cc71f
@ -1,3 +1,12 @@
|
||||
2010-02-27 Jie Zhang <jie@codesourcery.com>
|
||||
|
||||
* scripttempl/armbpabi.sc: Don't combine .init_array.* or
|
||||
.fini_array.* when do relocatable linking.
|
||||
* scripttempl/elf.sc: Likewise.
|
||||
* scripttempl/elf32sh-symbian.sc: Likewise.
|
||||
* scripttempl/elf64hppa.sc: Likewise.
|
||||
* scripttempl/elfxtensa.sc: Likewise.
|
||||
|
||||
2010-02-26 Alan Modra <amodra@gmail.com>
|
||||
|
||||
* scripttempl/elf.sc (.fini_array): Place input .fini_array after
|
||||
|
@ -64,6 +64,24 @@ else
|
||||
NO_SMALL_DATA=" "
|
||||
fi
|
||||
test -n "$SEPARATE_GOTPLT" && SEPARATE_GOTPLT=" "
|
||||
INIT_ARRAY=".init_array ${RELOCATING-0} :
|
||||
{
|
||||
/* SymbianOS uses this symbol. */
|
||||
${RELOCATING+PROVIDE (SHT\$\$INIT_ARRAY\$\$Base = .);}
|
||||
${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. */
|
||||
${RELOCATING+PROVIDE (SHT\$\$INIT_ARRAY\$\$Limit = .);}
|
||||
}"
|
||||
FINI_ARRAY=".fini_array ${RELOCATING-0} :
|
||||
{
|
||||
${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (__fini_array_start = .);}}
|
||||
KEEP (*(SORT(.fini_array.*)))
|
||||
KEEP (*(.fini_array))
|
||||
${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (__fini_array_end = .);}}
|
||||
}"
|
||||
CTOR=".ctors ${CONSTRUCTING-0} :
|
||||
{
|
||||
${CONSTRUCTING+${CTOR_START}}
|
||||
@ -218,24 +236,8 @@ cat <<EOF
|
||||
KEEP (*(.preinit_array))
|
||||
${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (__preinit_array_end = .);}}
|
||||
}
|
||||
.init_array ${RELOCATING-0} :
|
||||
{
|
||||
/* SymbianOS uses this symbol. */
|
||||
${RELOCATING+PROVIDE (SHT\$\$INIT_ARRAY\$\$Base = .);}
|
||||
${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. */
|
||||
${RELOCATING+PROVIDE (SHT\$\$INIT_ARRAY\$\$Limit = .);}
|
||||
}
|
||||
.fini_array ${RELOCATING-0} :
|
||||
{
|
||||
${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (__fini_array_start = .);}}
|
||||
KEEP (*(SORT(.fini_array.*)))
|
||||
KEEP (*(.fini_array))
|
||||
${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (__fini_array_end = .);}}
|
||||
}
|
||||
${RELOCATING+${INIT_ARRAY}}
|
||||
${RELOCATING+${FINI_ARRAY}}
|
||||
|
||||
${OTHER_READONLY_SECTIONS}
|
||||
.eh_frame_hdr : { *(.eh_frame_hdr) }
|
||||
|
@ -216,6 +216,20 @@ test "${LARGE_SECTIONS}" = "yes" && LARGE_SECTIONS="
|
||||
*(.ldata${RELOCATING+ .ldata.* .gnu.linkonce.l.*})
|
||||
${RELOCATING+. = ALIGN(. != 0 ? ${ALIGNMENT} : 1);}
|
||||
}"
|
||||
INIT_ARRAY=".init_array ${RELOCATING-0} :
|
||||
{
|
||||
${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__init_array_start = .);}}
|
||||
KEEP (*(SORT(.init_array.*)))
|
||||
KEEP (*(.init_array))
|
||||
${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__init_array_end = .);}}
|
||||
}"
|
||||
FINI_ARRAY=".fini_array ${RELOCATING-0} :
|
||||
{
|
||||
${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__fini_array_start = .);}}
|
||||
KEEP (*(SORT(.fini_array.*)))
|
||||
KEEP (*(.fini_array))
|
||||
${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__fini_array_end = .);}}
|
||||
}"
|
||||
CTOR=".ctors ${CONSTRUCTING-0} :
|
||||
{
|
||||
${CONSTRUCTING+${CTOR_START}}
|
||||
@ -455,20 +469,8 @@ cat <<EOF
|
||||
KEEP (*(.preinit_array))
|
||||
${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__preinit_array_end = .);}}
|
||||
}
|
||||
.init_array ${RELOCATING-0} :
|
||||
{
|
||||
${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__init_array_start = .);}}
|
||||
KEEP (*(SORT(.init_array.*)))
|
||||
KEEP (*(.init_array))
|
||||
${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__init_array_end = .);}}
|
||||
}
|
||||
.fini_array ${RELOCATING-0} :
|
||||
{
|
||||
${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__fini_array_start = .);}}
|
||||
KEEP (*(SORT(.fini_array.*)))
|
||||
KEEP (*(.fini_array))
|
||||
${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__fini_array_end = .);}}
|
||||
}
|
||||
${RELOCATING+${INIT_ARRAY}}
|
||||
${RELOCATING+${FINI_ARRAY}}
|
||||
${SMALL_DATA_CTOR-${RELOCATING+${CTOR}}}
|
||||
${SMALL_DATA_DTOR-${RELOCATING+${DTOR}}}
|
||||
.jcr ${RELOCATING-0} : { KEEP (*(.jcr)) }
|
||||
|
@ -85,6 +85,20 @@ DYNAMIC=".dynamic : { *(.dynamic) } :dynamic :dyn"
|
||||
RODATA=".rodata ALIGN(4) : { *(.rodata${RELOCATING+ .rodata.* .gnu.linkonce.r.*}) }"
|
||||
DISCARDED="/DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.directive) *(.gnu.lto_*) }"
|
||||
test -z "$GOT" && GOT=".got ${RELOCATING-0} : { *(.got.plt) *(.got) } :dynamic :dyn"
|
||||
INIT_ARRAY=".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=".fini_array ${RELOCATING-0} :
|
||||
{
|
||||
${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (__fini_array_start = .);}}
|
||||
KEEP (*(SORT(.fini_array.*)))
|
||||
KEEP (*(.fini_array))
|
||||
${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (__fini_array_end = .);}}
|
||||
}"
|
||||
CTOR=".ctors ALIGN(4) :
|
||||
{
|
||||
${CONSTRUCTING+${CTOR_START}}
|
||||
@ -214,20 +228,8 @@ SECTIONS
|
||||
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 (*(SORT(.fini_array.*)))
|
||||
KEEP (*(.fini_array))
|
||||
${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (__fini_array_end = .);}}
|
||||
}
|
||||
${RELOCATING+${INIT_ARRAY}}
|
||||
${RELOCATING+${FINI_ARRAY}}
|
||||
|
||||
${CREATE_SHLIB-${CREATE_PIE-${RELOCATING+. = ${DATA_ADDR-${DATA_SEGMENT_ALIGN}};}}}
|
||||
${CREATE_SHLIB+${RELOCATING+. = ${SHLIB_DATA_ADDR-${DATA_SEGMENT_ALIGN}};}}
|
||||
|
@ -200,6 +200,20 @@ test "${LARGE_SECTIONS}" = "yes" && LARGE_SECTIONS="
|
||||
*(.ldata${RELOCATING+ .ldata.* .gnu.linkonce.l.*})
|
||||
${RELOCATING+. = ALIGN(. != 0 ? ${ALIGNMENT} : 1);}
|
||||
}"
|
||||
INIT_ARRAY=".init_array ${RELOCATING-0} :
|
||||
{
|
||||
${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__init_array_start = .);}}
|
||||
KEEP (*(SORT(.init_array.*)))
|
||||
KEEP (*(.init_array))
|
||||
${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__init_array_end = .);}}
|
||||
}"
|
||||
FINI_ARRAY=".fini_array ${RELOCATING-0} :
|
||||
{
|
||||
${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__fini_array_start = .);}}
|
||||
KEEP (*(SORT(.fini_array.*)))
|
||||
KEEP (*(.fini_array))
|
||||
${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__fini_array_end = .);}}
|
||||
}"
|
||||
CTOR=".ctors ${CONSTRUCTING-0} :
|
||||
{
|
||||
${CONSTRUCTING+${CTOR_START}}
|
||||
@ -428,20 +442,8 @@ cat <<EOF
|
||||
KEEP (*(.preinit_array))
|
||||
${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__preinit_array_end = .);}}
|
||||
}
|
||||
.init_array ${RELOCATING-0} :
|
||||
{
|
||||
${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__init_array_start = .);}}
|
||||
KEEP (*(SORT(.init_array.*)))
|
||||
KEEP (*(.init_array))
|
||||
${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__init_array_end = .);}}
|
||||
}
|
||||
.fini_array ${RELOCATING-0} :
|
||||
{
|
||||
${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__fini_array_start = .);}}
|
||||
KEEP (*(SORT(.fini_array.*)))
|
||||
KEEP (*(.fini_array))
|
||||
${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__fini_array_end = .);}}
|
||||
}
|
||||
${RELOCATING+${INIT_ARRAY}}
|
||||
${RELOCATING+${FINI_ARRAY}}
|
||||
${SMALL_DATA_CTOR-${RELOCATING+${CTOR}}}
|
||||
${SMALL_DATA_DTOR-${RELOCATING+${DTOR}}}
|
||||
.jcr ${RELOCATING-0} : { KEEP (*(.jcr)) }
|
||||
|
@ -217,6 +217,20 @@ test "${LARGE_SECTIONS}" = "yes" && LARGE_SECTIONS="
|
||||
*(.ldata${RELOCATING+ .ldata.* .gnu.linkonce.l.*})
|
||||
${RELOCATING+. = ALIGN(. != 0 ? ${ALIGNMENT} : 1);}
|
||||
}"
|
||||
INIT_ARRAY=".init_array ${RELOCATING-0} :
|
||||
{
|
||||
${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__init_array_start = .);}}
|
||||
KEEP (*(SORT(.init_array.*)))
|
||||
KEEP (*(.init_array))
|
||||
${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__init_array_end = .);}}
|
||||
}"
|
||||
FINI_ARRAY=".fini_array ${RELOCATING-0} :
|
||||
{
|
||||
${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__fini_array_start = .);}}
|
||||
KEEP (*(SORT(.fini_array.*)))
|
||||
KEEP (*(.fini_array))
|
||||
${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__fini_array_end = .);}}
|
||||
}"
|
||||
CTOR=".ctors ${CONSTRUCTING-0} :
|
||||
{
|
||||
${CONSTRUCTING+${CTOR_START}}
|
||||
@ -438,20 +452,8 @@ cat <<EOF
|
||||
KEEP (*(.preinit_array))
|
||||
${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__preinit_array_end = .);}}
|
||||
}
|
||||
.init_array ${RELOCATING-0} :
|
||||
{
|
||||
${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__init_array_start = .);}}
|
||||
KEEP (*(SORT(.init_array.*)))
|
||||
KEEP (*(.init_array))
|
||||
${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__init_array_end = .);}}
|
||||
}
|
||||
.fini_array ${RELOCATING-0} :
|
||||
{
|
||||
${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__fini_array_start = .);}}
|
||||
KEEP (*(SORT(.fini_array.*)))
|
||||
KEEP (*(.fini_array))
|
||||
${RELOCATING+${CREATE_SHLIB-PROVIDE_HIDDEN (${USER_LABEL_PREFIX}__fini_array_end = .);}}
|
||||
}
|
||||
${RELOCATING+${INIT_ARRAY}}
|
||||
${RELOCATING+${FINI_ARRAY}}
|
||||
${SMALL_DATA_CTOR-${RELOCATING+${CTOR}}}
|
||||
${SMALL_DATA_DTOR-${RELOCATING+${DTOR}}}
|
||||
.jcr ${RELOCATING-0} : { KEEP (*(.jcr)) }
|
||||
|
@ -1,3 +1,8 @@
|
||||
2010-02-27 Jie Zhang <jie@codesourcery.com>
|
||||
|
||||
* ld-elf/init-fini-arrays.s: New test.
|
||||
* ld-elf/init-fini-arrays.d: New test.
|
||||
|
||||
2010-02-24 Matthew Gretton-Dann <matthew.gretton-dann@arm.com>
|
||||
|
||||
* ld-arm/group-relocs.s: Mark code sections as executable.
|
||||
|
9
ld/testsuite/ld-elf/init-fini-arrays.d
Normal file
9
ld/testsuite/ld-elf/init-fini-arrays.d
Normal file
@ -0,0 +1,9 @@
|
||||
#source: init-fini-arrays.s
|
||||
#ld: -r
|
||||
#readelf: -S
|
||||
|
||||
#...
|
||||
\[[ 0-9]+\] \.init_array\.01000[ \t]+PROGBITS[ \t0-9a-f]+WA?.*
|
||||
#...
|
||||
\[[ 0-9]+\] \.fini_array\.01000[ \t]+PROGBITS[ \t0-9a-f]+WA?.*
|
||||
#pass
|
6
ld/testsuite/ld-elf/init-fini-arrays.s
Normal file
6
ld/testsuite/ld-elf/init-fini-arrays.s
Normal file
@ -0,0 +1,6 @@
|
||||
.section .init_array.01000,"aw",%progbits
|
||||
.align 4
|
||||
.word 0
|
||||
.section .fini_array.01000,"aw",%progbits
|
||||
.align 4
|
||||
.word 0
|
Loading…
Reference in New Issue
Block a user