Message ID | 20140821211100.GS11146@saruman.home |
---|---|
State | New |
Headers | show |
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 --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