Skip to contentSkip to conversation

fix compilation breakage in entry-armv.S

PATCH New Guennadi Liakhovetski 3 participants 8 messages Nov 8, 2011 – Nov 19, 2011 Arm (32-bit)

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 fix compilation breakage in entry-armv.S

Compilation of Linus' tree of today without THUMB support for V7 machines breaks:

linux-2.6/arch/arm/kernel/entry-armv.S: Assembler messages:
linux-2.6/arch/arm/kernel/entry-armv.S:501: Error: backward ref to unknown label "2:" linux-2.6/arch/arm/kernel/entry-armv.S:502: Error: backward ref to unknown label "3:" make[2]: *** [arch/arm/kernel/entry-armv.o] Error 1

Fix this by adding a check for CONFIG_ARM_THUMB.

---

arch/arm/kernel/entry-armv.S +1 -1
index 9ad50c4..6f8fbfe 100644
@@ -497,7 +497,7 @@ ENDPROC(__und_usr)
 	.popsection
 	.pushsection __ex_table,"a"
 	.long	1b, 4b
-#if __LINUX_ARM_ARCH__ >= 7
+#if CONFIG_ARM_THUMB && __LINUX_ARM_ARCH__ >= 7
 	.long	2b, 4b
 	.long	3b, 4b
 #endif
#1 lore raw

PATCH 1/1 fix compilation breakage in entry-armv.S

Quoted 9 lines · Guennadi Liakhovetski

Compilation of Linus' tree of today without THUMB support for V7 machines breaks:

linux-2.6/arch/arm/kernel/entry-armv.S: Assembler messages:
linux-2.6/arch/arm/kernel/entry-armv.S:501: Error: backward ref to unknown label "2:" linux-2.6/arch/arm/kernel/entry-armv.S:502: Error: backward ref to unknown label "3:" make[2]: *** [arch/arm/kernel/entry-armv.o] Error 1

Fix this by adding a check for CONFIG_ARM_THUMB.

This still looks wrong. The code for '2' and '3' is included when:

#if CONFIG_ARM_THUMB && __LINUX_ARM_ARCH__ >= 6 && CONFIG_CPU_V7

is true - so the condition on including it in the exception tables should be the same as that.

#2 lore raw

PATCH 1/1 fix compilation breakage in entry-armv.S

Quoted 9 lines · Russell King - ARM Linux
Quoted 8 lines · Guennadi Liakhovetski

Compilation of Linus' tree of today without THUMB support for V7 machines breaks:

linux-2.6/arch/arm/kernel/entry-armv.S: Assembler messages:
linux-2.6/arch/arm/kernel/entry-armv.S:501: Error: backward ref to unknown label "2:" linux-2.6/arch/arm/kernel/entry-armv.S:502: Error: backward ref to unknown label "3:" make[2]: *** [arch/arm/kernel/entry-armv.o] Error 1

Quoted 8 lines
Quoted 1 line

Fix this by adding a check for CONFIG_ARM_THUMB.

This still looks wrong. The code for '2' and '3' is included when:

#if CONFIG_ARM_THUMB && __LINUX_ARM_ARCH__ >= 6 && CONFIG_CPU_V7

is true - so the condition on including it in the exception tables should be the same as that.

Yes, I saw those, but, aren't they superfluous? Let's see:

arch/arm/mm/Kconfig:

config CPU_V7

	...
	select CPU_32v7

arch/arm/Makefile:

arch-$(CONFIG_CPU_32v7) :=-D__LINUX_ARM_ARCH__=7 $(call cc-option,-march=armv7-a,-march=armv5t -Wa$(comma)-march=armv7-a)

So, looks like CPU_V7 implies __LINUX_ARM_ARCH__=7? Ok, I picked up the wrong pair, so, should this be enough:

#if CONFIG_ARM_THUMB && CONFIG_CPU_V7

and the original condition, where the labels are defined, that you quoted, can be reduced too?

Thanks
Guennadi
---
Guennadi Liakhovetski, Ph.D.
Freelance Open-Source Software Developer
http://www.open-technology.de/

#3 lore raw

PATCH 1/1 fix compilation breakage in entry-armv.S

