mirror of
https://github.com/ipxe/ipxe
synced 2026-01-03 18:31:03 +03:00
[bios] Add bin-x86_64-pcbios build platform
Move most arch/i386 files to arch/x86, and adjust the contents of the Makefiles and the include/bits/*.h headers to reflect the new locations. This patch makes no substantive code changes, as can be seen using a rename-aware diff (e.g. "git show -M5"). This patch does not make the pcbios platform functional for x86_64; it merely allows it to compile without errors. Signed-off-by: Michael Brown <mcb30@ipxe.org>
This commit is contained in:
254
src/arch/x86/scripts/pcbios.lds
Normal file
254
src/arch/x86/scripts/pcbios.lds
Normal file
@@ -0,0 +1,254 @@
|
||||
/* -*- ld-script -*- */
|
||||
|
||||
/*
|
||||
* Linker script for i386 images
|
||||
*
|
||||
*/
|
||||
|
||||
SECTIONS {
|
||||
|
||||
/* Each section starts at a virtual address of zero.
|
||||
*
|
||||
* We guarantee alignment of virtual addresses to any alignment
|
||||
* specified by the constituent object files (e.g. via
|
||||
* __attribute__((aligned(x)))). Load addresses are guaranteed
|
||||
* only up to _max_align. Provided that all loader and relocation
|
||||
* code honours _max_align, this means that physical addresses are
|
||||
* also guaranteed up to _max_align.
|
||||
*
|
||||
* Note that when using -DKEEP_IT_REAL, the UNDI segments are only
|
||||
* guaranteed to be loaded on a paragraph boundary (i.e. 16-byte
|
||||
* alignment). Using _max_align>16 will therefore not guarantee
|
||||
* >16-byte alignment of physical addresses when -DKEEP_IT_REAL is
|
||||
* used (though virtual addresses will still be fully aligned).
|
||||
*
|
||||
*/
|
||||
|
||||
PROVIDE ( _max_align = 16 );
|
||||
|
||||
/*
|
||||
* Allow decompressor to require a minimum amount of temporary stack
|
||||
* space.
|
||||
*
|
||||
*/
|
||||
PROVIDE ( _min_decompress_stack = 0 );
|
||||
|
||||
/*
|
||||
* The prefix
|
||||
*
|
||||
*/
|
||||
|
||||
.prefix 0x0 : AT ( _prefix_lma ) {
|
||||
_prefix = .;
|
||||
*(.prefix)
|
||||
*(SORT(.pci_devlist.*))
|
||||
*(.prefix.*)
|
||||
_mprefix = .;
|
||||
} .bss.prefix (NOLOAD) : AT ( _end_lma ) {
|
||||
_eprefix = .;
|
||||
}
|
||||
_prefix_filesz = ABSOLUTE ( _mprefix ) - ABSOLUTE ( _prefix );
|
||||
_prefix_memsz = ABSOLUTE ( _eprefix ) - ABSOLUTE ( _prefix );
|
||||
|
||||
/*
|
||||
* The 16-bit (real-mode) code section
|
||||
*
|
||||
*/
|
||||
|
||||
.text16.early 0x0 : AT ( _text16_early_lma ) {
|
||||
_text16 = .;
|
||||
KEEP(*(.text16.null))
|
||||
KEEP(*(.text16.null.*))
|
||||
. += 1; /* Prevent NULL being valid */
|
||||
*(.text16.early)
|
||||
*(.text16.early.*)
|
||||
_etext16_early = .;
|
||||
} .text16.late ALIGN ( _max_align ) : AT ( _text16_late_lma ) {
|
||||
_text16_late = .;
|
||||
*(.text16)
|
||||
*(.text16.*)
|
||||
_mtext16 = .;
|
||||
} .bss.text16 (NOLOAD) : AT ( _end_lma ) {
|
||||
_etext16 = .;
|
||||
}
|
||||
_text16_early_filesz = ABSOLUTE ( _etext16_early ) - ABSOLUTE ( _text16 );
|
||||
_text16_early_memsz = ABSOLUTE ( _etext16_early ) - ABSOLUTE ( _text16 );
|
||||
_text16_late_filesz = ABSOLUTE ( _mtext16 ) - ABSOLUTE ( _text16_late );
|
||||
_text16_late_memsz = ABSOLUTE ( _etext16 ) - ABSOLUTE ( _text16_late );
|
||||
_text16_memsz = ABSOLUTE ( _etext16 ) - ABSOLUTE ( _text16 );
|
||||
|
||||
/*
|
||||
* The 16-bit (real-mode) data section
|
||||
*
|
||||
*/
|
||||
|
||||
.data16 0x0 : AT ( _data16_lma ) {
|
||||
_data16 = .;
|
||||
. += 1; /* Prevent NULL being valid */
|
||||
*(.rodata16)
|
||||
*(.rodata16.*)
|
||||
*(.data16)
|
||||
*(.data16.*)
|
||||
_mdata16 = .;
|
||||
} .bss.data16 (NOLOAD) : AT ( _end_lma ) {
|
||||
*(.bss16)
|
||||
*(.bss16.*)
|
||||
*(.stack16)
|
||||
*(.stack16.*)
|
||||
. = MAX ( ., _mdata16 + _min_decompress_stack );
|
||||
_edata16 = .;
|
||||
}
|
||||
_data16_filesz = ABSOLUTE ( _mdata16 ) - ABSOLUTE ( _data16 );
|
||||
_data16_memsz = ABSOLUTE ( _edata16 ) - ABSOLUTE ( _data16 );
|
||||
|
||||
/*
|
||||
* The 32-bit sections
|
||||
*
|
||||
*/
|
||||
|
||||
.textdata 0x0 : AT ( _textdata_lma ) {
|
||||
_textdata = .;
|
||||
KEEP(*(.text.null_trap))
|
||||
KEEP(*(.text.null_trap.*))
|
||||
. += 1; /* Prevent NULL being valid */
|
||||
*(.text)
|
||||
*(.text.*)
|
||||
*(.rodata)
|
||||
*(.rodata.*)
|
||||
*(.data)
|
||||
*(.data.*)
|
||||
KEEP(*(SORT(.tbl.*))) /* Various tables. See include/tables.h */
|
||||
KEEP(*(.provided))
|
||||
KEEP(*(.provided.*))
|
||||
_mtextdata = .;
|
||||
} .bss.textdata (NOLOAD) : AT ( _end_lma ) {
|
||||
*(.bss)
|
||||
*(.bss.*)
|
||||
*(COMMON)
|
||||
*(.stack)
|
||||
*(.stack.*)
|
||||
_etextdata = .;
|
||||
}
|
||||
_textdata_filesz = ABSOLUTE ( _mtextdata ) - ABSOLUTE ( _textdata );
|
||||
_textdata_memsz = ABSOLUTE ( _etextdata ) - ABSOLUTE ( _textdata );
|
||||
|
||||
/*
|
||||
* Payload prefix
|
||||
*
|
||||
* If present, this will be placed between .text16.early and .text16.late.
|
||||
*
|
||||
*/
|
||||
.pprefix 0x0 : AT ( _pprefix_lma ) {
|
||||
_pprefix = .;
|
||||
KEEP(*(.pprefix))
|
||||
KEEP(*(.pprefix.*))
|
||||
_mpprefix = .;
|
||||
} .bss.pprefix (NOLOAD) : AT ( _end_lma ) {
|
||||
_epprefix = .;
|
||||
}
|
||||
_pprefix_filesz = ABSOLUTE ( _mpprefix ) - ABSOLUTE ( _pprefix );
|
||||
_pprefix_memsz = ABSOLUTE ( _epprefix ) - ABSOLUTE ( _pprefix );
|
||||
|
||||
/*
|
||||
* Compressor information block
|
||||
*
|
||||
*/
|
||||
|
||||
.zinfo 0x0 : AT ( _zinfo_lma ) {
|
||||
_zinfo = .;
|
||||
KEEP(*(.zinfo))
|
||||
KEEP(*(.zinfo.*))
|
||||
_mzinfo = .;
|
||||
} .bss.zinfo (NOLOAD) : AT ( _end_lma ) {
|
||||
_ezinfo = .;
|
||||
}
|
||||
_zinfo_filesz = ABSOLUTE ( _mzinfo ) - ABSOLUTE ( _zinfo );
|
||||
_zinfo_memsz = ABSOLUTE ( _ezinfo ) - ABSOLUTE ( _zinfo );
|
||||
|
||||
/*
|
||||
* Weak symbols that need zero values if not otherwise defined
|
||||
*
|
||||
*/
|
||||
|
||||
.weak 0x0 : AT ( _end_lma ) {
|
||||
_weak = .;
|
||||
*(.weak)
|
||||
*(.weak.*)
|
||||
_eweak = .;
|
||||
}
|
||||
_assert = ASSERT ( ( _weak == _eweak ), ".weak is non-zero length" );
|
||||
|
||||
/*
|
||||
* Dispose of the comment and note sections to make the link map
|
||||
* easier to read
|
||||
*
|
||||
*/
|
||||
|
||||
/DISCARD/ : {
|
||||
*(.comment)
|
||||
*(.comment.*)
|
||||
*(.note)
|
||||
*(.note.*)
|
||||
*(.eh_frame)
|
||||
*(.eh_frame.*)
|
||||
*(.rel)
|
||||
*(.rel.*)
|
||||
*(.einfo)
|
||||
*(.einfo.*)
|
||||
*(.discard)
|
||||
*(.discard.*)
|
||||
}
|
||||
|
||||
/*
|
||||
* Load address calculations. In older versions of ld, ALIGN()
|
||||
* can operate only on the location counter, so we use that.
|
||||
*
|
||||
*/
|
||||
|
||||
. = 0;
|
||||
|
||||
. = ALIGN ( _max_align );
|
||||
_prefix_lma = .;
|
||||
. += _prefix_filesz;
|
||||
|
||||
. = ALIGN ( _max_align );
|
||||
_text16_early_lma = .;
|
||||
. += _text16_early_filesz;
|
||||
|
||||
. = ALIGN ( _max_align );
|
||||
. = ALIGN ( _payload_align );
|
||||
_pprefix_lma = .;
|
||||
. += _pprefix_filesz;
|
||||
|
||||
. = ALIGN ( _max_align );
|
||||
_payload_lma = .;
|
||||
_pprefix_skip = ABSOLUTE ( _payload_lma ) - ABSOLUTE ( _pprefix_lma );
|
||||
_text16_late_lma = .;
|
||||
. += _text16_late_filesz;
|
||||
|
||||
. = ALIGN ( _max_align );
|
||||
_data16_lma = .;
|
||||
. += _data16_filesz;
|
||||
|
||||
. = ALIGN ( _max_align );
|
||||
_textdata_lma = .;
|
||||
. += _textdata_filesz;
|
||||
|
||||
_filesz = .; /* Do not include zinfo block in file size */
|
||||
|
||||
. = ALIGN ( _max_align );
|
||||
_zinfo_lma = .;
|
||||
. += _zinfo_filesz;
|
||||
|
||||
. = ALIGN ( _max_align );
|
||||
_end_lma = .;
|
||||
|
||||
/*
|
||||
* Values calculated to save code from doing it
|
||||
*
|
||||
*/
|
||||
_text16_memsz_ppgh = ( ( ( _text16_memsz + 63 ) / 64 ) * 4 );
|
||||
_data16_memsz_ppgh = ( ( ( _data16_memsz + 63 ) / 64 ) * 4 );
|
||||
_textdata_memsz_pgh = ( ( _textdata_memsz + 15 ) / 16 );
|
||||
_textdata_memsz_kb = ( ( _textdata_memsz + 1023 ) / 1024 );
|
||||
}
|
||||
Reference in New Issue
Block a user