diff --git a/src/arch/riscv/scripts/sbi.lds b/src/arch/riscv/scripts/sbi.lds index afb1902e1..f882f235e 100644 --- a/src/arch/riscv/scripts/sbi.lds +++ b/src/arch/riscv/scripts/sbi.lds @@ -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/ : { diff --git a/src/arch/riscv32/Makefile.sbi b/src/arch/riscv32/Makefile.sbi index d62287770..5841dd4b5 100644 --- a/src/arch/riscv32/Makefile.sbi +++ b/src/arch/riscv32/Makefile.sbi @@ -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 diff --git a/src/arch/riscv64/Makefile.sbi b/src/arch/riscv64/Makefile.sbi index d62287770..0f7e1c373 100644 --- a/src/arch/riscv64/Makefile.sbi +++ b/src/arch/riscv64/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