binutils-gdb/ld/testsuite/ld-shared/elf-offset.ld

171 lines
4.9 KiB
Plaintext
Raw Normal View History

1999-05-03 09:29:11 +02:00
SECTIONS
{
/* Read-only sections, merged into text segment: */
. = 0x100000;
.hash : { *(.hash) }
.dynsym : { *(.dynsym) }
.dynstr : { *(.dynstr) }
.gnu.version : { *(.gnu.version) }
.gnu.version_d : { *(.gnu.version_d) }
.gnu.version_r : { *(.gnu.version_r) }
.rel.text :
{
*(.rel.text)
*(.rel.text.*)
*(.rel.gnu.linkonce.t*)
}
.rela.text :
{
*(.rela.text)
*(.rela.text.*)
*(.rela.gnu.linkonce.t*)
}
.rel.data :
{
*(.rel.data)
*(.rel.data.*)
*(.rel.gnu.linkonce.d*)
}
.rela.data :
{
*(.rela.data)
*(.rela.data.*)
*(.rela.gnu.linkonce.d*)
}
.rel.rodata :
{
*(.rel.rodata)
*(.rel.rodata.*)
*(.rel.gnu.linkonce.r*)
}
.rela.rodata :
{
*(.rela.rodata)
*(.rela.rodata.*)
*(.rela.gnu.linkonce.r*)
}
.rel.got : { *(.rel.got) }
.rela.got : { *(.rela.got) }
.rel.ctors : { *(.rel.ctors) }
.rela.ctors : { *(.rela.ctors) }
.rel.dtors : { *(.rel.dtors) }
.rela.dtors : { *(.rela.dtors) }
.rel.init : { *(.rel.init) }
.rela.init : { *(.rela.init) }
.rel.fini : { *(.rel.fini) }
.rela.fini : { *(.rela.fini) }
.rel.bss : { *(.rel.bss) }
.rela.bss : { *(.rela.bss) }
.rel.plt : { *(.rel.plt) }
.rela.plt : { *(.rela.plt) }
.rel.eh_frame : { *(.rel.eh_frame) }
.rela.eh_frame : { *(.rela.eh_frame) }
1999-05-03 09:29:11 +02:00
.init : { KEEP (*(.init)) }
.plt : { *(.plt) }
.text :
{
*(.text)
*(.text.*)
*(.stub)
/* .gnu.warning sections are handled specially by elf32.em. */
*(.gnu.warning)
*(.gnu.linkonce.t*)
}
_etext = .;
PROVIDE (etext = .);
.fini : { KEEP (*(.fini)) } =0x9090
.rodata :
{
*(.rodata)
*(.rodata.*)
*(.gnu.linkonce.r*)
}
.rodata1 : { *(.rodata1) }
/* Adjust the address for the data segment. We want to adjust up to
the same address within the page on the next page up. */
. = ALIGN(0x1000) + (. & (0x1000 - 1));
.data :
{
*(.data)
*(.data.*)
*(.gnu.linkonce.d*)
SORT(CONSTRUCTORS)
}
.data1 : { *(.data1) }
.ctors :
{
/* gcc uses crtbegin.o to find the start of the constructors, so
we make sure it is first. Because this is a wildcard, it
doesn't matter if the user does not actually link against
crtbegin.o; the linker won't look for a file to match a
wildcard. The wildcard also means that it doesn't matter which
directory crtbegin.o is in. */
KEEP (*crtbegin.o(.ctors))
KEEP (*(SORT(.ctors.*)))
KEEP (*(.ctors))
}
.dtors :
{
KEEP (*crtbegin.o(.dtors))
KEEP (*(SORT(.dtors.*)))
KEEP (*(.dtors))
}
* ld-elfvers/vers.exp: Enable test for powerpc64. * ld-elfweak/elfweak.exp: Likewise * ld-shared/shared.exp: Likewise. Xfail non-pic dso tests for ppc64. * ld-elfvers/vers1.dsym, * ld-elfvers/vers1.sym, * ld-elfvers/vers2.dsym, * ld-elfvers/vers3.dsym, * ld-elfvers/vers4.sym, * ld-elfvers/vers4a.dsym, * ld-elfvers/vers4a.sym, * ld-elfvers/vers6.dsym, * ld-elfvers/vers6.sym, * ld-elfvers/vers7a.dsym, * ld-elfvers/vers7a.sym, * ld-elfvers/vers9.dsym, * ld-elfvers/vers9.sym, * ld-elfvers/vers15.dsym, * ld-elfvers/vers15.sym, * ld-elfvers/vers16.dsym, * ld-elfvers/vers16a.dsym, * ld-elfvers/vers17.dsym, * ld-elfvers/vers18.dsym, * ld-elfvers/vers18.sym, * ld-elfvers/vers19.dsym, * ld-elfvers/vers20.dsym, * ld-elfvers/vers21.dsym, * ld-elfvers/vers21.sym, * ld-elfvers/vers22.dsym, * ld-elfvers/vers22a.dsym, * ld-elfvers/vers22a.sym, * ld-elfvers/vers22b.dsym, * ld-elfvers/vers23.dsym, * ld-elfvers/vers23a.dsym, * ld-elfvers/vers23a.sym, * ld-elfvers/vers23b.dsym, * ld-elfvers/vers25a.dsym, * ld-elfvers/vers26a.dsym, * ld-elfvers/vers27a.dsym, * ld-elfvers/vers27d.dsym, * ld-elfvers/vers27d.sym, * ld-elfvers/vers27d4.dsym, * ld-elfvers/vers28b.dsym, * ld-elfvers/vers28c.dsym, * ld-elfvers/vers29.dsym, * ld-elfvers/vers30.dsym, * ld-elfvers/vers31.dsym, * ld-elfvers/vers32a.dsym, * ld-elfvers/vers32b.dsym, * ld-elfvers/vers32c.dsym, * ld-elfweak/dso.dsym, * ld-elfweak/dsodata.dsym, * ld-elfweak/dsow.dsym, * ld-elfweak/dsowdata.dsym, * ld-elfweak/strong.sym, * ld-elfweak/strongcomm.sym, * ld-elfweak/strongdata.sym, * ld-elfweak/weak.dsym, * ld-elfweak/weakdata.dsym: Relax whitespace matching, tighten non-whitespace matching. Match powerpc64 functions in .opd section. * ld-shared/elf-offset.ld: Place powerpc64 .toc sections.
2010-10-28 11:08:35 +02:00
.got : ALIGN(8) { *(.got.plt) *(.got .toc) }
1999-05-03 09:29:11 +02:00
.dynamic : { *(.dynamic) }
/* We want the small data sections together, so single-instruction offsets
can access them all, and initialized data all before uninitialized, so
we can shorten the on-disk segment size. */
.sdata : { *(.sdata) *(.sdata.*) }
_edata = .;
PROVIDE (edata = .);
__bss_start = .;
.sbss : { *(.sbss) *(.scommon) }
.bss :
{
*(.dynbss)
*(.bss)
*(COMMON)
/* Align here to ensure that the .bss section occupies space up to
_end. Align after .bss to ensure correct alignment even if the
.bss section disappears because there are no input sections. */
Make assignments to dot keep an empty output section. An assignment to dot in an output section that allocates space of course keeps the output section. Here, I'm changing the behaviour for assignments that don't allocate space. The idea is not so much to allow people to force output of an empty section with ". = .", but to fix cases where an otherwise empty section has padding added by an alignment expression that changes with relaxation or .eh_frame editing. Such a section might have zero size before relaxation and so be stripped incorrectly. ld/ * ld.texinfo (Output Section Discarding): Mention assigning to dot as a way of keeping otherwise empty sections. * ldexp.c (is_dot, is_value, is_sym_value, is_dot_ne_0, is_dot_plus_0, is_align_conditional): New predicates. (exp_fold_tree_1): Set SEC_KEEP when assigning to dot inside an output section, except for some special cases. * scripttempl/elfmicroblaze.sc: Use canonical form to align at end of .heap and .stack. ld/testsuite/ * ld-shared/elf-offset.ld: Align end of .bss with canonical form of ALIGN that allows an empty .bss to be removed. * ld-arm/arm-dyn.ld: Likewise. * ld-arm/arm-lib.ld: Likewise. * ld-elfvsb/elf-offset.ld: Likewise. * ld-mips-elf/mips-dyn.ld: Likewise. * ld-mips-elf/mips-lib.ld: Likewise. * ld-arm/arm-no-rel-plt.ld: Remove duplicate ALIGN. * ld-powerpc/vle-multiseg-1.ld: Remove ALIGN at start of section. ALIGN address of section instead. * ld-powerpc/vle-multiseg-2.ld: Likewise. * ld-powerpc/vle-multiseg-3.ld: Likewise. * ld-powerpc/vle-multiseg-4.ld: Likewise. * ld-powerpc/vle-multiseg-6.ld: Likewise. * ld-scripts/empty-aligned.d: Check section headers not program headers. Remove xfail and notarget. * ld-scripts/empty-aligned.t: Use canonical ALIGN for end of .text2.
2014-01-22 02:13:03 +01:00
. = ALIGN(. != 0 ? 32 / 8 : 1);
1999-05-03 09:29:11 +02:00
}
. = ALIGN(32 / 8);
_end = . ;
PROVIDE (end = .);
/* Stabs debugging sections. */
.stab 0 : { *(.stab) }
.stabstr 0 : { *(.stabstr) }
.stab.excl 0 : { *(.stab.excl) }
.stab.exclstr 0 : { *(.stab.exclstr) }
.stab.index 0 : { *(.stab.index) }
.stab.indexstr 0 : { *(.stab.indexstr) }
.comment 0 : { *(.comment) }
/* DWARF debug sections.
Symbols in the DWARF debugging sections are relative to the beginning
of the section so we begin them at 0. */
/* DWARF 1 */
.debug 0 : { *(.debug) }
.line 0 : { *(.line) }
/* GNU DWARF 1 extensions */
.debug_srcinfo 0 : { *(.debug_srcinfo) }
.debug_sfnames 0 : { *(.debug_sfnames) }
/* DWARF 1.1 and DWARF 2 */
.debug_aranges 0 : { *(.debug_aranges) }
.debug_pubnames 0 : { *(.debug_pubnames) }
/* DWARF 2 */
.debug_info 0 : { *(.debug_info) }
.debug_abbrev 0 : { *(.debug_abbrev) }
.debug_line 0 : { *(.debug_line) }
.debug_frame 0 : { *(.debug_frame) }
.debug_str 0 : { *(.debug_str) }
.debug_loc 0 : { *(.debug_loc) }
.debug_macinfo 0 : { *(.debug_macinfo) }
/* SGI/MIPS DWARF 2 extensions */
.debug_weaknames 0 : { *(.debug_weaknames) }
.debug_funcnames 0 : { *(.debug_funcnames) }
.debug_typenames 0 : { *(.debug_typenames) }
.debug_varnames 0 : { *(.debug_varnames) }
/* These must appear regardless of . */
}