]> xenbits.xensource.com Git - people/dariof/xen.git/commitdiff
xen/arm32: head: Fix build when using GAS 2.25.0
authorJulien Grall <julien.grall@arm.com>
Mon, 30 Sep 2019 18:44:25 +0000 (19:44 +0100)
committerStefano Stabellini <sstabellini@kernel.org>
Tue, 1 Oct 2019 00:55:11 +0000 (17:55 -0700)
GAS 2.25.0 throws multiple errors when building arm32/head.S:

arm32/head.S: Assembler messages:
arm32/head.S:452: Error: invalid constant (f7f) after fixup
arm32/head.S:453: Error: invalid constant (f7f) after fixup
arm32/head.S:495: Error: invalid constant (f7f) after fixup
arm32/head.S:510: Error: invalid constant (f7f) after fixup
arm32/head.S:514: Error: invalid constant (f7f) after fixup
arm32/head.S:516: Error: invalid constant (f7f) after fixup
arm32/head.S:633: Error: invalid constant (f7f) after fixup

This makes sense because the instruction mov is only able to deal with a
specific set of immediate (see "modified immediate constants in ARM
instructions"). For any 16-bit immediate, the instruction movw should be
used.

It looks like newer version of GAS will seemly switch to movw if the
immediate does not fit in the immediate encoding for mov. But we should
not rely on this. So switch to movw.

Fixes: 23dfe48d10 ("xen/arm32: head: Introduce macros to create table and mapping entry")
Reported-by: Andrew Cooper <andrew.cooper3@citrix.com>
Signed-off-by: Julien Grall <julien.grall@arm.com>
Tested-by: Andrew Cooper <andrew.cooper3@citrix.com>
Reviewed-by: Stefano Stabellini <sstabellini@kernel.org>
xen/arch/arm/arm32/head.S

index 2fc312f9e076d873b7e61fa1f815a35c92ad1013..e9d356f05c2b3b04290bcf6123f0326e1997d32c 100644 (file)
@@ -383,7 +383,7 @@ ENDPROC(cpu_init)
         ldr   r4, =\tbl
         add   r4, r4, r10            /* r4 := paddr(\tlb) */
 
-        mov   r2, #PT_PT             /* r2:r3 := right for linear PT */
+        movw  r2, #PT_PT             /* r2:r3 := right for linear PT */
         orr   r2, r2, r4             /*           + \tlb paddr */
         mov   r3, #0
 
@@ -419,7 +419,7 @@ ENDPROC(cpu_init)
         lsr   r4, \phys, #THIRD_SHIFT
         lsl   r4, r4, #THIRD_SHIFT   /* r4 := PAGE_ALIGNED(phys) */
 
-        mov   r2, #\type             /* r2:r3 := right for section PT */
+        movw  r2, #\type             /* r2:r3 := right for section PT */
         orr   r2, r2, r4             /*          + PAGE_ALIGNED(phys) */
         mov   r3, #0