Author: andrew
Date: Tue Oct 13 16:51:05 2020
New Revision: 366670
URL: https://svnweb.freebsd.org/changeset/base/366670

Log:
  Use adrp in the arm64 efi loader
  
  On startup the arm64 efi loaders need to know PC-relative addresses.
  Previously we used the adr instruction to find this address, however this
  instruction is limited to +/- 1MiB.
  
  Switch to adrp to find the 4k page the address is within and an add to
  set the bottom 12 bits. This lets us address +/- 4GiB which should be
  large enough for now.
  
  Reported by:  imp
  MFC after:    2 weeks
  Sponsored by: Innovate UK

Modified:
  head/stand/efi/loader/arch/arm64/start.S

Modified: head/stand/efi/loader/arch/arm64/start.S
==============================================================================
--- head/stand/efi/loader/arch/arm64/start.S    Tue Oct 13 16:19:21 2020        
(r366669)
+++ head/stand/efi/loader/arch/arm64/start.S    Tue Oct 13 16:51:05 2020        
(r366670)
@@ -142,8 +142,10 @@ _start:
        /* Save the boot params to the stack */
        stp     x0, x1, [sp, #-16]!
 
-       adr     x0, __bss_start
-       adr     x1, __bss_end
+       adrp    x0, __bss_start
+       add     x0, x0, :lo12:__bss_start
+       adrp    x1, __bss_end
+       add     x1, x1, :lo12:__bss_end
 
        b 2f
 
@@ -153,8 +155,10 @@ _start:
        cmp     x0, x1
        b.lo    1b
 
-       adr     x0, ImageBase
-       adr     x1, _DYNAMIC
+       adrp    x0, ImageBase
+       add     x0, x0, :lo12:ImageBase
+       adrp    x1, _DYNAMIC
+       add     x1, x1, :lo12:_DYNAMIC
 
        bl      self_reloc
 
@@ -165,7 +169,8 @@ _start:
         * Load the stack to use. The default stack may be too small for
         * the lua loader.
         */
-       adr     x2, initstack_end
+       adrp    x2, initstack_end
+       add     x2, x2, :lo12:initstack_end
        mov     sp, x2
 #endif
 
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to