mirror of
https://github.com/ipxe/ipxe
synced 2025-12-17 01:52:08 +03:00
[riscv] Allow for a non-zero link-time address
Using paging (rather than relocation records) will be easier on 64-bit RISC-V if we place iPXE within the negative (kernel) virtual address space. Allow the link-time address to be non-zero and to vary between 32-bit and 64-bit builds. Choose addresses that are expected to be amenable to the use of paging. There is no particular need to use a non-zero address in the 32-bit builds, but doing so allows us to validate that the relocation code is handling this case correctly. Signed-off-by: Michael Brown <mcb30@ipxe.org>
This commit is contained in:
@@ -5,10 +5,8 @@
|
||||
|
||||
SECTIONS {
|
||||
|
||||
/* Start at virtual address zero */
|
||||
. = 0;
|
||||
|
||||
/* Weak symbols that need zero values if not otherwise defined */
|
||||
saved_pos = .;
|
||||
.weak 0x0 : {
|
||||
_weak = .;
|
||||
*(.weak)
|
||||
@@ -16,6 +14,7 @@ SECTIONS {
|
||||
_eweak = .;
|
||||
}
|
||||
_assert = ASSERT ( ( _weak == _eweak ), ".weak is non-zero length" );
|
||||
_assert = ASSERT ( ( . == saved_pos ), ".weak altered current position" );
|
||||
|
||||
/* Prefix code */
|
||||
.prefix : {
|
||||
@@ -105,7 +104,7 @@ SECTIONS {
|
||||
_ereloc = ( _reloc + __load_stop_reladyn - __load_start_reladyn );
|
||||
|
||||
/* Length of initialised data */
|
||||
_sbi_filesz = ABSOLUTE ( _ereloc );
|
||||
_sbi_filesz = ( ABSOLUTE ( _ereloc ) - ABSOLUTE ( _prefix ) );
|
||||
|
||||
/* Unwanted sections */
|
||||
/DISCARD/ : {
|
||||
|
||||
@@ -1,5 +1,13 @@
|
||||
# -*- makefile -*- : Force emacs to use Makefile mode
|
||||
|
||||
# Set base virtual address to 0xeb000000
|
||||
#
|
||||
# This is aligned to a 4MB boundary and so allows 4MB megapages to be
|
||||
# used to map the iPXE binary. The address pattern is also easily
|
||||
# recognisable if leaked to unexpected contexts.
|
||||
#
|
||||
LDFLAGS += --section-start=.prefix=0xeb000000
|
||||
|
||||
# Include generic SBI Makefile
|
||||
#
|
||||
MAKEDEPS += arch/riscv/Makefile.sbi
|
||||
|
||||
@@ -1,5 +1,13 @@
|
||||
# -*- makefile -*- : Force emacs to use Makefile mode
|
||||
|
||||
# Set base virtual address to 0xffffffffeb000000
|
||||
#
|
||||
# This is aligned to a 2MB boundary and so allows 2MB megapages to be
|
||||
# used to map the iPXE binary. The address pattern is also easily
|
||||
# recognisable if leaked to unexpected contexts.
|
||||
#
|
||||
LDFLAGS += --section-start=.prefix=0xffffffffeb000000
|
||||
|
||||
# Include generic SBI Makefile
|
||||
#
|
||||
MAKEDEPS += arch/riscv/Makefile.sbi
|
||||
|
||||
Reference in New Issue
Block a user