ldscript.amd64 revision 114370
155825Speter/* $FreeBSD: head/sys/conf/ldscript.amd64 114370 2003-05-01 02:59:24Z peter $ */
2114370SpeterOUTPUT_FORMAT("elf64-x86-64", "elf64-x86-64", "elf64-x86-64")
3114370SpeterOUTPUT_ARCH(i386:x86-64)
439818SpeterENTRY(btext)
5114370SpeterSEARCH_DIR("/usr/lib");
639818SpeterSECTIONS
739818Speter{
839818Speter  /* Read-only sections, merged into text segment: */
983598Speter  . = kernbase + 0x00100000 + SIZEOF_HEADERS;
10114370Speter  .interp         : { *(.interp) }
11114370Speter  .hash           : { *(.hash) }
12114370Speter  .dynsym         : { *(.dynsym) }
13114370Speter  .dynstr         : { *(.dynstr) }
14114370Speter  .gnu.version    : { *(.gnu.version) }
15114370Speter  .gnu.version_d  : { *(.gnu.version_d) }
16114370Speter  .gnu.version_r  : { *(.gnu.version_r) }
17114370Speter  .rel.init       : { *(.rel.init) }
18114370Speter  .rela.init      : { *(.rela.init) }
19114370Speter  .rel.text       : { *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) }
20114370Speter  .rela.text      : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) }
21114370Speter  .rel.fini       : { *(.rel.fini) }
22114370Speter  .rela.fini      : { *(.rela.fini) }
23114370Speter  .rel.rodata     : { *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*) }
24114370Speter  .rela.rodata    : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) }
25114370Speter  .rel.data       : { *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) }
26114370Speter  .rela.data      : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) }
27114370Speter  .rel.tdata	  : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) }
28114370Speter  .rela.tdata	  : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) }
29114370Speter  .rel.tbss	  : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) }
30114370Speter  .rela.tbss	  : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) }
31114370Speter  .rel.ctors      : { *(.rel.ctors) }
32114370Speter  .rela.ctors     : { *(.rela.ctors) }
33114370Speter  .rel.dtors      : { *(.rel.dtors) }
34114370Speter  .rela.dtors     : { *(.rela.dtors) }
35114370Speter  .rel.got        : { *(.rel.got) }
36114370Speter  .rela.got       : { *(.rela.got) }
37114370Speter  .rel.bss        : { *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*) }
38114370Speter  .rela.bss       : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) }
39114370Speter  .rel.plt        : { *(.rel.plt) }
40114370Speter  .rela.plt       : { *(.rela.plt) }
41114370Speter  .init           :
4239818Speter  {
43114370Speter    KEEP (*(.init))
44114370Speter  } =0x90909090
45114370Speter  .plt            : { *(.plt) }
46114370Speter  .text           :
47114370Speter  {
48114370Speter    *(.text .stub .text.* .gnu.linkonce.t.*)
4939818Speter    /* .gnu.warning sections are handled specially by elf32.em.  */
5039818Speter    *(.gnu.warning)
51114370Speter  } =0x90909090
52114370Speter  .fini           :
53114370Speter  {
54114370Speter    KEEP (*(.fini))
55114370Speter  } =0x90909090
56114370Speter  PROVIDE (__etext = .);
57114370Speter  PROVIDE (_etext = .);
5839818Speter  PROVIDE (etext = .);
59114370Speter  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
60114370Speter  .rodata1        : { *(.rodata1) }
61114370Speter  .eh_frame_hdr : { *(.eh_frame_hdr) }
6239818Speter  /* Adjust the address for the data segment.  We want to adjust up to
6339818Speter     the same address within the page on the next page up.  */
64114370Speter  . = DATA_SEGMENT_ALIGN(0x100000, 0x1000);
65114370Speter  /* Ensure the __preinit_array_start label is properly aligned.  We
66114370Speter     could instead move the label definition inside the section, but
67114370Speter     the linker would then create the section even if it turns out to
68114370Speter     be empty, which isn't pretty.  */
69114370Speter  . = ALIGN(64 / 8);
70114370Speter  PROVIDE (__preinit_array_start = .);
71114370Speter  .preinit_array     : { *(.preinit_array) }
72114370Speter  PROVIDE (__preinit_array_end = .);
73114370Speter  PROVIDE (__init_array_start = .);
74114370Speter  .init_array     : { *(.init_array) }
75114370Speter  PROVIDE (__init_array_end = .);
76114370Speter  PROVIDE (__fini_array_start = .);
77114370Speter  .fini_array     : { *(.fini_array) }
78114370Speter  PROVIDE (__fini_array_end = .);
79114370Speter  .data           :
8039818Speter  {
81114370Speter    *(.data .data.* .gnu.linkonce.d.*)
82114370Speter    SORT(CONSTRUCTORS)
8339818Speter  }
84114370Speter  .data1          : { *(.data1) }
85114370Speter  .tdata	  : { *(.tdata .tdata.* .gnu.linkonce.td.*) }
86114370Speter  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
87114370Speter  .eh_frame       : { KEEP (*(.eh_frame)) }
88114370Speter  .gcc_except_table   : { *(.gcc_except_table) }
89114370Speter  .dynamic        : { *(.dynamic) }
90114370Speter  .ctors          :
9139818Speter  {
92114370Speter    /* gcc uses crtbegin.o to find the start of
93114370Speter       the constructors, so we make sure it is
94114370Speter       first.  Because this is a wildcard, it
95114370Speter       doesn't matter if the user does not
96114370Speter       actually link against crtbegin.o; the
97114370Speter       linker won't look for a file to match a
98114370Speter       wildcard.  The wildcard also means that it
99114370Speter       doesn't matter which directory crtbegin.o
100114370Speter       is in.  */
101114370Speter    KEEP (*crtbegin.o(.ctors))
102114370Speter    /* We don't want to include the .ctor section from
103114370Speter       from the crtend.o file until after the sorted ctors.
104114370Speter       The .ctor section from the crtend file contains the
105114370Speter       end of ctors marker and it must be last */
106114370Speter    KEEP (*(EXCLUDE_FILE (*crtend.o ) .ctors))
107114370Speter    KEEP (*(SORT(.ctors.*)))
108114370Speter    KEEP (*(.ctors))
10939818Speter  }
110114370Speter  .dtors          :
11139818Speter  {
112114370Speter    KEEP (*crtbegin.o(.dtors))
113114370Speter    KEEP (*(EXCLUDE_FILE (*crtend.o ) .dtors))
114114370Speter    KEEP (*(SORT(.dtors.*)))
115114370Speter    KEEP (*(.dtors))
11639818Speter  }
117114370Speter  .jcr            : { KEEP (*(.jcr)) }
118114370Speter  .got            : { *(.got.plt) *(.got) }
119114370Speter  _edata = .;
12039818Speter  PROVIDE (edata = .);
12139818Speter  __bss_start = .;
122114370Speter  .bss            :
12339818Speter  {
12439818Speter   *(.dynbss)
125114370Speter   *(.bss .bss.* .gnu.linkonce.b.*)
12639818Speter   *(COMMON)
127114370Speter   /* Align here to ensure that the .bss section occupies space up to
128114370Speter      _end.  Align after .bss to ensure correct alignment even if the
129114370Speter      .bss section disappears because there are no input sections.  */
130114370Speter   . = ALIGN(64 / 8);
13139818Speter  }
132114370Speter  . = ALIGN(64 / 8);
133114370Speter  _end = .;
13439818Speter  PROVIDE (end = .);
135114370Speter  . = DATA_SEGMENT_END (.);
13639818Speter  /* Stabs debugging sections.  */
137114370Speter  .stab          0 : { *(.stab) }
138114370Speter  .stabstr       0 : { *(.stabstr) }
139114370Speter  .stab.excl     0 : { *(.stab.excl) }
140114370Speter  .stab.exclstr  0 : { *(.stab.exclstr) }
141114370Speter  .stab.index    0 : { *(.stab.index) }
14239818Speter  .stab.indexstr 0 : { *(.stab.indexstr) }
143114370Speter  .comment       0 : { *(.comment) }
14439818Speter  /* DWARF debug sections.
14539818Speter     Symbols in the DWARF debugging sections are relative to the beginning
14639818Speter     of the section so we begin them at 0.  */
14739818Speter  /* DWARF 1 */
14839818Speter  .debug          0 : { *(.debug) }
14939818Speter  .line           0 : { *(.line) }
15039818Speter  /* GNU DWARF 1 extensions */
15139818Speter  .debug_srcinfo  0 : { *(.debug_srcinfo) }
15239818Speter  .debug_sfnames  0 : { *(.debug_sfnames) }
15339818Speter  /* DWARF 1.1 and DWARF 2 */
15439818Speter  .debug_aranges  0 : { *(.debug_aranges) }
15539818Speter  .debug_pubnames 0 : { *(.debug_pubnames) }
15639818Speter  /* DWARF 2 */
157114370Speter  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
15839818Speter  .debug_abbrev   0 : { *(.debug_abbrev) }
15939818Speter  .debug_line     0 : { *(.debug_line) }
16039818Speter  .debug_frame    0 : { *(.debug_frame) }
16139818Speter  .debug_str      0 : { *(.debug_str) }
16239818Speter  .debug_loc      0 : { *(.debug_loc) }
16339818Speter  .debug_macinfo  0 : { *(.debug_macinfo) }
16439818Speter  /* SGI/MIPS DWARF 2 extensions */
16539818Speter  .debug_weaknames 0 : { *(.debug_weaknames) }
16639818Speter  .debug_funcnames 0 : { *(.debug_funcnames) }
16739818Speter  .debug_typenames 0 : { *(.debug_typenames) }
16839818Speter  .debug_varnames  0 : { *(.debug_varnames) }
16939818Speter}
170