diff mbox

Build failure with v3.17-rc1

Message ID 20140821211100.GS11146@saruman.home
State New
Headers show

Commit Message

Felipe Balbi Aug. 21, 2014, 9:11 p.m. UTC
Hi Russell,

When running my randconfig build tests, I noticed that I had a build
failure at arch/arm/kernel/patch.c

KCONFIG_SEED=0x26B77624
arch/arm/kernel/patch.c: In function ‘__patch_text’:
arch/arm/kernel/patch.c:35:4: error: implicit declaration of function ‘__opcode_to_mem_thumb32’ [-Werror=implicit-function-declaration]
    insn = __opcode_to_mem_thumb32(insn);
    ^
cc1: some warnings being treated as errors
make[1]: *** [arch/arm/kernel/patch.o] Error 1
make[1]: *** Waiting for unfinished jobs....
make: *** [arch/arm/kernel] Error 2
make: *** Waiting for unfinished jobs....

Looking at the definition of __opcode_to_mem_thumb32 it's easy to see
that it's not defined when ! CONFIG_CPU_ENDIAN_BE8 and that's exactly
what I have in my generated defconfig (attached).

Would below patch be the correct fix for this ?


if it is, I can send it as a formal patch and/or add it to your patch
tracking system. Otherwise, let me know what would be the best fix and
I'll either fix or build-test a patch from you, whatever works best.

cheers

Comments

Russell King - ARM Linux Aug. 21, 2014, 10:33 p.m. UTC | #1
On Thu, Aug 21, 2014 at 04:11:00PM -0500, Felipe Balbi wrote:
> Hi Russell,
> 
> When running my randconfig build tests, I noticed that I had a build
> failure at arch/arm/kernel/patch.c
> 
> KCONFIG_SEED=0x26B77624
> arch/arm/kernel/patch.c: In function ‘__patch_text’:
> arch/arm/kernel/patch.c:35:4: error: implicit declaration of function ‘__opcode_to_mem_thumb32’ [-Werror=implicit-function-declaration]
>     insn = __opcode_to_mem_thumb32(insn);
>     ^
> cc1: some warnings being treated as errors
> make[1]: *** [arch/arm/kernel/patch.o] Error 1
> make[1]: *** Waiting for unfinished jobs....
> make: *** [arch/arm/kernel] Error 2
> make: *** Waiting for unfinished jobs....
> 
> Looking at the definition of __opcode_to_mem_thumb32 it's easy to see
> that it's not defined when ! CONFIG_CPU_ENDIAN_BE8 and that's exactly
> what I have in my generated defconfig (attached).
> 
> Would below patch be the correct fix for this ?

I think you should read a bit more of the file first.  In the ifdef which
starts in the context of your patch:

#ifndef CONFIG_CPU_ENDIAN_BE32
/*
 * On BE32 systems, using 32-bit accesses to store Thumb instructions will not
 * work in all cases, due to alignment constraints.  For now, a correct
 * version is not provided for BE32.
 */
#define __opcode_to_mem_thumb32(x) ___opcode_swahw32(x)
#define ___asm_opcode_to_mem_thumb32(x) ___asm_opcode_swahw32(x)
#endif

The contents of the ifdef cover the !BE32 case.  It doesn't cover the BE32
case, and the BE32 case is what is being referred to in the comment.

It seems that it is intentionally not provided because it's currently
broken, and has been broken for about the last two years.

Further information can be found by looking in the git history, which
brings up commit ID 57b9da32addd.  This commit text implies the need
for __opcode_to_mem_thumb32() is an error.
diff mbox

Patch

diff --git a/arch/arm/include/asm/opcodes.h b/arch/arm/include/asm/opcodes.h
index e796c59..d74eb26 100644
--- a/arch/arm/include/asm/opcodes.h
+++ b/arch/arm/include/asm/opcodes.h
@@ -111,6 +111,7 @@  extern asmlinkage unsigned int arm_check_condition(u32 opcode, u32 psr);
 
 #define __opcode_to_mem_arm(x) ___opcode_identity32(x)
 #define __opcode_to_mem_thumb16(x) ___opcode_identity16(x)
+#define __opcode_to_mem_thumb32(x) ___opcode_identity32(x)
 #define ___asm_opcode_to_mem_arm(x) ___asm_opcode_identity32(x)
 #define ___asm_opcode_to_mem_thumb16(x) ___asm_opcode_identity16(x)
 #ifndef CONFIG_CPU_ENDIAN_BE32