117 lines
2.5 KiB
Plaintext
Raw Normal View History

SECTIONS {
/* Align sections to keep PE tools happy */
alignment = 16;
/* Virtual addresses start at 0x20000 */
. = 0x20000;
_start = .;
/* bzImage prefix */
_prefix_pos = 0;
.prefix : AT ( _prefix_pos ) {
_prefix = .;
*(.prefix)
*(.prefix.*)
. = ALIGN ( alignment );
_eprefix = .;
}
_prefix_len = ABSOLUTE ( _eprefix ) - ABSOLUTE ( _prefix );
/* Real-mode uninitialised data section */
.bss16 ( NOLOAD ) : {
_bss16 = .;
*(.stack16)
*(.stack16.*)
*(.bss16)
*(.bss16.*)
. = ALIGN ( alignment );
_ebss16 = .;
}
_bss16_len = ABSOLUTE ( _ebss16 ) - ABSOLUTE ( _bss16 );
/* Payload section */
_payload_pos = ( _prefix_pos + _prefix_len );
.payload : AT ( _payload_pos ) {
_payload = .;
/* Portions that must be accessible in 16-bit modes */
_text16 = .;
*(.text16)
*(.text16.*)
_etext16 = .;
_data16 = .;
*(.rodata16)
*(.rodata16.*)
*(.data16)
*(.data16.*)
_edata16 = .;
/* Portions that need not be accessible in 16-bit modes */
_text = .;
*(.text)
*(.text.*)
_etext = .;
_data = .;
*(.rodata)
*(.rodata.*)
*(.data)
*(.data.*)
. = ALIGN ( alignment );
_edata = .;
_epayload = .;
}
_text16_len = ABSOLUTE ( _etext16 ) - ABSOLUTE ( _text16 );
_data16_len = ABSOLUTE ( _edata16 ) - ABSOLUTE ( _data16 );
_text_len = ABSOLUTE ( _etext ) - ABSOLUTE ( _text );
_data_len = ABSOLUTE ( _edata ) - ABSOLUTE ( _data );
_payload_len = ABSOLUTE ( _epayload ) - ABSOLUTE ( _payload );
/* bootmgr.exe hardcodes the address 0x30000 for use as a
* buffer accessible by real-mode code. We can't fit our
* .text, .data, and .bss below this region, so explicitly
* place the .bss higher in memory.
*/
_forbidden_start = 0x30000;
_forbidden_end = 0x40000;
/* Uninitialised data section */
.bss ( NOLOAD ) : {
_bss = .;
ASSERT ( ABSOLUTE ( . ) <= ABSOLUTE ( _forbidden_start ),
"Binary is too large" );
. = ABSOLUTE ( _forbidden_end );
*(.bss)
*(.bss.*)
*(COMMON)
*(.stack)
*(.stack.*)
. = ALIGN ( alignment );
_ebss = .;
}
_bss_len = ABSOLUTE ( _ebss ) - ABSOLUTE ( _bss );
/* Relocations section */
_reloc_pos = ( _payload_pos + _payload_len );
_reloc = .;
_end = .;
_text_total_len = ( _text_len + _text16_len );
_data_total_len = ( _data_len + _data16_len );
_bss_total_len = ( _bss_len + _bss16_len );
/* Symbols required by i386.x86_64 objects */
__i386__start = _start;
__i386__end = _end;
/DISCARD/ : {
*(.comment)
*(.comment.*)
*(.note)
*(.note.*)
*(.eh_frame)
*(.eh_frame.*)
*(.rel)
*(.rel.*)
}
}