These changes are the raw update to qemu-2.6.
[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      * Allow decompressor to require a minimum amount of temporary stack
31      * space.
32      *
33      */
34     PROVIDE ( _min_decompress_stack = 0 );
35
36     /*
37      * The prefix
38      *
39      */
40
41     .prefix 0x0 : AT ( _prefix_lma ) {
42         _prefix = .;
43         *(.prefix)
44         *(SORT(.pci_devlist.*))
45         *(.prefix.*)
46         _mprefix = .;
47     } .bss.prefix (NOLOAD) : AT ( _end_lma ) {
48         _eprefix = .;
49     }
50     _prefix_filesz      = ABSOLUTE ( _mprefix ) - ABSOLUTE ( _prefix );
51     _prefix_memsz       = ABSOLUTE ( _eprefix ) - ABSOLUTE ( _prefix );
52
53     /*
54      * The 16-bit (real-mode) code section
55      *
56      */
57
58     .text16.early 0x0 : AT ( _text16_early_lma ) {
59         _text16 = .;
60         KEEP(*(.text16.null))
61         KEEP(*(.text16.null.*))
62         . += 1;                         /* Prevent NULL being valid */
63         *(.text16.early)
64         *(.text16.early.*)
65         _etext16_early = .;
66     } .text16.late ALIGN ( _max_align ) : AT ( _text16_late_lma ) {
67         _text16_late = .;
68         *(.text16)
69         *(.text16.*)
70         _mtext16 = .;
71     } .bss.text16 (NOLOAD) : AT ( _end_lma ) {
72         _etext16 = .;
73     }
74     _text16_early_filesz = ABSOLUTE ( _etext16_early ) - ABSOLUTE ( _text16 );
75     _text16_early_memsz = ABSOLUTE ( _etext16_early ) - ABSOLUTE ( _text16 );
76     _text16_late_filesz = ABSOLUTE ( _mtext16 ) - ABSOLUTE ( _text16_late );
77     _text16_late_memsz  = ABSOLUTE ( _etext16 ) - ABSOLUTE ( _text16_late );
78     _text16_memsz       = ABSOLUTE ( _etext16 ) - ABSOLUTE ( _text16 );
79
80     /*
81      * The 16-bit (real-mode) data section
82      *
83      */
84
85     .data16 0x0 : AT ( _data16_lma ) {
86         _data16 = .;
87         . += 1;                         /* Prevent NULL being valid */
88         *(.rodata16)
89         *(.rodata16.*)
90         *(.data16)
91         *(.data16.*)
92         _mdata16 = .;
93     } .bss.data16 (NOLOAD) : AT ( _end_lma ) {
94         *(.bss16)
95         *(.bss16.*)
96         *(.stack16)
97         *(.stack16.*)
98         . = MAX ( ., _mdata16 + _min_decompress_stack );
99         _edata16 = .;
100     }
101     _data16_filesz      = ABSOLUTE ( _mdata16 ) - ABSOLUTE ( _data16 );
102     _data16_memsz       = ABSOLUTE ( _edata16 ) - ABSOLUTE ( _data16 );
103
104     /*
105      * The 32-bit sections
106      *
107      */
108
109     .textdata 0x0 : AT ( _textdata_lma ) {
110         _textdata = .;
111         KEEP(*(.text.null_trap))
112         KEEP(*(.text.null_trap.*))
113         . += 1;                         /* Prevent NULL being valid */
114         *(.text)
115         *(.text.*)
116         *(.rodata)
117         *(.rodata.*)
118         *(.data)
119         *(.data.*)
120         KEEP(*(SORT(.tbl.*)))   /* Various tables.  See include/tables.h */
121         KEEP(*(.provided))
122         KEEP(*(.provided.*))
123         _mtextdata = .;
124     } .bss.textdata (NOLOAD) : AT ( _end_lma ) {
125         *(.bss)
126         *(.bss.*)
127         *(COMMON)
128         *(.stack)
129         *(.stack.*)
130         _etextdata = .;
131     }
132     _textdata_filesz    = ABSOLUTE ( _mtextdata ) - ABSOLUTE ( _textdata );
133     _textdata_memsz     = ABSOLUTE ( _etextdata ) - ABSOLUTE ( _textdata );
134
135     /*
136      * Payload prefix
137      *
138      * If present, this will be placed between .text16.early and .text16.late.
139      *
140      */
141     .pprefix 0x0 : AT ( _pprefix_lma ) {
142         _pprefix = .;
143         KEEP(*(.pprefix))
144         KEEP(*(.pprefix.*))
145         _mpprefix = .;
146     } .bss.pprefix (NOLOAD) : AT ( _end_lma ) {
147         _epprefix = .;
148     }
149     _pprefix_filesz     = ABSOLUTE ( _mpprefix ) - ABSOLUTE ( _pprefix );
150     _pprefix_memsz      = ABSOLUTE ( _epprefix ) - ABSOLUTE ( _pprefix );
151
152     /*
153      * Compressor information block
154      *
155      */
156
157     .zinfo 0x0 : AT ( _zinfo_lma ) {
158         _zinfo = .;
159         KEEP(*(.zinfo))
160         KEEP(*(.zinfo.*))
161         _mzinfo = .;
162     } .bss.zinfo (NOLOAD) : AT ( _end_lma ) {
163         _ezinfo = .;
164     }
165     _zinfo_filesz       = ABSOLUTE ( _mzinfo ) - ABSOLUTE ( _zinfo );
166     _zinfo_memsz        = ABSOLUTE ( _ezinfo ) - ABSOLUTE ( _zinfo );
167
168     /*
169      * Weak symbols that need zero values if not otherwise defined
170      *
171      */
172
173     .weak 0x0 : AT ( _end_lma ) {
174         _weak = .;
175         *(.weak)
176         *(.weak.*)
177         _eweak = .;
178     }
179     _assert = ASSERT ( ( _weak == _eweak ), ".weak is non-zero length" );
180
181     /*
182      * Dispose of the comment and note sections to make the link map
183      * easier to read
184      *
185      */
186
187     /DISCARD/ : {
188         *(.comment)
189         *(.comment.*)
190         *(.note)
191         *(.note.*)
192         *(.eh_frame)
193         *(.eh_frame.*)
194         *(.rel)
195         *(.rel.*)
196         *(.einfo)
197         *(.einfo.*)
198         *(.discard)
199         *(.discard.*)
200     }
201
202     /*
203      * Load address calculations.  In older versions of ld, ALIGN()
204      * can operate only on the location counter, so we use that.
205      *
206      */
207
208     .                   = 0;
209
210     .                   = ALIGN ( _max_align );
211     _prefix_lma         = .;
212     .                   += _prefix_filesz;
213
214     .                   = ALIGN ( _max_align );
215     _text16_early_lma   = .;
216     .                   += _text16_early_filesz;
217
218     .                   = ALIGN ( _max_align );
219     .                   = ALIGN ( _payload_align );
220     _pprefix_lma        = .;
221     .                   += _pprefix_filesz;
222
223     .                   = ALIGN ( _max_align );
224     _payload_lma        = .;
225     _pprefix_skip       = ABSOLUTE ( _payload_lma ) - ABSOLUTE ( _pprefix_lma );
226     _text16_late_lma    = .;
227     .                   += _text16_late_filesz;
228
229     .                   = ALIGN ( _max_align );
230     _data16_lma         = .;
231     .                   += _data16_filesz;
232
233     .                   = ALIGN ( _max_align );
234     _textdata_lma       = .;
235     .                   += _textdata_filesz;
236
237     _filesz             = .; /* Do not include zinfo block in file size */
238
239     .                   = ALIGN ( _max_align );
240     _zinfo_lma          = .;
241     .                   += _zinfo_filesz;
242
243     .                   = ALIGN ( _max_align );
244     _end_lma            = .;
245
246     /*
247      * Values calculated to save code from doing it
248      *
249      */
250     _text16_memsz_pgh   = ( ( _text16_memsz + 15 ) / 16 );
251     _data16_memsz_pgh   = ( ( _data16_memsz + 15 ) / 16 );
252     _textdata_memsz_pgh = ( ( _textdata_memsz + 15 ) / 16 );
253     _textdata_memsz_kb  = ( ( _textdata_memsz + 1023 ) / 1024 );
254 }