ldscript.amd64 revision 218822
155825Speter/* $FreeBSD: head/sys/conf/ldscript.amd64 218822 2011-02-18 20:54:12Z dim $ */
2218822SdimOUTPUT_FORMAT("elf64-x86-64-freebsd", "elf64-x86-64-freebsd", "elf64-x86-64-freebsd")
3114370SpeterOUTPUT_ARCH(i386:x86-64)
439818SpeterENTRY(btext)
5114370SpeterSEARCH_DIR("/usr/lib");
639818SpeterSECTIONS
739818Speter{
839818Speter  /* Read-only sections, merged into text segment: */
9218822Sdim  . = kernbase + CONSTANT (MAXPAGESIZE) + SIZEOF_HEADERS;
10114370Speter  .interp         : { *(.interp) }
11114370Speter  .hash           : { *(.hash) }
12218822Sdim  .gnu.hash       : { *(.gnu.hash) }
13114370Speter  .dynsym         : { *(.dynsym) }
14114370Speter  .dynstr         : { *(.dynstr) }
15114370Speter  .gnu.version    : { *(.gnu.version) }
16114370Speter  .gnu.version_d  : { *(.gnu.version_d) }
17114370Speter  .gnu.version_r  : { *(.gnu.version_r) }
18114370Speter  .rel.init       : { *(.rel.init) }
19114370Speter  .rela.init      : { *(.rela.init) }
20114370Speter  .rel.text       : { *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) }
21114370Speter  .rela.text      : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) }
22114370Speter  .rel.fini       : { *(.rel.fini) }
23114370Speter  .rela.fini      : { *(.rela.fini) }
24114370Speter  .rel.rodata     : { *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*) }
25114370Speter  .rela.rodata    : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) }
26218822Sdim  .rel.data.rel.ro   : { *(.rel.data.rel.ro* .rel.gnu.linkonce.d.rel.ro.*) }
27218822Sdim  .rela.data.rel.ro   : { *(.rela.data.rel.ro* .rela.gnu.linkonce.d.rel.ro.*) }
28114370Speter  .rel.data       : { *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) }
29114370Speter  .rela.data      : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) }
30114370Speter  .rel.tdata	  : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) }
31114370Speter  .rela.tdata	  : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) }
32114370Speter  .rel.tbss	  : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) }
33114370Speter  .rela.tbss	  : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) }
34114370Speter  .rel.ctors      : { *(.rel.ctors) }
35114370Speter  .rela.ctors     : { *(.rela.ctors) }
36114370Speter  .rel.dtors      : { *(.rel.dtors) }
37114370Speter  .rela.dtors     : { *(.rela.dtors) }
38114370Speter  .rel.got        : { *(.rel.got) }
39114370Speter  .rela.got       : { *(.rela.got) }
40114370Speter  .rel.bss        : { *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*) }
41114370Speter  .rela.bss       : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) }
42218822Sdim  .rel.ldata      : { *(.rel.ldata .rel.ldata.* .rel.gnu.linkonce.l.*) }
43218822Sdim  .rela.ldata     : { *(.rela.ldata .rela.ldata.* .rela.gnu.linkonce.l.*) }
44218822Sdim  .rel.lbss       : { *(.rel.lbss .rel.lbss.* .rel.gnu.linkonce.lb.*) }
45218822Sdim  .rela.lbss      : { *(.rela.lbss .rela.lbss.* .rela.gnu.linkonce.lb.*) }
46218822Sdim  .rel.lrodata    : { *(.rel.lrodata .rel.lrodata.* .rel.gnu.linkonce.lr.*) }
47218822Sdim  .rela.lrodata   : { *(.rela.lrodata .rela.lrodata.* .rela.gnu.linkonce.lr.*) }
48114370Speter  .rel.plt        : { *(.rel.plt) }
49114370Speter  .rela.plt       : { *(.rela.plt) }
50114370Speter  .init           :
5139818Speter  {
52114370Speter    KEEP (*(.init))
53114370Speter  } =0x90909090
54114370Speter  .plt            : { *(.plt) }
55114370Speter  .text           :
56114370Speter  {
57114370Speter    *(.text .stub .text.* .gnu.linkonce.t.*)
58218822Sdim    KEEP (*(.text.*personality*))
5939818Speter    /* .gnu.warning sections are handled specially by elf32.em.  */
6039818Speter    *(.gnu.warning)
61114370Speter  } =0x90909090
62114370Speter  .fini           :
63114370Speter  {
64114370Speter    KEEP (*(.fini))
65114370Speter  } =0x90909090
66114370Speter  PROVIDE (__etext = .);
67114370Speter  PROVIDE (_etext = .);
6839818Speter  PROVIDE (etext = .);
69114370Speter  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
70114370Speter  .rodata1        : { *(.rodata1) }
71114370Speter  .eh_frame_hdr : { *(.eh_frame_hdr) }
72218822Sdim  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) }
73218822Sdim  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
7439818Speter  /* Adjust the address for the data segment.  We want to adjust up to
7539818Speter     the same address within the page on the next page up.  */
76218822Sdim  . = ALIGN (CONSTANT (MAXPAGESIZE)) - ((CONSTANT (MAXPAGESIZE) - .) & (CONSTANT (MAXPAGESIZE) - 1)); . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE));
77218822Sdim  /* Exception handling  */
78218822Sdim  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) }
79218822Sdim  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
80218822Sdim  /* Thread Local Storage sections  */
81218822Sdim  .tdata	  : { *(.tdata .tdata.* .gnu.linkonce.td.*) }
82218822Sdim  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
83218822Sdim  .preinit_array     :
8439818Speter  {
85218822Sdim    PROVIDE_HIDDEN (__preinit_array_start = .);
86218822Sdim    KEEP (*(.preinit_array))
87218822Sdim    PROVIDE_HIDDEN (__preinit_array_end = .);
8839818Speter  }
89218822Sdim  .init_array     :
90218822Sdim  {
91218822Sdim     PROVIDE_HIDDEN (__init_array_start = .);
92218822Sdim     KEEP (*(SORT(.init_array.*)))
93218822Sdim     KEEP (*(.init_array))
94218822Sdim     PROVIDE_HIDDEN (__init_array_end = .);
95218822Sdim  }
96218822Sdim  .fini_array     :
97218822Sdim  {
98218822Sdim    PROVIDE_HIDDEN (__fini_array_start = .);
99218822Sdim    KEEP (*(.fini_array))
100218822Sdim    KEEP (*(SORT(.fini_array.*)))
101218822Sdim    PROVIDE_HIDDEN (__fini_array_end = .);
102218822Sdim  }
103129824Stjr  _start_ctors = .;
104129824Stjr  PROVIDE (start_ctors = .);
105114370Speter  .ctors          :
10639818Speter  {
107114370Speter    /* gcc uses crtbegin.o to find the start of
108114370Speter       the constructors, so we make sure it is
109114370Speter       first.  Because this is a wildcard, it
110114370Speter       doesn't matter if the user does not
111114370Speter       actually link against crtbegin.o; the
112114370Speter       linker won't look for a file to match a
113114370Speter       wildcard.  The wildcard also means that it
114114370Speter       doesn't matter which directory crtbegin.o
115114370Speter       is in.  */
116114370Speter    KEEP (*crtbegin.o(.ctors))
117218822Sdim    KEEP (*crtbegin?.o(.ctors))
118114370Speter    /* We don't want to include the .ctor section from
119218822Sdim       the crtend.o file until after the sorted ctors.
120114370Speter       The .ctor section from the crtend file contains the
121114370Speter       end of ctors marker and it must be last */
122218822Sdim    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
123114370Speter    KEEP (*(SORT(.ctors.*)))
124114370Speter    KEEP (*(.ctors))
12539818Speter  }
126129824Stjr  _stop_ctors = .;
127129824Stjr  PROVIDE (stop_ctors = .);
128114370Speter  .dtors          :
12939818Speter  {
130114370Speter    KEEP (*crtbegin.o(.dtors))
131218822Sdim    KEEP (*crtbegin?.o(.dtors))
132218822Sdim    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
133114370Speter    KEEP (*(SORT(.dtors.*)))
134114370Speter    KEEP (*(.dtors))
13539818Speter  }
136114370Speter  .jcr            : { KEEP (*(.jcr)) }
137218822Sdim  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro* .gnu.linkonce.d.rel.ro.*) }
138218822Sdim  .dynamic        : { *(.dynamic) }
139218822Sdim  .got            : { *(.got) }
140218822Sdim  . = DATA_SEGMENT_RELRO_END (24, .);
141218822Sdim  .got.plt        : { *(.got.plt) }
142218822Sdim  .data           :
143218822Sdim  {
144218822Sdim    *(.data .data.* .gnu.linkonce.d.*)
145218822Sdim    KEEP (*(.gnu.linkonce.d.*personality*))
146218822Sdim    SORT(CONSTRUCTORS)
147218822Sdim  }
148218822Sdim  .data1          : { *(.data1) }
149218822Sdim  _edata = .; PROVIDE (edata = .);
15039818Speter  __bss_start = .;
151114370Speter  .bss            :
15239818Speter  {
15339818Speter   *(.dynbss)
154114370Speter   *(.bss .bss.* .gnu.linkonce.b.*)
15539818Speter   *(COMMON)
156114370Speter   /* Align here to ensure that the .bss section occupies space up to
157114370Speter      _end.  Align after .bss to ensure correct alignment even if the
158218822Sdim      .bss section disappears because there are no input sections.
159218822Sdim      FIXME: Why do we need it? When there is no .bss section, we don't
160218822Sdim      pad the .data section.  */
161218822Sdim   . = ALIGN(. != 0 ? 64 / 8 : 1);
16239818Speter  }
163218822Sdim  .lbss   :
164218822Sdim  {
165218822Sdim    *(.dynlbss)
166218822Sdim    *(.lbss .lbss.* .gnu.linkonce.lb.*)
167218822Sdim    *(LARGE_COMMON)
168218822Sdim  }
169114370Speter  . = ALIGN(64 / 8);
170218822Sdim  .lrodata   ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) :
171218822Sdim  {
172218822Sdim    *(.lrodata .lrodata.* .gnu.linkonce.lr.*)
173218822Sdim  }
174218822Sdim  .ldata   ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) :
175218822Sdim  {
176218822Sdim    *(.ldata .ldata.* .gnu.linkonce.l.*)
177218822Sdim    . = ALIGN(. != 0 ? 64 / 8 : 1);
178218822Sdim  }
179218822Sdim  . = ALIGN(64 / 8);
180218822Sdim  _end = .; PROVIDE (end = .);
181114370Speter  . = DATA_SEGMENT_END (.);
18239818Speter  /* Stabs debugging sections.  */
183114370Speter  .stab          0 : { *(.stab) }
184114370Speter  .stabstr       0 : { *(.stabstr) }
185114370Speter  .stab.excl     0 : { *(.stab.excl) }
186114370Speter  .stab.exclstr  0 : { *(.stab.exclstr) }
187114370Speter  .stab.index    0 : { *(.stab.index) }
18839818Speter  .stab.indexstr 0 : { *(.stab.indexstr) }
189114370Speter  .comment       0 : { *(.comment) }
19039818Speter  /* DWARF debug sections.
19139818Speter     Symbols in the DWARF debugging sections are relative to the beginning
19239818Speter     of the section so we begin them at 0.  */
19339818Speter  /* DWARF 1 */
19439818Speter  .debug          0 : { *(.debug) }
19539818Speter  .line           0 : { *(.line) }
19639818Speter  /* GNU DWARF 1 extensions */
19739818Speter  .debug_srcinfo  0 : { *(.debug_srcinfo) }
19839818Speter  .debug_sfnames  0 : { *(.debug_sfnames) }
19939818Speter  /* DWARF 1.1 and DWARF 2 */
20039818Speter  .debug_aranges  0 : { *(.debug_aranges) }
20139818Speter  .debug_pubnames 0 : { *(.debug_pubnames) }
20239818Speter  /* DWARF 2 */
203114370Speter  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
20439818Speter  .debug_abbrev   0 : { *(.debug_abbrev) }
20539818Speter  .debug_line     0 : { *(.debug_line) }
20639818Speter  .debug_frame    0 : { *(.debug_frame) }
20739818Speter  .debug_str      0 : { *(.debug_str) }
20839818Speter  .debug_loc      0 : { *(.debug_loc) }
20939818Speter  .debug_macinfo  0 : { *(.debug_macinfo) }
21039818Speter  /* SGI/MIPS DWARF 2 extensions */
21139818Speter  .debug_weaknames 0 : { *(.debug_weaknames) }
21239818Speter  .debug_funcnames 0 : { *(.debug_funcnames) }
21339818Speter  .debug_typenames 0 : { *(.debug_typenames) }
21439818Speter  .debug_varnames  0 : { *(.debug_varnames) }
215218822Sdim  /* DWARF 3 */
216218822Sdim  .debug_pubtypes 0 : { *(.debug_pubtypes) }
217218822Sdim  .debug_ranges   0 : { *(.debug_ranges) }
218218822Sdim  .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) }
219218822Sdim  /DISCARD/ : { *(.note.GNU-stack) }
22039818Speter}
221