155825Speter/* $FreeBSD$ */
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: */
9220090Salc  kernphys = CONSTANT (MAXPAGESIZE);
10220090Salc  . = kernbase + kernphys + SIZEOF_HEADERS;
11114370Speter  .interp         : { *(.interp) }
12114370Speter  .hash           : { *(.hash) }
13218822Sdim  .gnu.hash       : { *(.gnu.hash) }
14114370Speter  .dynsym         : { *(.dynsym) }
15114370Speter  .dynstr         : { *(.dynstr) }
16114370Speter  .gnu.version    : { *(.gnu.version) }
17114370Speter  .gnu.version_d  : { *(.gnu.version_d) }
18114370Speter  .gnu.version_r  : { *(.gnu.version_r) }
19114370Speter  .rel.init       : { *(.rel.init) }
20114370Speter  .rela.init      : { *(.rela.init) }
21114370Speter  .rel.text       : { *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) }
22114370Speter  .rela.text      : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) }
23114370Speter  .rel.fini       : { *(.rel.fini) }
24114370Speter  .rela.fini      : { *(.rela.fini) }
25114370Speter  .rel.rodata     : { *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*) }
26114370Speter  .rela.rodata    : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) }
27218822Sdim  .rel.data.rel.ro   : { *(.rel.data.rel.ro* .rel.gnu.linkonce.d.rel.ro.*) }
28218822Sdim  .rela.data.rel.ro   : { *(.rela.data.rel.ro* .rela.gnu.linkonce.d.rel.ro.*) }
29114370Speter  .rel.data       : { *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) }
30114370Speter  .rela.data      : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) }
31114370Speter  .rel.tdata	  : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) }
32114370Speter  .rela.tdata	  : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) }
33114370Speter  .rel.tbss	  : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) }
34114370Speter  .rela.tbss	  : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) }
35114370Speter  .rel.ctors      : { *(.rel.ctors) }
36114370Speter  .rela.ctors     : { *(.rela.ctors) }
37114370Speter  .rel.dtors      : { *(.rel.dtors) }
38114370Speter  .rela.dtors     : { *(.rela.dtors) }
39114370Speter  .rel.got        : { *(.rel.got) }
40114370Speter  .rela.got       : { *(.rela.got) }
41114370Speter  .rel.bss        : { *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*) }
42114370Speter  .rela.bss       : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) }
43218822Sdim  .rel.ldata      : { *(.rel.ldata .rel.ldata.* .rel.gnu.linkonce.l.*) }
44218822Sdim  .rela.ldata     : { *(.rela.ldata .rela.ldata.* .rela.gnu.linkonce.l.*) }
45218822Sdim  .rel.lbss       : { *(.rel.lbss .rel.lbss.* .rel.gnu.linkonce.lb.*) }
46218822Sdim  .rela.lbss      : { *(.rela.lbss .rela.lbss.* .rela.gnu.linkonce.lb.*) }
47218822Sdim  .rel.lrodata    : { *(.rel.lrodata .rel.lrodata.* .rel.gnu.linkonce.lr.*) }
48218822Sdim  .rela.lrodata   : { *(.rela.lrodata .rela.lrodata.* .rela.gnu.linkonce.lr.*) }
49114370Speter  .rel.plt        : { *(.rel.plt) }
50114370Speter  .rela.plt       : { *(.rela.plt) }
51114370Speter  .init           :
5239818Speter  {
53114370Speter    KEEP (*(.init))
54114370Speter  } =0x90909090
55114370Speter  .plt            : { *(.plt) }
56114370Speter  .text           :
57114370Speter  {
58114370Speter    *(.text .stub .text.* .gnu.linkonce.t.*)
59218822Sdim    KEEP (*(.text.*personality*))
6039818Speter    /* .gnu.warning sections are handled specially by elf32.em.  */
6139818Speter    *(.gnu.warning)
62114370Speter  } =0x90909090
63114370Speter  .fini           :
64114370Speter  {
65114370Speter    KEEP (*(.fini))
66114370Speter  } =0x90909090
67114370Speter  PROVIDE (__etext = .);
68114370Speter  PROVIDE (_etext = .);
6939818Speter  PROVIDE (etext = .);
70114370Speter  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
71114370Speter  .rodata1        : { *(.rodata1) }
72114370Speter  .eh_frame_hdr : { *(.eh_frame_hdr) }
73218822Sdim  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) }
74218822Sdim  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
7539818Speter  /* Adjust the address for the data segment.  We want to adjust up to
7639818Speter     the same address within the page on the next page up.  */
77218822Sdim  . = ALIGN (CONSTANT (MAXPAGESIZE)) - ((CONSTANT (MAXPAGESIZE) - .) & (CONSTANT (MAXPAGESIZE) - 1)); . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE));
78218822Sdim  /* Exception handling  */
79218822Sdim  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) }
80218822Sdim  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
81218822Sdim  /* Thread Local Storage sections  */
82218822Sdim  .tdata	  : { *(.tdata .tdata.* .gnu.linkonce.td.*) }
83218822Sdim  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
84218822Sdim  .preinit_array     :
8539818Speter  {
86218822Sdim    PROVIDE_HIDDEN (__preinit_array_start = .);
87218822Sdim    KEEP (*(.preinit_array))
88218822Sdim    PROVIDE_HIDDEN (__preinit_array_end = .);
8939818Speter  }
90218822Sdim  .init_array     :
91218822Sdim  {
92218822Sdim     PROVIDE_HIDDEN (__init_array_start = .);
93218822Sdim     KEEP (*(SORT(.init_array.*)))
94218822Sdim     KEEP (*(.init_array))
95218822Sdim     PROVIDE_HIDDEN (__init_array_end = .);
96218822Sdim  }
97218822Sdim  .fini_array     :
98218822Sdim  {
99218822Sdim    PROVIDE_HIDDEN (__fini_array_start = .);
100218822Sdim    KEEP (*(.fini_array))
101218822Sdim    KEEP (*(SORT(.fini_array.*)))
102218822Sdim    PROVIDE_HIDDEN (__fini_array_end = .);
103218822Sdim  }
104129824Stjr  _start_ctors = .;
105129824Stjr  PROVIDE (start_ctors = .);
106114370Speter  .ctors          :
10739818Speter  {
108114370Speter    /* gcc uses crtbegin.o to find the start of
109114370Speter       the constructors, so we make sure it is
110114370Speter       first.  Because this is a wildcard, it
111114370Speter       doesn't matter if the user does not
112114370Speter       actually link against crtbegin.o; the
113114370Speter       linker won't look for a file to match a
114114370Speter       wildcard.  The wildcard also means that it
115114370Speter       doesn't matter which directory crtbegin.o
116114370Speter       is in.  */
117114370Speter    KEEP (*crtbegin.o(.ctors))
118218822Sdim    KEEP (*crtbegin?.o(.ctors))
119114370Speter    /* We don't want to include the .ctor section from
120218822Sdim       the crtend.o file until after the sorted ctors.
121114370Speter       The .ctor section from the crtend file contains the
122114370Speter       end of ctors marker and it must be last */
123218822Sdim    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
124114370Speter    KEEP (*(SORT(.ctors.*)))
125114370Speter    KEEP (*(.ctors))
12639818Speter  }
127129824Stjr  _stop_ctors = .;
128129824Stjr  PROVIDE (stop_ctors = .);
129114370Speter  .dtors          :
13039818Speter  {
131114370Speter    KEEP (*crtbegin.o(.dtors))
132218822Sdim    KEEP (*crtbegin?.o(.dtors))
133218822Sdim    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
134114370Speter    KEEP (*(SORT(.dtors.*)))
135114370Speter    KEEP (*(.dtors))
13639818Speter  }
137114370Speter  .jcr            : { KEEP (*(.jcr)) }
138218822Sdim  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro* .gnu.linkonce.d.rel.ro.*) }
139218822Sdim  .dynamic        : { *(.dynamic) }
140218822Sdim  .got            : { *(.got) }
141218822Sdim  . = DATA_SEGMENT_RELRO_END (24, .);
142218822Sdim  .got.plt        : { *(.got.plt) }
143218822Sdim  .data           :
144218822Sdim  {
145218822Sdim    *(.data .data.* .gnu.linkonce.d.*)
146218822Sdim    KEEP (*(.gnu.linkonce.d.*personality*))
147218822Sdim    SORT(CONSTRUCTORS)
148218822Sdim  }
149218822Sdim  .data1          : { *(.data1) }
150218822Sdim  _edata = .; PROVIDE (edata = .);
15139818Speter  __bss_start = .;
152114370Speter  .bss            :
15339818Speter  {
15439818Speter   *(.dynbss)
155114370Speter   *(.bss .bss.* .gnu.linkonce.b.*)
15639818Speter   *(COMMON)
157114370Speter   /* Align here to ensure that the .bss section occupies space up to
158114370Speter      _end.  Align after .bss to ensure correct alignment even if the
159218822Sdim      .bss section disappears because there are no input sections.
160218822Sdim      FIXME: Why do we need it? When there is no .bss section, we don't
161218822Sdim      pad the .data section.  */
162218822Sdim   . = ALIGN(. != 0 ? 64 / 8 : 1);
16339818Speter  }
164218822Sdim  .lbss   :
165218822Sdim  {
166218822Sdim    *(.dynlbss)
167218822Sdim    *(.lbss .lbss.* .gnu.linkonce.lb.*)
168218822Sdim    *(LARGE_COMMON)
169218822Sdim  }
170114370Speter  . = ALIGN(64 / 8);
171218822Sdim  .lrodata   ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) :
172218822Sdim  {
173218822Sdim    *(.lrodata .lrodata.* .gnu.linkonce.lr.*)
174218822Sdim  }
175218822Sdim  .ldata   ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) :
176218822Sdim  {
177218822Sdim    *(.ldata .ldata.* .gnu.linkonce.l.*)
178218822Sdim    . = ALIGN(. != 0 ? 64 / 8 : 1);
179218822Sdim  }
180218822Sdim  . = ALIGN(64 / 8);
181218822Sdim  _end = .; PROVIDE (end = .);
182114370Speter  . = DATA_SEGMENT_END (.);
18339818Speter  /* Stabs debugging sections.  */
184114370Speter  .stab          0 : { *(.stab) }
185114370Speter  .stabstr       0 : { *(.stabstr) }
186114370Speter  .stab.excl     0 : { *(.stab.excl) }
187114370Speter  .stab.exclstr  0 : { *(.stab.exclstr) }
188114370Speter  .stab.index    0 : { *(.stab.index) }
18939818Speter  .stab.indexstr 0 : { *(.stab.indexstr) }
190114370Speter  .comment       0 : { *(.comment) }
19139818Speter  /* DWARF debug sections.
19239818Speter     Symbols in the DWARF debugging sections are relative to the beginning
19339818Speter     of the section so we begin them at 0.  */
19439818Speter  /* DWARF 1 */
19539818Speter  .debug          0 : { *(.debug) }
19639818Speter  .line           0 : { *(.line) }
19739818Speter  /* GNU DWARF 1 extensions */
19839818Speter  .debug_srcinfo  0 : { *(.debug_srcinfo) }
19939818Speter  .debug_sfnames  0 : { *(.debug_sfnames) }
20039818Speter  /* DWARF 1.1 and DWARF 2 */
20139818Speter  .debug_aranges  0 : { *(.debug_aranges) }
20239818Speter  .debug_pubnames 0 : { *(.debug_pubnames) }
20339818Speter  /* DWARF 2 */
204114370Speter  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
20539818Speter  .debug_abbrev   0 : { *(.debug_abbrev) }
20639818Speter  .debug_line     0 : { *(.debug_line) }
20739818Speter  .debug_frame    0 : { *(.debug_frame) }
20839818Speter  .debug_str      0 : { *(.debug_str) }
20939818Speter  .debug_loc      0 : { *(.debug_loc) }
21039818Speter  .debug_macinfo  0 : { *(.debug_macinfo) }
21139818Speter  /* SGI/MIPS DWARF 2 extensions */
21239818Speter  .debug_weaknames 0 : { *(.debug_weaknames) }
21339818Speter  .debug_funcnames 0 : { *(.debug_funcnames) }
21439818Speter  .debug_typenames 0 : { *(.debug_typenames) }
21539818Speter  .debug_varnames  0 : { *(.debug_varnames) }
216218822Sdim  /* DWARF 3 */
217218822Sdim  .debug_pubtypes 0 : { *(.debug_pubtypes) }
218218822Sdim  .debug_ranges   0 : { *(.debug_ranges) }
219218822Sdim  .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) }
220218822Sdim  /DISCARD/ : { *(.note.GNU-stack) }
22139818Speter}
222