mirror of
https://github.com/freebsd/freebsd-src
synced 2024-09-06 17:18:32 +00:00
arm64: Clean up finding our load address
Use the linker to pre-calculate the offset of a known symbol from KERNBASE, and use this to find the physical address KERNBASE should map to. Sponsored by: Arm Ltd Differential Revision: https://reviews.freebsd.org/D42568
This commit is contained in:
parent
ba31362694
commit
61f14f1da3
|
@ -359,21 +359,13 @@ LEND(drop_to_el1)
|
|||
* Get the physical address the kernel was loaded at.
|
||||
*/
|
||||
LENTRY(get_load_phys_addr)
|
||||
/* Load the offset of get_load_phys_addr from KERNBASE */
|
||||
ldr x28, =(get_load_phys_addr - KERNBASE)
|
||||
/* Load the physical address of virt_map */
|
||||
adrp x29, virt_map
|
||||
add x29, x29, :lo12:virt_map
|
||||
/* Load the virtual address of virt_map stored in virt_map */
|
||||
ldr x28, [x29]
|
||||
/* Find PA - VA as PA' = VA' - VA + PA = VA' + (PA - VA) = VA' + x29 */
|
||||
sub x29, x29, x28
|
||||
/* Find the load address for the kernel */
|
||||
mov x28, #(KERNBASE)
|
||||
add x28, x28, x29
|
||||
adr x29, get_load_phys_addr
|
||||
/* Find the physical address of KERNBASE, i.e. our load address */
|
||||
sub x28, x29, x28
|
||||
ret
|
||||
|
||||
.align 3
|
||||
virt_map:
|
||||
.quad virt_map
|
||||
LEND(get_load_phys_addr)
|
||||
|
||||
/*
|
||||
|
|
Loading…
Reference in a new issue