Skip to contentSkip to conversation

ARM: Always generate the IT instruction when compiling for Thumb-2

PATCH New Catalin Marinas 3 participants 5 messages Jan 26, 2010 – Jan 28, 2010 Arm (32-bit)

lore
Share & tools
lore
#0 lore raw

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
index 9e75825..356d702 100644
@@ -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
#1 lore raw

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.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".

Any downsides to this change? Any assemblers not accepting "always" instead of "thumb" ?

#2 lore raw

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.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".

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
#3 lore raw

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.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".

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

#4 lore raw

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.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".

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