711bcf7b3ed856cad139b43a41301c30b18cde28
[people/asdlkf/gpxe.git] / src / arch / i386 / core / start16z.lds
1 OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386")
2 OUTPUT_ARCH(i386)
3
4 /* Linker-generated symbols are prefixed with a double underscore.
5  * Decompressor symbols are prefixed with __decompressor_.  All other
6  * symbols are the same as in the original object file, i.e. the
7  * runtime addresses.
8  */
9
10 ENTRY(_start16)
11
12 SECTIONS {
13         .text : {
14                 *(.text)
15         }
16         .payload : {
17                 __payload_start = .;
18                 *(.data)
19                 __payload_end = .;
20         }
21
22         /* _payload_size is the size of the binary image appended to
23          * start16, in bytes.
24          */
25         __payload_size = __payload_end - __payload_start ;
26
27         /* _size is the size of the runtime image
28          * (start32 + the C code), in bytes.
29          */
30         __size = _end - _start ;
31
32         /* _decompressor_size is the size of the decompressor, in
33          * bytes.  For a non-compressed image, start16.lds sets
34          * _decompressor_uncompressed = _decompressor__start = 0.
35          */
36         __decompressor_size = __decompressor_uncompressed - __decompressor__start ;
37
38         /* image__size is the total size of the image, after
39          * decompression and including the decompressor if applicable.
40          * It is therefore the amount of memory that start16's payload
41          * needs in order to execute, in bytes.
42          */
43         __image_size = __size + __decompressor_size ;
44
45         /* Amount to add to runtime symbols to obtain the offset of
46          * that symbol within the image.
47          */
48         __offset_adjust = __decompressor_size - _start ;
49
50         /* Calculations for the stack
51          */
52         __stack_size = _estack - _stack ;
53         __offset_stack = _stack + __offset_adjust ;
54
55         /* Some symbols will be larger than 16 bits but guaranteed to
56          * be multiples of 16.  We calculate them in paragraphs and
57          * export these symbols which can be used in 16-bit code
58          * without risk of overflow.
59          */
60         __image_size_pgh = ( __image_size / 16 );
61         __start_pgh = ( _start / 16 );
62         __decompressor_size_pgh = ( __decompressor_size / 16 );
63         __offset_stack_pgh = ( __offset_stack / 16 );
64 }
65