ARM: Always generate the IT instruction when compiling for Thumb-2
PATCH 1/1 ARM: Always generate the IT instruction when compiling for Thumb-2
Current behaviour is to generate the IT instruction only for Thumb-2 code. However, the kernel helpers in entry-armv.S are compiled to ARM in a unified syntax file (if THUMB2_KERNEL). Recent compilers warn about missing IT instruction in unified assembly syntax files. The patch changes the "-mimplicit-it" gas option to "always".
--- arch/arm/Makefile | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
arch/arm/Makefile +1 -1
@@ -94,7 +94,7 @@ CFLAGS_ABI +=-funwind-tables endif ifeq ($(CONFIG_THUMB2_KERNEL),y) -AFLAGS_AUTOIT :=$(call as-option,-Wa$(comma)-mimplicit-it=thumb,-Wa$(comma)-mauto-it) +AFLAGS_AUTOIT :=$(call as-option,-Wa$(comma)-mimplicit-it=always,-Wa$(comma)-mauto-it) AFLAGS_NOWARN :=$(call as-option,-Wa$(comma)-mno-warn-deprecated,-Wa$(comma)-W) CFLAGS_THUMB2 :=-mthumb $(AFLAGS_AUTOIT) $(AFLAGS_NOWARN) AFLAGS_THUMB2 :=$(CFLAGS_THUMB2) -Wa$(comma)-mthumb
PATCH 1/1 ARM: Always generate the IT instruction when compiling for Thumb-2
Quoted 5 lines · Catalin Marinas
Current behaviour is to generate the IT instruction only for Thumb-2 code. However, the kernel helpers in
entry-armv.Sare compiled to ARM in a unified syntax file (ifTHUMB2_KERNEL). Recent compilers warn about missing IT instruction in unified assembly syntax files. The patch changes the "-mimplicit-it" gas option to "always".
Any downsides to this change? Any assemblers not accepting "always" instead of "thumb" ?
PATCH 1/1 ARM: Always generate the IT instruction when compilingfor Thumb-2
Quoted 9 lines · Russell King - ARM Linux
Quoted 5 lines · Catalin Marinas
Current behaviour is to generate the IT instruction only for Thumb-2 code. However, the kernel helpers in
entry-armv.Sare compiled to ARM in a unified syntax file (ifTHUMB2_KERNEL). Recent compilers warn about missing IT instruction in unified assembly syntax files. The patch changes the "-mimplicit-it" gas option to "always".Any downsides to this change? Any assemblers not accepting "always" instead of "thumb" ?
When the -mimplicit-it was merged into mainline gas, it supported all of thumb, arm, always and never. We still have the old -mauto-it but that's I think only valid for the CodeSourcery toolchains.
Signature · 1 line
Catalin
PATCH 1/1 ARM: Always generate the IT instruction when compilingfor Thumb-2
Quoted 8 lines · Catalin Marinas
Quoted 7 lines · Russell King - ARM Linux
Quoted 5 lines · Catalin Marinas
Current behaviour is to generate the IT instruction only for Thumb-2 code. However, the kernel helpers in
entry-armv.Sare compiled to ARM in a unified syntax file (ifTHUMB2_KERNEL). Recent compilers warn about missing IT instruction in unified assembly syntax files. The patch changes the "-mimplicit-it" gas option to "always".
Quoted 6 lines
Quoted 2 lines
Any downsides to this change? Any assemblers not accepting "always" instead of "thumb" ?
When the -mimplicit-it was merged into mainline gas, it supported all of thumb, arm, always and never. We still have the old -mauto-it but that's I think only valid for the CodeSourcery toolchains.
I notice there's a few "it" dotted around the kernel code now. In fact, that's how I learned about it - because I thought "that can't be right when targetting ARM", and did some reading to learn otherwise.
With -mimplicit-it=always, they should not be needed. So they can be removed from the kernel source?
Or, if it's policy to put "it" in all the places needed, wouldn't -mimplicit-it=arm (the gas default) be a better choice, to make sure they are in all the places needed?
-- Jamie
PATCH 1/1 ARM: Always generate the IT instruction when compilingfor Thumb-2
Quoted 20 lines · Jamie Lokier
Quoted 8 lines · Catalin Marinas
Quoted 7 lines · Russell King - ARM Linux
Quoted 5 lines · Catalin Marinas
Current behaviour is to generate the IT instruction only for Thumb-2 code. However, the kernel helpers in
entry-armv.Sare compiled to ARM in a unified syntax file (ifTHUMB2_KERNEL). Recent compilers warn about missing IT instruction in unified assembly syntax files. The patch changes the "-mimplicit-it" gas option to "always".Quoted 6 lines
Quoted 2 lines
Any downsides to this change? Any assemblers not accepting "always" instead of "thumb" ?
When the -mimplicit-it was merged into mainline gas, it supported all of thumb, arm, always and never. We still have the old -mauto-it but that's I think only valid for the CodeSourcery toolchains.
I notice there's a few "it" dotted around the kernel code now. In fact, that's how I learned about it - because I thought "that can't be right when targetting ARM", and did some reading to learn otherwise.
Quoted 6 lines
With -mimplicit-it=always, they should not be needed. So they can be removed from the kernel source?
Or, if it's policy to put "it" in all the places needed, wouldn't -mimplicit-it=arm (the gas default) be a better choice, to make sure they are in all the places needed?
The original Thumb-2 patches were adding these IT instructions explicitly (quite a lot). With compiler support for automatically generating them, the kernel can avoid explicit IT in most cases with a few exceptions.
For things like:
1: LDRNE ...
gas generates:
1: IT NE
LDRNE ...
since you are not allowed to branch in the middle of an IT block.
But if the label 1 is used for the exception table, it should point to LDRNE rather than IT, so we have to write the code as below and manually insert IT:
IT NE
1: LDRNE ...
Signature · 1 line
Catalin