xref: /dflybsd-src/stand/boot/pc32/loader/loader.ldscript (revision 479ab7f0492f2a51b48e8537e4f1dc686fc6014b)
1*479ab7f0SSascha WildnerOUTPUT_FORMAT("elf32-i386", "elf32-i386",
2*479ab7f0SSascha Wildner	      "elf32-i386")
3*479ab7f0SSascha WildnerOUTPUT_ARCH(i386)
4*479ab7f0SSascha WildnerENTRY(_start)
5*479ab7f0SSascha Wildner
6*479ab7f0SSascha WildnerPHDRS
7*479ab7f0SSascha Wildner{
8*479ab7f0SSascha Wildner	text PT_LOAD ;
9*479ab7f0SSascha Wildner	data PT_LOAD ;
10*479ab7f0SSascha Wildner}
11*479ab7f0SSascha Wildner
12*479ab7f0SSascha WildnerSECTIONS
13*479ab7f0SSascha Wildner{
14*479ab7f0SSascha Wildner  . = 0x0;
15*479ab7f0SSascha Wildner  .interp         : { *(.interp) } : text
16*479ab7f0SSascha Wildner  .note.gnu.build-id : { *(.note.gnu.build-id) }
17*479ab7f0SSascha Wildner  .hash           : { *(.hash) }
18*479ab7f0SSascha Wildner  .gnu.hash       : { *(.gnu.hash) }
19*479ab7f0SSascha Wildner  .dynsym         : { *(.dynsym) }
20*479ab7f0SSascha Wildner  .dynstr         : { *(.dynstr) }
21*479ab7f0SSascha Wildner  .gnu.version    : { *(.gnu.version) }
22*479ab7f0SSascha Wildner  .gnu.version_d  : { *(.gnu.version_d) }
23*479ab7f0SSascha Wildner  .gnu.version_r  : { *(.gnu.version_r) }
24*479ab7f0SSascha Wildner  .rel.init       : { *(.rel.init) }
25*479ab7f0SSascha Wildner  .rel.text       : { *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) }
26*479ab7f0SSascha Wildner  .rel.fini       : { *(.rel.fini) }
27*479ab7f0SSascha Wildner  .rel.rodata     : { *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*) }
28*479ab7f0SSascha Wildner  .rel.data.rel.ro   : { *(.rel.data.rel.ro* .rel.gnu.linkonce.d.rel.ro.*) }
29*479ab7f0SSascha Wildner  .rel.data       : { *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) }
30*479ab7f0SSascha Wildner  .rel.tdata	  : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) }
31*479ab7f0SSascha Wildner  .rel.tbss	  : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) }
32*479ab7f0SSascha Wildner  .rel.ctors      : { *(.rel.ctors) }
33*479ab7f0SSascha Wildner  .rel.dtors      : { *(.rel.dtors) }
34*479ab7f0SSascha Wildner  .rel.got        : { *(.rel.got) }
35*479ab7f0SSascha Wildner  .rel.bss        : { *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*) }
36*479ab7f0SSascha Wildner  .rel.ifunc      : { *(.rel.ifunc) }
37*479ab7f0SSascha Wildner  .rel.plt        :
38*479ab7f0SSascha Wildner    {
39*479ab7f0SSascha Wildner      *(.rel.plt)
40*479ab7f0SSascha Wildner      PROVIDE_HIDDEN (__rel_iplt_start = .);
41*479ab7f0SSascha Wildner      *(.rel.iplt)
42*479ab7f0SSascha Wildner      PROVIDE_HIDDEN (__rel_iplt_end = .);
43*479ab7f0SSascha Wildner    }
44*479ab7f0SSascha Wildner  .init           :
45*479ab7f0SSascha Wildner  {
46*479ab7f0SSascha Wildner    KEEP (*(.init))
47*479ab7f0SSascha Wildner  } =0x90909090
48*479ab7f0SSascha Wildner  .plt            : { *(.plt) *(.iplt) }
49*479ab7f0SSascha Wildner  .text           :
50*479ab7f0SSascha Wildner  {
51*479ab7f0SSascha Wildner    *(.text.unlikely .text.*_unlikely)
52*479ab7f0SSascha Wildner    *(.text.exit .text.exit.*)
53*479ab7f0SSascha Wildner    *(.text.startup .text.startup.*)
54*479ab7f0SSascha Wildner    *(.text.hot .text.hot.*)
55*479ab7f0SSascha Wildner    *(.text .stub .text.* .gnu.linkonce.t.*)
56*479ab7f0SSascha Wildner    /* .gnu.warning sections are handled specially by elf32.em.  */
57*479ab7f0SSascha Wildner    *(.gnu.warning)
58*479ab7f0SSascha Wildner  } =0x90909090
59*479ab7f0SSascha Wildner  .fini           :
60*479ab7f0SSascha Wildner  {
61*479ab7f0SSascha Wildner    KEEP (*(.fini))
62*479ab7f0SSascha Wildner  } =0x90909090
63*479ab7f0SSascha Wildner  PROVIDE (__etext = .);
64*479ab7f0SSascha Wildner  PROVIDE (_etext = .);
65*479ab7f0SSascha Wildner  PROVIDE (etext = .);
66*479ab7f0SSascha Wildner  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
67*479ab7f0SSascha Wildner  .rodata1        : { *(.rodata1) }
68*479ab7f0SSascha Wildner  .eh_frame_hdr : { *(.eh_frame_hdr) }
69*479ab7f0SSascha Wildner  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) }
70*479ab7f0SSascha Wildner  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table
71*479ab7f0SSascha Wildner  .gcc_except_table.*) }
72*479ab7f0SSascha Wildner  /* These sections are generated by the Sun/Oracle C++ compiler.  */
73*479ab7f0SSascha Wildner  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges
74*479ab7f0SSascha Wildner  .exception_ranges*) }
75*479ab7f0SSascha Wildner  /* Adjust the address for the data segment.  We want to adjust up to
76*479ab7f0SSascha Wildner     the same address within the page on the next page up.  */
77*479ab7f0SSascha Wildner  . = ALIGN (CONSTANT (MAXPAGESIZE)) - ((CONSTANT (MAXPAGESIZE) - .) & (CONSTANT (MAXPAGESIZE) - 1)); . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE));
78*479ab7f0SSascha Wildner  /* Exception handling  */
79*479ab7f0SSascha Wildner  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) }
80*479ab7f0SSascha Wildner  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
81*479ab7f0SSascha Wildner  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges .exception_ranges*) }
82*479ab7f0SSascha Wildner  /* Thread Local Storage sections  */
83*479ab7f0SSascha Wildner  .tdata	  : { *(.tdata .tdata.* .gnu.linkonce.td.*) }
84*479ab7f0SSascha Wildner  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
85*479ab7f0SSascha Wildner  .preinit_array     :
86*479ab7f0SSascha Wildner  {
87*479ab7f0SSascha Wildner    PROVIDE_HIDDEN (__preinit_array_start = .);
88*479ab7f0SSascha Wildner    KEEP (*(.preinit_array))
89*479ab7f0SSascha Wildner    PROVIDE_HIDDEN (__preinit_array_end = .);
90*479ab7f0SSascha Wildner  }
91*479ab7f0SSascha Wildner  .init_array     :
92*479ab7f0SSascha Wildner  {
93*479ab7f0SSascha Wildner    PROVIDE_HIDDEN (__init_array_start = .);
94*479ab7f0SSascha Wildner    KEEP (*(SORT(.init_array.*)))
95*479ab7f0SSascha Wildner    KEEP (*(.init_array))
96*479ab7f0SSascha Wildner    PROVIDE_HIDDEN (__init_array_end = .);
97*479ab7f0SSascha Wildner  }
98*479ab7f0SSascha Wildner  .fini_array     :
99*479ab7f0SSascha Wildner  {
100*479ab7f0SSascha Wildner    PROVIDE_HIDDEN (__fini_array_start = .);
101*479ab7f0SSascha Wildner    KEEP (*(SORT(.fini_array.*)))
102*479ab7f0SSascha Wildner    KEEP (*(.fini_array))
103*479ab7f0SSascha Wildner    PROVIDE_HIDDEN (__fini_array_end = .);
104*479ab7f0SSascha Wildner  }
105*479ab7f0SSascha Wildner  .ctors          :
106*479ab7f0SSascha Wildner  {
107*479ab7f0SSascha Wildner    /* gcc uses crtbegin.o to find the start of
108*479ab7f0SSascha Wildner       the constructors, so we make sure it is
109*479ab7f0SSascha Wildner       first.  Because this is a wildcard, it
110*479ab7f0SSascha Wildner       doesn't matter if the user does not
111*479ab7f0SSascha Wildner       actually link against crtbegin.o; the
112*479ab7f0SSascha Wildner       linker won't look for a file to match a
113*479ab7f0SSascha Wildner       wildcard.  The wildcard also means that it
114*479ab7f0SSascha Wildner       doesn't matter which directory crtbegin.o
115*479ab7f0SSascha Wildner       is in.  */
116*479ab7f0SSascha Wildner    KEEP (*crtbegin.o(.ctors))
117*479ab7f0SSascha Wildner    KEEP (*crtbegin?.o(.ctors))
118*479ab7f0SSascha Wildner    /* We don't want to include the .ctor section from
119*479ab7f0SSascha Wildner       the crtend.o file until after the sorted ctors.
120*479ab7f0SSascha Wildner       The .ctor section from the crtend file contains the
121*479ab7f0SSascha Wildner       end of ctors marker and it must be last */
122*479ab7f0SSascha Wildner    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
123*479ab7f0SSascha Wildner    KEEP (*(SORT(.ctors.*)))
124*479ab7f0SSascha Wildner    KEEP (*(.ctors))
125*479ab7f0SSascha Wildner  }
126*479ab7f0SSascha Wildner  .dtors          :
127*479ab7f0SSascha Wildner  {
128*479ab7f0SSascha Wildner    KEEP (*crtbegin.o(.dtors))
129*479ab7f0SSascha Wildner    KEEP (*crtbegin?.o(.dtors))
130*479ab7f0SSascha Wildner    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
131*479ab7f0SSascha Wildner    KEEP (*(SORT(.dtors.*)))
132*479ab7f0SSascha Wildner    KEEP (*(.dtors))
133*479ab7f0SSascha Wildner  }
134*479ab7f0SSascha Wildner  .jcr            : { KEEP (*(.jcr)) }
135*479ab7f0SSascha Wildner  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro* .gnu.linkonce.d.rel.ro.*) } :data
136*479ab7f0SSascha Wildner  .dynamic        : { *(.dynamic) }
137*479ab7f0SSascha Wildner  .got            : { *(.got) *(.igot) }
138*479ab7f0SSascha Wildner  . = DATA_SEGMENT_RELRO_END (12, .);
139*479ab7f0SSascha Wildner  .got.plt        : { *(.got.plt)  *(.igot.plt) }
140*479ab7f0SSascha Wildner  .data           :
141*479ab7f0SSascha Wildner  {
142*479ab7f0SSascha Wildner    *(.data .data.* .gnu.linkonce.d.*)
143*479ab7f0SSascha Wildner    SORT(CONSTRUCTORS)
144*479ab7f0SSascha Wildner  }
145*479ab7f0SSascha Wildner  .data1          : { *(.data1) }
146*479ab7f0SSascha Wildner  _edata = .; PROVIDE (edata = .);
147*479ab7f0SSascha Wildner  __bss_start = .;
148*479ab7f0SSascha Wildner  .bss            :
149*479ab7f0SSascha Wildner  {
150*479ab7f0SSascha Wildner   *(.dynbss)
151*479ab7f0SSascha Wildner   *(.bss .bss.* .gnu.linkonce.b.*)
152*479ab7f0SSascha Wildner   *(COMMON)
153*479ab7f0SSascha Wildner   /* Align here to ensure that the .bss section occupies space up to
154*479ab7f0SSascha Wildner      _end.  Align after .bss to ensure correct alignment even if the
155*479ab7f0SSascha Wildner      .bss section disappears because there are no input sections.
156*479ab7f0SSascha Wildner      FIXME: Why do we need it? When there is no .bss section, we don't
157*479ab7f0SSascha Wildner      pad the .data section.  */
158*479ab7f0SSascha Wildner   . = ALIGN(. != 0 ? 32 / 8 : 1);
159*479ab7f0SSascha Wildner  }
160*479ab7f0SSascha Wildner  . = ALIGN(32 / 8);
161*479ab7f0SSascha Wildner  . = ALIGN(32 / 8);
162*479ab7f0SSascha Wildner  _end = .; PROVIDE (end = .);
163*479ab7f0SSascha Wildner  . = DATA_SEGMENT_END (.);
164*479ab7f0SSascha Wildner  /* Stabs debugging sections.  */
165*479ab7f0SSascha Wildner  .stab          0 : { *(.stab) }
166*479ab7f0SSascha Wildner  .stabstr       0 : { *(.stabstr) }
167*479ab7f0SSascha Wildner  .stab.excl     0 : { *(.stab.excl) }
168*479ab7f0SSascha Wildner  .stab.exclstr  0 : { *(.stab.exclstr) }
169*479ab7f0SSascha Wildner  .stab.index    0 : { *(.stab.index) }
170*479ab7f0SSascha Wildner  .stab.indexstr 0 : { *(.stab.indexstr) }
171*479ab7f0SSascha Wildner  .comment       0 : { *(.comment) }
172*479ab7f0SSascha Wildner  /* DWARF debug sections.
173*479ab7f0SSascha Wildner     Symbols in the DWARF debugging sections are relative to the beginning
174*479ab7f0SSascha Wildner     of the section so we begin them at 0.  */
175*479ab7f0SSascha Wildner  /* DWARF 1 */
176*479ab7f0SSascha Wildner  .debug          0 : { *(.debug) }
177*479ab7f0SSascha Wildner  .line           0 : { *(.line) }
178*479ab7f0SSascha Wildner  /* GNU DWARF 1 extensions */
179*479ab7f0SSascha Wildner  .debug_srcinfo  0 : { *(.debug_srcinfo) }
180*479ab7f0SSascha Wildner  .debug_sfnames  0 : { *(.debug_sfnames) }
181*479ab7f0SSascha Wildner  /* DWARF 1.1 and DWARF 2 */
182*479ab7f0SSascha Wildner  .debug_aranges  0 : { *(.debug_aranges) }
183*479ab7f0SSascha Wildner  .debug_pubnames 0 : { *(.debug_pubnames) }
184*479ab7f0SSascha Wildner  /* DWARF 2 */
185*479ab7f0SSascha Wildner  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
186*479ab7f0SSascha Wildner  .debug_abbrev   0 : { *(.debug_abbrev) }
187*479ab7f0SSascha Wildner  .debug_line     0 : { *(.debug_line) }
188*479ab7f0SSascha Wildner  .debug_frame    0 : { *(.debug_frame) }
189*479ab7f0SSascha Wildner  .debug_str      0 : { *(.debug_str) }
190*479ab7f0SSascha Wildner  .debug_loc      0 : { *(.debug_loc) }
191*479ab7f0SSascha Wildner  .debug_macinfo  0 : { *(.debug_macinfo) }
192*479ab7f0SSascha Wildner  /* SGI/MIPS DWARF 2 extensions */
193*479ab7f0SSascha Wildner  .debug_weaknames 0 : { *(.debug_weaknames) }
194*479ab7f0SSascha Wildner  .debug_funcnames 0 : { *(.debug_funcnames) }
195*479ab7f0SSascha Wildner  .debug_typenames 0 : { *(.debug_typenames) }
196*479ab7f0SSascha Wildner  .debug_varnames  0 : { *(.debug_varnames) }
197*479ab7f0SSascha Wildner  /* DWARF 3 */
198*479ab7f0SSascha Wildner  .debug_pubtypes 0 : { *(.debug_pubtypes) }
199*479ab7f0SSascha Wildner  .debug_ranges   0 : { *(.debug_ranges) }
200*479ab7f0SSascha Wildner  .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) }
201*479ab7f0SSascha Wildner  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
202*479ab7f0SSascha Wildner}
203