Add qemu 2.4.0
[kvmfornfv.git] / qemu / roms / ipxe / src / arch / i386 / scripts / i386.lds
1 /* -*- ld-script -*- */
2
3 /*
4  * Linker script for i386 images
5  *
6  */
7
8 SECTIONS {
9
10     /* Each section starts at a virtual address of zero.
11      *
12      * We guarantee alignment of virtual addresses to any alignment
13      * specified by the constituent object files (e.g. via
14      * __attribute__((aligned(x)))).  Load addresses are guaranteed
15      * only up to _max_align.  Provided that all loader and relocation
16      * code honours _max_align, this means that physical addresses are
17      * also guaranteed up to _max_align.
18      *
19      * Note that when using -DKEEP_IT_REAL, the UNDI segments are only
20      * guaranteed to be loaded on a paragraph boundary (i.e. 16-byte
21      * alignment).  Using _max_align>16 will therefore not guarantee
22      * >16-byte alignment of physical addresses when -DKEEP_IT_REAL is
23      * used (though virtual addresses will still be fully aligned).
24      *
25      */
26
27     PROVIDE ( _max_align = 16 );
28
29     /*
30      * The prefix
31      *
32      */
33
34     .prefix 0x0 : AT ( _prefix_lma ) {
35         _prefix = .;
36         *(.prefix)
37         *(.prefix.*)
38         _mprefix = .;
39     } .bss.prefix (NOLOAD) : AT ( _end_lma ) {
40         _eprefix = .;
41     }
42     _prefix_filesz      = ABSOLUTE ( _mprefix ) - ABSOLUTE ( _prefix );
43     _prefix_memsz       = ABSOLUTE ( _eprefix ) - ABSOLUTE ( _prefix );
44
45     /*
46      * The 16-bit (real-mode) code section
47      *
48      */
49
50     .text16.early 0x0 : AT ( _text16_early_lma ) {
51         _text16 = .;
52         KEEP(*(.text16.null))
53         KEEP(*(.text16.null.*))
54         . += 1;                         /* Prevent NULL being valid */
55         *(.text16.early)
56         *(.text16.early.*)
57         _etext16_early = .;
58     } .text16.late ALIGN ( _max_align ) : AT ( _text16_late_lma ) {
59         _text16_late = .;
60         *(.text16)
61         *(.text16.*)
62         _mtext16 = .;
63     } .bss.text16 (NOLOAD) : AT ( _end_lma ) {
64         _etext16 = .;
65     }
66     _text16_early_filesz = ABSOLUTE ( _etext16_early ) - ABSOLUTE ( _text16 );
67     _text16_early_memsz = ABSOLUTE ( _etext16_early ) - ABSOLUTE ( _text16 );
68     _text16_late_filesz = ABSOLUTE ( _mtext16 ) - ABSOLUTE ( _text16_late );
69     _text16_late_memsz  = ABSOLUTE ( _etext16 ) - ABSOLUTE ( _text16_late );
70     _text16_memsz       = ABSOLUTE ( _etext16 ) - ABSOLUTE ( _text16 );
71
72     /*
73      * The 16-bit (real-mode) data section
74      *
75      */
76
77     .data16 0x0 : AT ( _data16_lma ) {
78         _data16 = .;
79         . += 1;                         /* Prevent NULL being valid */
80         *(.rodata16)
81         *(.rodata16.*)
82         *(.data16)
83         *(.data16.*)
84         _mdata16 = .;
85     } .bss.data16 (NOLOAD) : AT ( _end_lma ) {
86         *(.bss16)
87         *(.bss16.*)
88         *(.stack16)
89         *(.stack16.*)
90         _edata16 = .;
91     }
92     _data16_filesz      = ABSOLUTE ( _mdata16 ) - ABSOLUTE ( _data16 );
93     _data16_memsz       = ABSOLUTE ( _edata16 ) - ABSOLUTE ( _data16 );
94
95     /*
96      * The 32-bit sections
97      *
98      */
99
100     .textdata 0x0 : AT ( _textdata_lma ) {
101         _textdata = .;
102         KEEP(*(.text.null_trap))
103         KEEP(*(.text.null_trap.*))
104         . += 1;                         /* Prevent NULL being valid */
105         *(.text)
106         *(.text.*)
107         *(.rodata)
108         *(.rodata.*)
109         *(.data)
110         *(.data.*)
111         KEEP(*(SORT(.tbl.*)))   /* Various tables.  See include/tables.h */
112         KEEP(*(.provided))
113         KEEP(*(.provided.*))
114         _mtextdata = .;
115     } .bss.textdata (NOLOAD) : AT ( _end_lma ) {
116         *(.bss)
117         *(.bss.*)
118         *(COMMON)
119         *(.stack)
120         *(.stack.*)
121         _etextdata = .;
122     }
123     _textdata_filesz    = ABSOLUTE ( _mtextdata ) - ABSOLUTE ( _textdata );
124     _textdata_memsz     = ABSOLUTE ( _etextdata ) - ABSOLUTE ( _textdata );
125
126     /*
127      * Payload prefix
128      *
129      * If present, this will be placed between .text16.early and .text16.late.
130      *
131      */
132     .pprefix 0x0 : AT ( _pprefix_lma ) {
133         _pprefix = .;
134         KEEP(*(.pprefix))
135         KEEP(*(.pprefix.*))
136         _mpprefix = .;
137     } .bss.pprefix (NOLOAD) : AT ( _end_lma ) {
138         _epprefix = .;
139     }
140     _pprefix_filesz     = ABSOLUTE ( _mpprefix ) - ABSOLUTE ( _pprefix );
141     _pprefix_memsz      = ABSOLUTE ( _epprefix ) - ABSOLUTE ( _pprefix );
142
143     /*
144      * Compressor information block
145      *
146      */
147
148     .zinfo 0x0 : AT ( _zinfo_lma ) {
149         _zinfo = .;
150         KEEP(*(.zinfo))
151         KEEP(*(.zinfo.*))
152         _mzinfo = .;
153     } .bss.zinfo (NOLOAD) : AT ( _end_lma ) {
154         _ezinfo = .;
155     }
156     _zinfo_filesz       = ABSOLUTE ( _mzinfo ) - ABSOLUTE ( _zinfo );
157     _zinfo_memsz        = ABSOLUTE ( _ezinfo ) - ABSOLUTE ( _zinfo );
158
159     /*
160      * Weak symbols that need zero values if not otherwise defined
161      *
162      */
163
164     .weak 0x0 : AT ( _end_lma ) {
165         _weak = .;
166         *(.weak)
167         *(.weak.*)
168         _eweak = .;
169     }
170     _assert = ASSERT ( ( _weak == _eweak ), ".weak is non-zero length" );
171
172     /*
173      * Dispose of the comment and note sections to make the link map
174      * easier to read
175      *
176      */
177
178     /DISCARD/ : {
179         *(.comment)
180         *(.comment.*)
181         *(.note)
182         *(.note.*)
183         *(.eh_frame)
184         *(.eh_frame.*)
185         *(.rel)
186         *(.rel.*)
187         *(.einfo)
188         *(.einfo.*)
189         *(.discard)
190         *(.discard.*)
191     }
192
193     /*
194      * Load address calculations.  In older versions of ld, ALIGN()
195      * can operate only on the location counter, so we use that.
196      *
197      */
198
199     .                   = 0;
200
201     .                   = ALIGN ( _max_align );
202     _prefix_lma         = .;
203     .                   += _prefix_filesz;
204
205     .                   = ALIGN ( _max_align );
206     _text16_early_lma   = .;
207     .                   += _text16_early_filesz;
208
209     .                   = ALIGN ( _max_align );
210     .                   = ALIGN ( _payload_align );
211     _pprefix_lma        = .;
212     .                   += _pprefix_filesz;
213
214     .                   = ALIGN ( _max_align );
215     _payload_lma        = .;
216     _pprefix_skip       = ABSOLUTE ( _payload_lma ) - ABSOLUTE ( _pprefix_lma );
217     _text16_late_lma    = .;
218     .                   += _text16_late_filesz;
219
220     .                   = ALIGN ( _max_align );
221     _data16_lma         = .;
222     .                   += _data16_filesz;
223
224     .                   = ALIGN ( _max_align );
225     _textdata_lma       = .;
226     .                   += _textdata_filesz;
227
228     _filesz             = .; /* Do not include zinfo block in file size */
229
230     .                   = ALIGN ( _max_align );
231     _zinfo_lma          = .;
232     .                   += _zinfo_filesz;
233
234     .                   = ALIGN ( _max_align );
235     _end_lma            = .;
236
237     /*
238      * Values calculated to save code from doing it
239      *
240      */
241     _text16_memsz_pgh   = ( ( _text16_memsz + 15 ) / 16 );
242     _data16_memsz_pgh   = ( ( _data16_memsz + 15 ) / 16 );
243     _textdata_memsz_pgh = ( ( _textdata_memsz + 15 ) / 16 );
244     _textdata_memsz_kb  = ( ( _textdata_memsz + 1023 ) / 1024 );
245 }