Quoted 32 lines · Guennadi Liakhovetski
Quoted 9 lines · Russell King - ARM Linux
Quoted 8 lines · Guennadi Liakhovetski

Compilation of Linus' tree of today without THUMB support for V7 machines breaks:

linux-2.6/arch/arm/kernel/entry-armv.S: Assembler messages:
linux-2.6/arch/arm/kernel/entry-armv.S:501: Error: backward ref to unknown label "2:" linux-2.6/arch/arm/kernel/entry-armv.S:502: Error: backward ref to unknown label "3:" make[2]: *** [arch/arm/kernel/entry-armv.o] Error 1

Quoted 8 lines
Quoted 1 line

Fix this by adding a check for CONFIG_ARM_THUMB.

This still looks wrong. The code for '2' and '3' is included when:

#if CONFIG_ARM_THUMB && __LINUX_ARM_ARCH__ >= 6 && CONFIG_CPU_V7

is true - so the condition on including it in the exception tables should be the same as that.

Yes, I saw those, but, aren't they superfluous? Let's see:

arch/arm/mm/Kconfig:

config CPU_V7

	...
	select CPU_32v7

arch/arm/Makefile:

arch-$(CONFIG_CPU_32v7) :=-D__LINUX_ARM_ARCH__=7 $(call cc-option,-march=armv7-a,-march=armv5t -Wa$(comma)-march=armv7-a)

Quoted 7 lines

So, looks like CPU_V7 implies __LINUX_ARM_ARCH__=7? Ok, I picked up the wrong pair, so, should this be enough:

#if CONFIG_ARM_THUMB && CONFIG_CPU_V7

and the original condition, where the labels are defined, that you quoted, can be reduced too?

It looks like you're right. I'm going to bat this one over to Dave Martin to confirm.

#4 lore raw

PATCH 1/1 fix compilation breakage in entry-armv.S

In reply to Guennadi Liakhovetski
Quoted 32 lines · Guennadi Liakhovetski
Quoted 9 lines · Russell King - ARM Linux
Quoted 8 lines · Guennadi Liakhovetski

Compilation of Linus' tree of today without THUMB support for V7 machines breaks:

linux-2.6/arch/arm/kernel/entry-armv.S: Assembler messages:
linux-2.6/arch/arm/kernel/entry-armv.S:501: Error: backward ref to unknown label "2:" linux-2.6/arch/arm/kernel/entry-armv.S:502: Error: backward ref to unknown label "3:" make[2]: *** [arch/arm/kernel/entry-armv.o] Error 1

Quoted 8 lines
Quoted 1 line

Fix this by adding a check for CONFIG_ARM_THUMB.

This still looks wrong. The code for '2' and '3' is included when:

#if CONFIG_ARM_THUMB && __LINUX_ARM_ARCH__ >= 6 && CONFIG_CPU_V7

is true - so the condition on including it in the exception tables should be the same as that.

Yes, I saw those, but, aren't they superfluous? Let's see:

arch/arm/mm/Kconfig:

config CPU_V7

	...
	select CPU_32v7

arch/arm/Makefile:

arch-$(CONFIG_CPU_32v7) :=-D__LINUX_ARM_ARCH__=7 $(call cc-option,-march=armv7-a,-march=armv5t -Wa$(comma)-march=armv7-a)

Quoted 7 lines

So, looks like CPU_V7 implies __LINUX_ARM_ARCH__=7? Ok, I picked up the wrong pair, so, should this be enough:

#if CONFIG_ARM_THUMB && CONFIG_CPU_V7

and the original condition, where the labels are defined, that you quoted, can be reduced too?

No-- although the reason why is a bit confusing.

In arch/arm/Makefile, __LINUX_ARM_ARCH__ will be repeatedly redefined for each CPU supported by the kernel. This means that the value actuslly used will be the earliest architecture supported by all supported CPUs (i.e., it represents the architecture subset supported by all enabled CPUs). This happens because of the way the definitions of __LIUNX_ARM_ARCH__ are ordered in the Makefile.

The affected code needs to be enabled whenever an ARMv7 CPU is supported if support for Thumb userspace binaries is enabled, even if v6 CPUs are also supported in the same kernel (in which case __LINUX_ARM_ARCH__ has the value 6, and CONFIG_CPU_V6 and CONFIG_CPU_V7 will both be defined).

