If CONFIG_DEBUG_INFO_SPLIT is not set but CONFIG_DEBUG_INFO is, the kernel makefile just adds "-g" and the scripts/gcc-goto.sh test for the "asm goto ("" :::: entry)" support succedes and adds -DCC_HAVE_ASM_GOTO to KBUILD_CFLAGS/KBUILD_AFLAGS. This effectively makes OPAL_BRANCH() a noop (or something similar).
With CONFIG_DEBUG_INFO_SPLIT=y, the makefile adds "-gsplit-dwarf" which somehow makes the scripts/gcc-goto.sh test fail and not have CC_HAVE_ASM_GOTO defined so the alternative OPAL_BRANCH() is used and this particular chunk clobbers r12 where the parenting code - OPAL_CALL() - stores MSR; as the result, the kernel oops'es right after early_setup() because of broken MSR. This replaces r12 with r11 which is overwritten right after OPAL_BRANCH(opal_tracepoint_entry) anyway. I used gcc 5.4.1 20161205 built from sha1 ffadbf3ae29. Fixes: ab9bad0ead9a ("powerpc/powernv: Remove separate entry for OPAL real mode calls") Suggested-by: Paul Mackerras <pau...@samba.org> Signed-off-by: Alexey Kardashevskiy <a...@ozlabs.ru> --- arch/powerpc/platforms/powernv/opal-wrappers.S | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/arch/powerpc/platforms/powernv/opal-wrappers.S b/arch/powerpc/platforms/powernv/opal-wrappers.S index 6693f75e93d1..da8a0f7a035c 100644 --- a/arch/powerpc/platforms/powernv/opal-wrappers.S +++ b/arch/powerpc/platforms/powernv/opal-wrappers.S @@ -39,8 +39,8 @@ opal_tracepoint_refcount: BEGIN_FTR_SECTION; \ b 1f; \ END_FTR_SECTION(0, 1); \ - ld r12,opal_tracepoint_refcount@toc(r2); \ - cmpdi r12,0; \ + ld r11,opal_tracepoint_refcount@toc(r2); \ + cmpdi r11,0; \ bne- LABEL; \ 1: -- 2.11.0