155825Speter/* $FreeBSD$ */
2104930SobrienOUTPUT_FORMAT("elf32-i386-freebsd", "elf32-i386-freebsd", "elf32-i386-freebsd")
339818SpeterOUTPUT_ARCH(i386)
439818SpeterENTRY(btext)
547719SpeterSEARCH_DIR(/usr/lib);
639818SpeterSECTIONS
739818Speter{
839818Speter  /* Read-only sections, merged into text segment: */
9120654Speter  . = kernbase + kernload + SIZEOF_HEADERS;
10218822Sdim  .interp         : { *(.interp) }
11218822Sdim  .hash           : { *(.hash) }
12218822Sdim  .gnu.hash       : { *(.gnu.hash) }
13218822Sdim  .dynsym         : { *(.dynsym) }
14218822Sdim  .dynstr         : { *(.dynstr) }
15218822Sdim  .gnu.version    : { *(.gnu.version) }
16218822Sdim  .gnu.version_d  : { *(.gnu.version_d) }
17218822Sdim  .gnu.version_r  : { *(.gnu.version_r) }
18218822Sdim  .rel.init       : { *(.rel.init) }
19218822Sdim  .rela.init      : { *(.rela.init) }
20218822Sdim  .rel.text       : { *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) }
21218822Sdim  .rela.text      : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) }
22218822Sdim  .rel.fini       : { *(.rel.fini) }
23218822Sdim  .rela.fini      : { *(.rela.fini) }
24218822Sdim  .rel.rodata     : { *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*) }
25218822Sdim  .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.*) }
28218822Sdim  .rel.data       : { *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) }
29218822Sdim  .rela.data      : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) }
30218822Sdim  .rel.tdata	  : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) }
31218822Sdim  .rela.tdata	  : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) }
32218822Sdim  .rel.tbss	  : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) }
33218822Sdim  .rela.tbss	  : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) }
34218822Sdim  .rel.ctors      : { *(.rel.ctors) }
35218822Sdim  .rela.ctors     : { *(.rela.ctors) }
36218822Sdim  .rel.dtors      : { *(.rel.dtors) }
37218822Sdim  .rela.dtors     : { *(.rela.dtors) }
38218822Sdim  .rel.got        : { *(.rel.got) }
39218822Sdim  .rela.got       : { *(.rela.got) }
40218822Sdim  .rel.bss        : { *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*) }
41218822Sdim  .rela.bss       : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) }
42218822Sdim  .rel.plt        : { *(.rel.plt) }
43218822Sdim  .rela.plt       : { *(.rela.plt) }
44218822Sdim  .init           :
4539818Speter  {
46218822Sdim    KEEP (*(.init))
47218822Sdim  } =0x90909090
48218822Sdim  .plt            : { *(.plt) }
49218822Sdim  .text           :
50218822Sdim  {
51218822Sdim    *(.text .stub .text.* .gnu.linkonce.t.*)
52218822Sdim    KEEP (*(.text.*personality*))
5339818Speter    /* .gnu.warning sections are handled specially by elf32.em.  */
5439818Speter    *(.gnu.warning)
55218822Sdim  } =0x90909090
56218822Sdim  .fini           :
57218822Sdim  {
58218822Sdim    KEEP (*(.fini))
59218822Sdim  } =0x90909090
60218822Sdim  PROVIDE (__etext = .);
61218822Sdim  PROVIDE (_etext = .);
6239818Speter  PROVIDE (etext = .);
63218822Sdim  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
64218822Sdim  .rodata1        : { *(.rodata1) }
65218822Sdim  .eh_frame_hdr : { *(.eh_frame_hdr) }
66218822Sdim  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) }
67218822Sdim  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
6839818Speter  /* Adjust the address for the data segment.  We want to adjust up to
6939818Speter     the same address within the page on the next page up.  */
70218822Sdim  . = ALIGN (CONSTANT (MAXPAGESIZE)) - ((CONSTANT (MAXPAGESIZE) - .) & (CONSTANT (MAXPAGESIZE) - 1)); . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE));
71218822Sdim  /* Exception handling  */
72218822Sdim  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) }
73218822Sdim  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
74218822Sdim  /* Thread Local Storage sections  */
75218822Sdim  .tdata	  : { *(.tdata .tdata.* .gnu.linkonce.td.*) }
76218822Sdim  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
77218822Sdim  .preinit_array     :
7839818Speter  {
79218822Sdim    PROVIDE_HIDDEN (__preinit_array_start = .);
80218822Sdim    KEEP (*(.preinit_array))
81218822Sdim    PROVIDE_HIDDEN (__preinit_array_end = .);
8239818Speter  }
83218822Sdim  .init_array     :
84218822Sdim  {
85218822Sdim     PROVIDE_HIDDEN (__init_array_start = .);
86218822Sdim     KEEP (*(SORT(.init_array.*)))
87218822Sdim     KEEP (*(.init_array))
88218822Sdim     PROVIDE_HIDDEN (__init_array_end = .);
89218822Sdim  }
90218822Sdim  .fini_array     :
91218822Sdim  {
92218822Sdim    PROVIDE_HIDDEN (__fini_array_start = .);
93218822Sdim    KEEP (*(.fini_array))
94218822Sdim    KEEP (*(SORT(.fini_array.*)))
95218822Sdim    PROVIDE_HIDDEN (__fini_array_end = .);
96218822Sdim  }
97108777Sphk  _start_ctors = .;
98108777Sphk  PROVIDE (start_ctors = .);
99218822Sdim  .ctors          :
10039818Speter  {
101218822Sdim    /* gcc uses crtbegin.o to find the start of
102218822Sdim       the constructors, so we make sure it is
103218822Sdim       first.  Because this is a wildcard, it
104218822Sdim       doesn't matter if the user does not
105218822Sdim       actually link against crtbegin.o; the
106218822Sdim       linker won't look for a file to match a
107218822Sdim       wildcard.  The wildcard also means that it
108218822Sdim       doesn't matter which directory crtbegin.o
109218822Sdim       is in.  */
110218822Sdim    KEEP (*crtbegin.o(.ctors))
111218822Sdim    KEEP (*crtbegin?.o(.ctors))
112218822Sdim    /* We don't want to include the .ctor section from
113218822Sdim       the crtend.o file until after the sorted ctors.
114218822Sdim       The .ctor section from the crtend file contains the
115218822Sdim       end of ctors marker and it must be last */
116218822Sdim    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
117218822Sdim    KEEP (*(SORT(.ctors.*)))
118218822Sdim    KEEP (*(.ctors))
11939818Speter  }
120108777Sphk  _stop_ctors = .;
121108777Sphk  PROVIDE (stop_ctors = .);
122218822Sdim  .dtors          :
12339818Speter  {
124218822Sdim    KEEP (*crtbegin.o(.dtors))
125218822Sdim    KEEP (*crtbegin?.o(.dtors))
126218822Sdim    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
127218822Sdim    KEEP (*(SORT(.dtors.*)))
128218822Sdim    KEEP (*(.dtors))
12939818Speter  }
130218822Sdim  .jcr            : { KEEP (*(.jcr)) }
131218822Sdim  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro* .gnu.linkonce.d.rel.ro.*) }
132218822Sdim  .dynamic        : { *(.dynamic) }
133218822Sdim  .got            : { *(.got) }
134218822Sdim  . = DATA_SEGMENT_RELRO_END (12, .);
135218822Sdim  .got.plt        : { *(.got.plt) }
136218822Sdim  .data           :
137218822Sdim  {
138218822Sdim    *(.data .data.* .gnu.linkonce.d.*)
139218822Sdim    KEEP (*(.gnu.linkonce.d.*personality*))
140218822Sdim    SORT(CONSTRUCTORS)
141218822Sdim  }
142218822Sdim  .data1          : { *(.data1) }
143218822Sdim  _edata = .; PROVIDE (edata = .);
14439818Speter  __bss_start = .;
145218822Sdim  .bss            :
14639818Speter  {
14739818Speter   *(.dynbss)
148218822Sdim   *(.bss .bss.* .gnu.linkonce.b.*)
14939818Speter   *(COMMON)
150218822Sdim   /* Align here to ensure that the .bss section occupies space up to
151218822Sdim      _end.  Align after .bss to ensure correct alignment even if the
152218822Sdim      .bss section disappears because there are no input sections.
153218822Sdim      FIXME: Why do we need it? When there is no .bss section, we don't
154218822Sdim      pad the .data section.  */
155218822Sdim   . = ALIGN(. != 0 ? 32 / 8 : 1);
15639818Speter  }
15739818Speter  . = ALIGN(32 / 8);
158218822Sdim  . = ALIGN(32 / 8);
159218822Sdim  _end = .; PROVIDE (end = .);
160218822Sdim  . = DATA_SEGMENT_END (.);
16139818Speter  /* Stabs debugging sections.  */
162218822Sdim  .stab          0 : { *(.stab) }
163218822Sdim  .stabstr       0 : { *(.stabstr) }
164218822Sdim  .stab.excl     0 : { *(.stab.excl) }
165218822Sdim  .stab.exclstr  0 : { *(.stab.exclstr) }
166218822Sdim  .stab.index    0 : { *(.stab.index) }
16739818Speter  .stab.indexstr 0 : { *(.stab.indexstr) }
168218822Sdim  .comment       0 : { *(.comment) }
16939818Speter  /* DWARF debug sections.
17039818Speter     Symbols in the DWARF debugging sections are relative to the beginning
17139818Speter     of the section so we begin them at 0.  */
17239818Speter  /* DWARF 1 */
17339818Speter  .debug          0 : { *(.debug) }
17439818Speter  .line           0 : { *(.line) }
17539818Speter  /* GNU DWARF 1 extensions */
17639818Speter  .debug_srcinfo  0 : { *(.debug_srcinfo) }
17739818Speter  .debug_sfnames  0 : { *(.debug_sfnames) }
17839818Speter  /* DWARF 1.1 and DWARF 2 */
17939818Speter  .debug_aranges  0 : { *(.debug_aranges) }
18039818Speter  .debug_pubnames 0 : { *(.debug_pubnames) }
18139818Speter  /* DWARF 2 */
182218822Sdim  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
18339818Speter  .debug_abbrev   0 : { *(.debug_abbrev) }
18439818Speter  .debug_line     0 : { *(.debug_line) }
18539818Speter  .debug_frame    0 : { *(.debug_frame) }
18639818Speter  .debug_str      0 : { *(.debug_str) }
18739818Speter  .debug_loc      0 : { *(.debug_loc) }
18839818Speter  .debug_macinfo  0 : { *(.debug_macinfo) }
18939818Speter  /* SGI/MIPS DWARF 2 extensions */
19039818Speter  .debug_weaknames 0 : { *(.debug_weaknames) }
19139818Speter  .debug_funcnames 0 : { *(.debug_funcnames) }
19239818Speter  .debug_typenames 0 : { *(.debug_typenames) }
19339818Speter  .debug_varnames  0 : { *(.debug_varnames) }
194218822Sdim  /* DWARF 3 */
195218822Sdim  .debug_pubtypes 0 : { *(.debug_pubtypes) }
196218822Sdim  .debug_ranges   0 : { *(.debug_ranges) }
197218822Sdim  .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) }
198218822Sdim  /DISCARD/ : { *(.note.GNU-stack) }
19939818Speter}
200