Message ID | 20190930184425.13756-1-julien.grall@arm.com |
---|---|
State | New |
Headers | show |
Series | [Xen-devel,for-4.13] xen/arm32: head: Fix build when using GAS 2.25.0 | expand |
On 30/09/2019 19:44, Julien Grall wrote: > 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> FWIW, Tested-by: Andrew Cooper <andrew.cooper3@citrix.com>, only insofar as it fixing the build. I haven't booted the resulting binary.
On Mon, 30 Sep 2019, Andrew Cooper wrote: > On 30/09/2019 19:44, Julien Grall wrote: > > 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> > > FWIW, Tested-by: Andrew Cooper <andrew.cooper3@citrix.com>, only insofar > as it fixing the build. I haven't booted the resulting binary. Reviewed-by: Stefano Stabellini <sstabellini@kernel.org> Given that this is a straightforward build fix, and due to timezone differences, I have committed it (after verifying it fixes the build myself). I hope that Juergen approves.
On 01.10.19 02:57, Stefano Stabellini wrote: > On Mon, 30 Sep 2019, Andrew Cooper wrote: >> On 30/09/2019 19:44, Julien Grall wrote: >>> 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> >> >> FWIW, Tested-by: Andrew Cooper <andrew.cooper3@citrix.com>, only insofar >> as it fixing the build. I haven't booted the resulting binary. > > Reviewed-by: Stefano Stabellini <sstabellini@kernel.org> > > Given that this is a straightforward build fix, and due to timezone > differences, I have committed it (after verifying it fixes the build > myself). I hope that Juergen approves. > I do. Juergen
diff --git a/xen/arch/arm/arm32/head.S b/xen/arch/arm/arm32/head.S index 2fc312f9e0..e9d356f05c 100644 --- a/xen/arch/arm/arm32/head.S +++ b/xen/arch/arm/arm32/head.S @@ -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
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> --- xen/arch/arm/arm32/head.S | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)