ARM: efistub: replace adrl pseudo-op with adr_l macro invocation
authorArd Biesheuvel <ardb@kernel.org>
Mon, 14 Sep 2020 09:28:01 +0000 (12:28 +0300)
committerArd Biesheuvel <ardb@kernel.org>
Wed, 28 Oct 2020 16:05:39 +0000 (17:05 +0100)
The ARM 'adrl' pseudo instruction is a bit problematic, as it does not
exist in Thumb mode, and it is not implemented by Clang either. Since
the Thumb variant has a slightly bigger range, it is sometimes necessary
to emit the 'adrl' variant in ARM mode where Thumb mode can use adr just
fine. However, that still leaves the Clang issue, which does not appear
to be supporting this any time soon.

So let's switch to the adr_l macro, which works for both ARM and Thumb,
and has unlimited range.

Reviewed-by: Nicolas Pitre <nico@fluxnic.net>
Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
arch/arm/boot/compressed/head.S

index 2e04ec5..5b591da 100644 (file)
@@ -1440,8 +1440,7 @@ ENTRY(efi_enter_kernel)
                mov     r4, r0                  @ preserve image base
                mov     r8, r1                  @ preserve DT pointer
 
- ARM(          adrl    r0, call_cache_fn       )
- THUMB(                adr     r0, call_cache_fn       )
+               adr_l   r0, call_cache_fn
                adr     r1, 0f                  @ clean the region of code we
                bl      cache_clean_flush       @ may run with the MMU off