Statistics
| Branch: | Revision:

root / x86_64.ld @ a9899996

History | View | Annotate | Download (6.6 kB)

1 bc51c5c9 bellard
/* Default linker script, for normal executables */
2 bc51c5c9 bellard
OUTPUT_FORMAT("elf64-x86-64", "elf64-x86-64", "elf64-x86-64")
3 bc51c5c9 bellard
OUTPUT_ARCH(i386:x86-64)
4 bc51c5c9 bellard
ENTRY(_start)
5 bc51c5c9 bellard
SECTIONS
6 bc51c5c9 bellard
{
7 bc51c5c9 bellard
  /* Read-only sections, merged into text segment: */
8 bc51c5c9 bellard
  . = 0x60000000 + SIZEOF_HEADERS;
9 bc51c5c9 bellard
  .interp         : { *(.interp) }
10 bc51c5c9 bellard
  .hash           : { *(.hash) }
11 bc51c5c9 bellard
  .dynsym         : { *(.dynsym) }
12 bc51c5c9 bellard
  .dynstr         : { *(.dynstr) }
13 bc51c5c9 bellard
  .gnu.version    : { *(.gnu.version) }
14 bc51c5c9 bellard
  .gnu.version_d  : { *(.gnu.version_d) }
15 bc51c5c9 bellard
  .gnu.version_r  : { *(.gnu.version_r) }
16 bc51c5c9 bellard
  .rel.init       : { *(.rel.init) }
17 bc51c5c9 bellard
  .rela.init      : { *(.rela.init) }
18 bc51c5c9 bellard
  .rel.text       : { *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) }
19 bc51c5c9 bellard
  .rela.text      : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) }
20 bc51c5c9 bellard
  .rel.fini       : { *(.rel.fini) }
21 bc51c5c9 bellard
  .rela.fini      : { *(.rela.fini) }
22 bc51c5c9 bellard
  .rel.rodata     : { *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*) }
23 bc51c5c9 bellard
  .rela.rodata    : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) }
24 bc51c5c9 bellard
  .rel.data       : { *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) }
25 bc51c5c9 bellard
  .rela.data      : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) }
26 bc51c5c9 bellard
  .rel.tdata	  : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) }
27 bc51c5c9 bellard
  .rela.tdata	  : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) }
28 bc51c5c9 bellard
  .rel.tbss	  : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) }
29 bc51c5c9 bellard
  .rela.tbss	  : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) }
30 bc51c5c9 bellard
  .rel.ctors      : { *(.rel.ctors) }
31 bc51c5c9 bellard
  .rela.ctors     : { *(.rela.ctors) }
32 bc51c5c9 bellard
  .rel.dtors      : { *(.rel.dtors) }
33 bc51c5c9 bellard
  .rela.dtors     : { *(.rela.dtors) }
34 bc51c5c9 bellard
  .rel.got        : { *(.rel.got) }
35 bc51c5c9 bellard
  .rela.got       : { *(.rela.got) }
36 bc51c5c9 bellard
  .rel.bss        : { *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*) }
37 bc51c5c9 bellard
  .rela.bss       : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) }
38 845f2c28 Loïc Minier
  .rel.plt      :
39 845f2c28 Loïc Minier
  {
40 845f2c28 Loïc Minier
    *(.rel.plt)
41 845f2c28 Loïc Minier
    PROVIDE_HIDDEN (__rel_iplt_start = .);
42 845f2c28 Loïc Minier
    *(.rel.iplt)
43 845f2c28 Loïc Minier
    PROVIDE_HIDDEN (__rel_iplt_end = .);
44 845f2c28 Loïc Minier
  }
45 845f2c28 Loïc Minier
  .rela.plt       :
46 845f2c28 Loïc Minier
  {
47 845f2c28 Loïc Minier
    *(.rela.plt)
48 845f2c28 Loïc Minier
    PROVIDE_HIDDEN (__rela_iplt_start = .);
49 845f2c28 Loïc Minier
    *(.rela.iplt)
50 845f2c28 Loïc Minier
    PROVIDE_HIDDEN (__rela_iplt_end = .);
51 845f2c28 Loïc Minier
  }
52 bc51c5c9 bellard
  .init           :
53 bc51c5c9 bellard
  {
54 bc51c5c9 bellard
    KEEP (*(.init))
55 bc51c5c9 bellard
  } =0x90909090
56 bc51c5c9 bellard
  .plt            : { *(.plt) }
57 bc51c5c9 bellard
  .text           :
58 bc51c5c9 bellard
  {
59 bc51c5c9 bellard
    *(.text .stub .text.* .gnu.linkonce.t.*)
60 bc51c5c9 bellard
    /* .gnu.warning sections are handled specially by elf32.em.  */
61 bc51c5c9 bellard
    *(.gnu.warning)
62 bc51c5c9 bellard
  } =0x90909090
