1 OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386")
14 _prefix_size = _prefix_end - _prefix_start;
26 _compressed_size = _compressed_end - _compressed;
32 /* Size of the core of etherboot in memory */
33 _base_size = _end - _text;
35 /* _prefix_size is the length of the non-core etherboot prefix */
36 _prefix_size = _prefix_end - _prefix_start;
38 /* _verbatim_size is the actual amount that has to be copied to base memory */
39 _verbatim_size = _verbatim_end - _verbatim_start;
41 /* _image_size is the amount of base memory needed to run */
42 _image_size = _base_size + _prefix_size;
44 /* Standard sizes rounded up to paragraphs */
45 _prefix_size_pgh = (_prefix_size + 15) / 16;
46 _verbatim_size_pgh = (_verbatim_size + 15) / 16;
47 _image_size_pgh = (_image_size + 15) / 16 ;
49 /* Standard sizes in sectors */
50 _prefix_size_sct = (_prefix_size + 511) / 512;
51 _verbatim_size_sct = (_verbatim_size + 511) / 512;
52 _image_size_sct = (_image_size + 511) / 512;
54 /* Symbol offsets and sizes for the exe prefix */
56 _exe_size = _verbatim_size; /* Should this be - 32 to exclude the header? */
57 _exe_size_tail = (_exe_size) % 512;
58 _exe_size_pages = ((_exe_size) + 511) / 512;
59 _exe_bss_size = ((_image_size - _verbatim_size) + 15) / 16;
60 _exe_ss_offset = (_stack_offset + _prefix_size - _exe_hdr_size + 15) / 16 ;
62 /* This is where we copy the compressed image before decompression.
63 * Prepare to decompress in place. The end mark is about 8.25 bytes long,
64 * and the worst case symbol is about 16.5 bytes long. Therefore
65 * We need to reserve at least 25 bytes of slack here.
66 * Currently I reserve 2048 bytes of just slack to be safe :)
67 * 2048 bytes easily falls within the BSS (the defualt stack is 4096 bytes)
68 * so we really are decompressing in place.
70 * Hmm. I missed a trick. In the very worst case (no compression)
71 * the encoded data is 9/8 the size as it started out so to be completely
72 * safe I need to be 1/8 of the uncompressed code size past the end.
73 * This will still fit compfortably into our bss in any conceivable scenario.
75 _compressed_copy = _edata + _prefix_size - _compressed_size +
76 /* The amount to overflow _edata */
77 MAX( ((_edata - _text + 7) / 8) , 2016 ) + 32;
78 _assert = ASSERT( ( _compressed_copy - _prefix_size ) < _ebss , "Cannot decompress in place" ) ;
80 decompress = DEFINED(decompress) ? decompress : 0;
86 /* Symbols used by the prefixes whose addresses are inconvinient
87 * to compute, at runtime in the code.
89 image_basemem_size = DEFINED(image_basemem_size)? image_basemem_size : 65536;
90 image_basemem = DEFINED(image_basemem)? image_basemem : 65536;
91 _prefix_real_to_prot = _real_to_prot + _prefix_size ;
92 _prefix_prot_to_real = _prot_to_real + _prefix_size ;
93 _prefix_image_basemem_size = image_basemem_size + _prefix_size ;
94 _prefix_image_basemem = image_basemem + _prefix_size ;
95 _prefix_rm_in_call = _rm_in_call + _prefix_size ;
96 _prefix_in_call = _in_call + _prefix_size ;
97 _prefix_rom = rom + _prefix_size ;
98 _prefix_rm_etherboot_location = rm_etherboot_location + _prefix_size ;
99 _prefix_stack_end = _stack_end + _prefix_size ;