However, some cheeky assumptions are made so that we can restore the assembler's target architecture after temporarily changing it -- so although __LINUX_ARM_ARCH__ >= 6 is not strictly necessary (since building pre-v6 and v7 CPUs the the same kernel is not allowed), I kept it there in order to avoid unpleasant surprises. Unfortunately, the assembler doesn't allow its target architecture to be restored reliably after temporarily overriding it.

So I think the affected #ifdef does need be:

	CONFIG_ARM_THUMB && __LINUX_ARM_ARCH__ >= 6 && CONFIG_CPU_V7

Arnd Bergmann had previously suggested the same change, but the discussion went stale, and it looks like I never made an actual patch. Looks like my bad...

Can you update your patch and repost?

Thanks
---Dave

#5 lore raw

PATCH v2 1/1 fix compilation breakage in entry-armv.S

Fix compilation failure, when Thumb support is not enabled:

arch/arm/kernel/entry-armv.S: Assembler messages:
arch/arm/kernel/entry-armv.S:501: Error: backward ref to unknown label "2:" arch/arm/kernel/entry-armv.S:502: Error: backward ref to unknown label "3:" make[2]: *** [arch/arm/kernel/entry-armv.o] Error 1

---

v2: use exactly the same preprocessor condition, as the one used for the code, defining labels "2" and "3"

 arch/arm/kernel/entry-armv.S |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)
arch/arm/kernel/entry-armv.S +1 -1
index 9ad50c4..b145f16 100644
@@ -497,7 +497,7 @@ ENDPROC(__und_usr)
 	.popsection
 	.pushsection __ex_table,"a"
 	.long	1b, 4b
-#if __LINUX_ARM_ARCH__ >= 7
+#if CONFIG_ARM_THUMB && __LINUX_ARM_ARCH__ >= 6 && CONFIG_CPU_V7
 	.long	2b, 4b
 	.long	3b, 4b
 #endif
Signature · 1 line
1.7.2.5
#6 lore raw

PATCH v2 1/1 fix compilation breakage in entry-armv.S

Quoted 8 lines · Guennadi Liakhovetski

Fix compilation failure, when Thumb support is not enabled:

arch/arm/kernel/entry-armv.S: Assembler messages:
arch/arm/kernel/entry-armv.S:501: Error: backward ref to unknown label "2:" arch/arm/kernel/entry-armv.S:502: Error: backward ref to unknown label "3:" make[2]: *** [arch/arm/kernel/entry-armv.o] Error 1

That looks fine to me.

If Russell is OK with this, please send the patch to his patch system so we can get this merged.

Quoted 22 lines

v2: use exactly the same preprocessor condition, as the one used for the code, defining labels "2" and "3"

 arch/arm/kernel/entry-armv.S |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)
arch/arm/kernel/entry-armv.S +1 -1
index 9ad50c4..b145f16 100644
@@ -497,7 +497,7 @@ ENDPROC(__und_usr)
 	.popsection
 	.pushsection __ex_table,"a"
 	.long	1b, 4b
-#if __LINUX_ARM_ARCH__ >= 7
+#if CONFIG_ARM_THUMB && __LINUX_ARM_ARCH__ >= 6 && CONFIG_CPU_V7
 	.long	2b, 4b
 	.long	3b, 4b
 #endif
Signature · 1 line
1.7.2.5
#7 lore raw

PATCH v2 1/1 fix compilation breakage in entry-armv.S

Quoted 8 lines · Dave Martin
Quoted 7 lines · Guennadi Liakhovetski

Fix compilation failure, when Thumb support is not enabled:

arch/arm/kernel/entry-armv.S: Assembler messages:
arch/arm/kernel/entry-armv.S:501: Error: backward ref to unknown label "2:" arch/arm/kernel/entry-armv.S:502: Error: backward ref to unknown label "3:" make[2]: *** [arch/arm/kernel/entry-armv.o] Error 1

Quoted 8 lines
Quoted 1 line

That looks fine to me.

If Russell is OK with this, please send the patch to his patch system so we can get this merged.

Yes, looks fine to me too.