xen/arm32: head: Fix build when using GAS 2.25.0

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>
This commit is contained in:
Julien Grall authored and Stefano Stabellini committed 2019-09-30 17:55:11 -07:00
1 parent d7a9382866
commit 58197b685a
1 file changed
+2 -2
+2 -2
View 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
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.