63 bc51c5c9 bellard
  .fini           :
64 bc51c5c9 bellard
  {
65 bc51c5c9 bellard
    KEEP (*(.fini))
66 bc51c5c9 bellard
  } =0x90909090
67 bc51c5c9 bellard
  PROVIDE (__etext = .);
68 bc51c5c9 bellard
  PROVIDE (_etext = .);
69 bc51c5c9 bellard
  PROVIDE (etext = .);
70 bc51c5c9 bellard
  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
71 bc51c5c9 bellard
  .rodata1        : { *(.rodata1) }
72 bc51c5c9 bellard
  .eh_frame_hdr : { *(.eh_frame_hdr) }
73 bc51c5c9 bellard
  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) }
74 bc51c5c9 bellard
  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table) }
75 bc51c5c9 bellard
  /* Adjust the address for the data segment.  We want to adjust up to
76 bc51c5c9 bellard
     the same address within the page on the next page up.  */
77 bc51c5c9 bellard
  . = ALIGN (0x100000) - ((0x100000 - .) & (0x100000 - 1)); . = DATA_SEGMENT_ALIGN (0x100000, 0x1000);
78 bc51c5c9 bellard
  /* Ensure the __preinit_array_start label is properly aligned.  We
79 bc51c5c9 bellard
     could instead move the label definition inside the section, but
80 bc51c5c9 bellard
     the linker would then create the section even if it turns out to
81 bc51c5c9 bellard
     be empty, which isn't pretty.  */
82 bc51c5c9 bellard
  . = ALIGN(64 / 8);
83 bc51c5c9 bellard
  PROVIDE (__preinit_array_start = .);
84 bc51c5c9 bellard
  .preinit_array     : { *(.preinit_array) }
85 bc51c5c9 bellard
  PROVIDE (__preinit_array_end = .);
86 bc51c5c9 bellard
  PROVIDE (__init_array_start = .);
87 bc51c5c9 bellard
  .init_array     : { *(.init_array) }
88 bc51c5c9 bellard
  PROVIDE (__init_array_end = .);
89 bc51c5c9 bellard
  PROVIDE (__fini_array_start = .);
90 bc51c5c9 bellard
  .fini_array     : { *(.fini_array) }
91 bc51c5c9 bellard
  PROVIDE (__fini_array_end = .);
92 bc51c5c9 bellard
  .data           :
93 bc51c5c9 bellard
  {
94 bc51c5c9 bellard
    *(.data .data.* .gnu.linkonce.d.*)
95 bc51c5c9 bellard
    SORT(CONSTRUCTORS)
96 bc51c5c9 bellard
  }
97 bc51c5c9 bellard
  .data1          : { *(.data1) }
98 bc51c5c9 bellard
  .tdata	  : { *(.tdata .tdata.* .gnu.linkonce.td.*) }
99 bc51c5c9 bellard
  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
100 bc51c5c9 bellard
  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) }
101 bc51c5c9 bellard
  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table) }
102 bc51c5c9 bellard
  .dynamic        : { *(.dynamic) }
103 bc51c5c9 bellard
  .ctors          :
104 bc51c5c9 bellard
  {
105 bc51c5c9 bellard
    /* gcc uses crtbegin.o to find the start of
106 bc51c5c9 bellard
       the constructors, so we make sure it is
107 bc51c5c9 bellard
       first.  Because this is a wildcard, it
108 bc51c5c9 bellard
       doesn't matter if the user does not
109 bc51c5c9 bellard
       actually link against crtbegin.o; the
110 bc51c5c9 bellard
       linker won't look for a file to match a
111 bc51c5c9 bellard
       wildcard.  The wildcard also means that it
112 bc51c5c9 bellard
       doesn't matter which directory crtbegin.o
113 bc51c5c9 bellard
       is in.  */
114 bc51c5c9 bellard
    KEEP (*crtbegin.o(.ctors))
115 bc51c5c9 bellard
    /* We don't want to include the .ctor section from
116 bc51c5c9 bellard
       from the crtend.o file until after the sorted ctors.
117 bc51c5c9 bellard
       The .ctor section from the crtend file contains the
118 bc51c5c9 bellard
       end of ctors marker and it must be last */
119 bc51c5c9 bellard
    KEEP (*(EXCLUDE_FILE (*crtend.o ) .ctors))
120 bc51c5c9 bellard
    KEEP (*(SORT(.ctors.*)))
121 bc51c5c9 bellard
    KEEP (*(.ctors))
122 bc51c5c9 bellard
  }
123 bc51c5c9 bellard
  .dtors          :
