Adding upstream version 6.00+dfgs.
[syslinux-debian/hramrach.git] / efi / x86_64 / syslinux.ld
blob95160bd743fe44559aa031d34e59143797d01621
1 /* -----------------------------------------------------------------------
2  *   
3  *   Copyright 2008-2009 H. Peter Anvin - All Rights Reserved
4  *   Copyright 2009 Intel Corporation; author: H. Peter Anvin
5  *
6  *   This program is free software; you can redistribute it and/or modify
7  *   it under the terms of the GNU General Public License as published by
8  *   the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
9  *   Boston MA 02110-1301, USA; either version 2 of the License, or
10  *   (at your option) any later version; incorporated herein by reference.
11  *
12  * ----------------------------------------------------------------------- */
15  * Linker script for the SYSLINUX core
16  */
18 OUTPUT_FORMAT("elf64-x86-64", "elf64-x86-64", "elf64-x86-64")
19 OUTPUT_ARCH(i386:x86-64)
20 ENTRY(_start)
22 SECTIONS
24         . = 0;
25         ImageBase = .;          /* For gnu-efi's crt0 */
26         __module_start = .;
27         . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS;
28         .text : {
29                 FILL(0x90909090)
30                 __text_start = .;
31                 *(.text)
32                 *(.text.*)
33                 __text_end = .;
34         }
36         . = ALIGN(16);
38         .rodata : {
39                 __rodata_start = .;
40                 *(.rodata)
41                 *(.rodata.*)
42                 __rodata_end = .;
43         }
45         . = ALIGN(4);
47         .ctors : {
48                 __ctors_start = .;
49                 KEEP (*(SORT(.ctors.*)))
50                 KEEP (*(.ctors))
51                 __ctors_end = .;
52         }
54         .dtors : {
55                 __dtors_start = .;
56                 KEEP (*(SORT(.dtors.*)))
57                 KEEP (*(.dtors))
58                 __dtors_end = .;
59         }
61         . = ALIGN(4096);
62         .rel : {
63                 *(.rel.got)
64                 *(.rel.data)
65                 *(.rel.data.*)
66                 *(.rel.ctors)
67         }
69         . = ALIGN(4);
71         .gnu.hash : {
72                 __gnu_hash_start = .;
73                 *(.gnu.hash)
74                 __gnu_hash_end = .;
75         }
78         .dynsym : {
79                 __dynsym_start = .;
80                 *(.dynsym)
81                 __dynsym_end = .;
82         }
84         . = ALIGN(4);
86         .dynstr : {
87                 __dynstr_start = .;
88                 *(.dynstr)
89                 __dynstr_end = .;
90         }
92         . = ALIGN(4);
94         .dynlink : {
95                 __dynlink_start = .;
96                 *(.dynlink)
97                 __dynlink_end = .;
98         }
100         . = ALIGN(4);
102         .got : {
103                 __got_start = .;
104                 KEEP (*(.got.plt))
105                 KEEP (*(.got))
106                 __got_end = .;
107         }
109         . = ALIGN(4);
111         .dynamic : {
112                 __dynamic_start = .;
113                 *(.dynamic)
114                 __dynamic_end = .;
115         }
117         . = ALIGN(16);
119         .data : {
120                 __data_start = .;
121                 *(.data)
122                 *(.data.*)
123                 *(.lowmem)
124                 __data_end = .;
125         }
127         .reloc : {
128                 *(.reloc)
129         }
131         .symtab : {
132                 *(.symtab)
133         }
135         .strtab : {
136                 *(.strtab)
137         }
139         .bss : {
140                 /* the EFI loader doesn't seem to like a .bss section,
141                    so we stick it all into .data: */
142                 __bss_start = .;
143                 *(.bss)
144                 *(.bss.*)
145                 *(.bss16)
146                 *(.hugebss)
147                 *(COMMON)
148                 __bss_end = .;
149                 *(.sbss)
150                 *(.scommon)
151         }
152         __bss_len = ABSOLUTE(__bss_end) - ABSOLUTE(__bss_start);
153         __bss_dwords = (__bss_len + 3) >> 2;
155         . = ALIGN(128);
156         
157         /* Very large objects which don't need to be zeroed */
159         .hugebss : {
160                 __hugebss_start = .;
161                 *(.hugebss)
162                 *(.hugebss.*)
163                 __hugebss_end = .;
164         }
166         _end = .;
168         /* Stuff we don't need... */
169         /DISCARD/ : {
170                 *(.eh_frame)
171                 *(.comment)
172         }