source: bootcd/isolinux/syslinux-6.03/gpxe/src/arch/i386/scripts/i386.lds

Last change on this file was e16e8f2, checked in by Edwin Eefting <edwin@datux.nl>, 3 years ago

bootstuff

  • Property mode set to 100644
File size: 4.4 KB
Line 
1/* -*- sh -*- */
2
3/*
4 * Linker script for i386 images
5 *
6 */
7
8SECTIONS {
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    /*
28     * The prefix
29     *
30     */
31
32    .prefix 0x0 : AT ( _prefix_lma ) {
33        _prefix = .;
34        *(.prefix)
35        *(.prefix.*)
36        _mprefix = .;
37    } .bss.prefix (NOLOAD) : AT ( _end_lma ) {
38        _eprefix = .;
39    }
40    _prefix_filesz      = ABSOLUTE ( _mprefix - _prefix );
41    _prefix_memsz       = ABSOLUTE ( _eprefix - _prefix );
42
43    /*
44     * The 16-bit (real-mode) code section
45     *
46     */
47
48    .text16 0x0 : AT ( _text16_lma ) {
49        _text16 = .;
50        *(.text16.null)
51        . += 1;                         /* Prevent NULL being valid */
52        *(.text16)
53        *(.text16.*)
54        _mtext16 = .;
55    } .bss.text16 (NOLOAD) : AT ( _end_lma ) {
56        _etext16 = .;
57    }
58    _text16_filesz      = ABSOLUTE ( _mtext16 - _text16 );
59    _text16_memsz       = ABSOLUTE ( _etext16 - _text16 );
60
61    /*
62     * The 16-bit (real-mode) data section
63     *
64     */
65
66    .data16 0x0 : AT ( _data16_lma ) {
67        _data16 = .;
68        . += 1;                         /* Prevent NULL being valid */
69        *(.rodata16)
70        *(.rodata16.*)
71        *(.data16)
72        *(.data16.*)
73        _mdata16 = .;
74    } .bss.data16 (NOLOAD) : AT ( _end_lma ) {
75        *(.bss16)
76        *(.bss16.*)
77        *(.stack16)
78        *(.stack16.*)
79        _edata16 = .;
80    }
81    _data16_filesz      = ABSOLUTE ( _mdata16 - _data16 );
82    _data16_memsz       = ABSOLUTE ( _edata16 - _data16 );
83
84    /*
85     * The 32-bit sections
86     *
87     */
88
89    .textdata 0x0 : AT ( _textdata_lma ) {
90        _textdata = .;
91        *(.text.null_trap)
92        . += 1;                         /* Prevent NULL being valid */
93        *(.text)
94        *(.text.*)
95        *(.rodata)
96        *(.rodata.*)
97        *(.data)
98        *(.data.*)
99        *(SORT(.tbl.*))         /* Various tables.  See include/tables.h */
100        _mtextdata = .;
101    } .bss.textdata (NOLOAD) : AT ( _end_lma ) {
102        *(.bss)
103        *(.bss.*)
104        *(COMMON)
105        *(.stack)
106        *(.stack.*)
107        _etextdata = .;
108    }
109    _textdata_filesz    = ABSOLUTE ( _mtextdata - _textdata );
110    _textdata_memsz     = ABSOLUTE ( _etextdata - _textdata );
111
112    /*
113     * Compressor information block
114     *
115     */
116
117    .zinfo 0x0 : AT ( _zinfo_lma ) {
118        _zinfo = .;
119        *(.zinfo)
120        *(.zinfo.*)
121        _mzinfo = .;
122    } .bss.zinfo (NOLOAD) : AT ( _end_lma ) {
123        _ezinfo = .;
124    }
125    _zinfo_filesz       = ABSOLUTE ( _mzinfo - _zinfo );
126    _zinfo_memsz        = ABSOLUTE ( _ezinfo - _zinfo );
127
128    /*
129     * Weak symbols that need zero values if not otherwise defined
130     *
131     */
132
133    .weak 0x0 : AT ( _end_lma ) {
134        _weak = .;
135        *(.weak)
136        _eweak = .;
137    }
138    _assert = ASSERT ( ( _weak == _eweak ), ".weak is non-zero length" );
139
140    /*
141     * Dispose of the comment and note sections to make the link map
142     * easier to read
143     *
144     */
145
146    /DISCARD/ : {
147        *(.comment)
148        *(.comment.*)
149        *(.note)
150        *(.note.*)
151        *(.eh_frame)
152        *(.eh_frame.*)
153        *(.rel)
154        *(.rel.*)
155        *(.discard)
156    }
157
158    /*
159     * Load address calculations.  In older versions of ld, ALIGN()
160     * can operate only on the location counter, so we use that.
161     *
162     */
163
164    PROVIDE ( _max_align = 16 );
165    .                   = 0;
166
167    .                   = ALIGN ( _max_align );
168    _prefix_lma         = .;
169    .                   += _prefix_filesz;
170
171    .                   = ALIGN ( _max_align );
172    _payload_lma        = .;
173    _text16_lma         = .;
174    .                   += _text16_filesz;
175
176    .                   = ALIGN ( _max_align );
177    _data16_lma         = .;
178    .                   += _data16_filesz;
179
180    .                   = ALIGN ( _max_align );
181    _textdata_lma       = .;
182    .                   += _textdata_filesz;
183
184    _filesz             = .; /* Do not include zinfo block in file size */
185
186    .                   = ALIGN ( _max_align );
187    _zinfo_lma          = .;
188    .                   += _zinfo_filesz;
189
190    .                   = ALIGN ( _max_align );
191    _end_lma            = .;
192
193    /*
194     * Values calculated to save code from doing it
195     *
196     */
197    _prefix_filesz_sect = ( ( _prefix_filesz + 511 ) / 512 );
198    _prefix_memsz_pgh   = ( ( _prefix_memsz + 15 ) / 16 );
199    _prefix_memsz_sect  = ( ( _prefix_memsz + 511 ) / 512 );
200    _text16_memsz_pgh   = ( ( _text16_memsz + 15 ) / 16 );
201    _data16_memsz_pgh   = ( ( _data16_memsz + 15 ) / 16 );
202}
Note: See TracBrowser for help on using the repository browser.