124 bc51c5c9 bellard
  {
125 bc51c5c9 bellard
    KEEP (*crtbegin.o(.dtors))
126 bc51c5c9 bellard
    KEEP (*(EXCLUDE_FILE (*crtend.o ) .dtors))
127 bc51c5c9 bellard
    KEEP (*(SORT(.dtors.*)))
128 bc51c5c9 bellard
    KEEP (*(.dtors))
129 bc51c5c9 bellard
  }
130 bc51c5c9 bellard
  .jcr            : { KEEP (*(.jcr)) }
131 bc51c5c9 bellard
  .got            : { *(.got.plt) *(.got) }
132 bc51c5c9 bellard
  _edata = .;
133 bc51c5c9 bellard
  PROVIDE (edata = .);
134 bc51c5c9 bellard
  __bss_start = .;
135 bc51c5c9 bellard
  .bss            :
136 bc51c5c9 bellard
  {
137 bc51c5c9 bellard
   *(.dynbss)
138 bc51c5c9 bellard
   *(.bss .bss.* .gnu.linkonce.b.*)
139 bc51c5c9 bellard
   *(COMMON)
140 bc51c5c9 bellard
   /* Align here to ensure that the .bss section occupies space up to
141 bc51c5c9 bellard
      _end.  Align after .bss to ensure correct alignment even if the
142 bc51c5c9 bellard
      .bss section disappears because there are no input sections.  */
143 bc51c5c9 bellard
   . = ALIGN(64 / 8);
144 bc51c5c9 bellard
  }
145 bc51c5c9 bellard
  . = ALIGN(64 / 8);
146 bc51c5c9 bellard
  _end = .;
147 bc51c5c9 bellard
  PROVIDE (end = .);
148 bc51c5c9 bellard
  . = DATA_SEGMENT_END (.);
149 bc51c5c9 bellard
  /* Stabs debugging sections.  */
150 bc51c5c9 bellard
  .stab          0 : { *(.stab) }
151 bc51c5c9 bellard
  .stabstr       0 : { *(.stabstr) }
152 bc51c5c9 bellard
  .stab.excl     0 : { *(.stab.excl) }
153 bc51c5c9 bellard
  .stab.exclstr  0 : { *(.stab.exclstr) }
154 bc51c5c9 bellard
  .stab.index    0 : { *(.stab.index) }
155 bc51c5c9 bellard
  .stab.indexstr 0 : { *(.stab.indexstr) }
156 bc51c5c9 bellard
  .comment       0 : { *(.comment) }
157 bc51c5c9 bellard
  /* DWARF debug sections.
158 bc51c5c9 bellard
     Symbols in the DWARF debugging sections are relative to the beginning
159 bc51c5c9 bellard
     of the section so we begin them at 0.  */
160 bc51c5c9 bellard
  /* DWARF 1 */
161 bc51c5c9 bellard
  .debug          0 : { *(.debug) }
162 bc51c5c9 bellard
  .line           0 : { *(.line) }
163 bc51c5c9 bellard
  /* GNU DWARF 1 extensions */
164 bc51c5c9 bellard
  .debug_srcinfo  0 : { *(.debug_srcinfo) }
165 bc51c5c9 bellard
  .debug_sfnames  0 : { *(.debug_sfnames) }
166 bc51c5c9 bellard
  /* DWARF 1.1 and DWARF 2 */
167 bc51c5c9 bellard
  .debug_aranges  0 : { *(.debug_aranges) }
168 bc51c5c9 bellard
  .debug_pubnames 0 : { *(.debug_pubnames) }
169 bc51c5c9 bellard
  /* DWARF 2 */
170 bc51c5c9 bellard
  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
171 bc51c5c9 bellard
  .debug_abbrev   0 : { *(.debug_abbrev) }
172 bc51c5c9 bellard
  .debug_line     0 : { *(.debug_line) }
173 bc51c5c9 bellard
  .debug_frame    0 : { *(.debug_frame) }
174 bc51c5c9 bellard
  .debug_str      0 : { *(.debug_str) }
175 bc51c5c9 bellard
  .debug_loc      0 : { *(.debug_loc) }
176 bc51c5c9 bellard
  .debug_macinfo  0 : { *(.debug_macinfo) }
177 bc51c5c9 bellard
  /* SGI/MIPS DWARF 2 extensions */
178 bc51c5c9 bellard
  .debug_weaknames 0 : { *(.debug_weaknames) }
179 bc51c5c9 bellard
  .debug_funcnames 0 : { *(.debug_funcnames) }
180 bc51c5c9 bellard
  .debug_typenames 0 : { *(.debug_typenames) }
181 bc51c5c9 bellard
  .debug_varnames  0 : { *(.debug_varnames) }
182 bc51c5c9 bellard
}