Commit 1baa1f70 authored by Jordan Niethe's avatar Jordan Niethe Committed by Michael Ellerman

powerpc: Allow relative pointers in bug table entries

This enables GENERIC_BUG_RELATIVE_POINTERS on Power so that 32-bit
offsets are stored in the bug entries rather than 64-bit pointers.
While this doesn't save space for 32-bit machines, use it anyway so
there is only one code path.
Signed-off-by: default avatarJordan Niethe <jniethe5@gmail.com>
Reviewed-by: default avatarChristophe Leroy <christophe.leroy@csgroup.eu>
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/20201201005203.15210-1-jniethe5@gmail.com
parent f3e90408
...@@ -313,6 +313,10 @@ config GENERIC_BUG ...@@ -313,6 +313,10 @@ config GENERIC_BUG
default y default y
depends on BUG depends on BUG
config GENERIC_BUG_RELATIVE_POINTERS
def_bool y
depends on GENERIC_BUG
config SYS_SUPPORTS_APM_EMULATION config SYS_SUPPORTS_APM_EMULATION
default y if PMAC_APM_EMU default y if PMAC_APM_EMU
bool bool
......
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
#ifdef CONFIG_DEBUG_BUGVERBOSE #ifdef CONFIG_DEBUG_BUGVERBOSE
.macro EMIT_BUG_ENTRY addr,file,line,flags .macro EMIT_BUG_ENTRY addr,file,line,flags
.section __bug_table,"aw" .section __bug_table,"aw"
5001: PPC_LONG \addr, 5002f 5001: .4byte \addr - 5001b, 5002f - 5001b
.short \line, \flags .short \line, \flags
.org 5001b+BUG_ENTRY_SIZE .org 5001b+BUG_ENTRY_SIZE
.previous .previous
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
#else #else
.macro EMIT_BUG_ENTRY addr,file,line,flags .macro EMIT_BUG_ENTRY addr,file,line,flags
.section __bug_table,"aw" .section __bug_table,"aw"
5001: PPC_LONG \addr 5001: .4byte \addr - 5001b
.short \flags .short \flags
.org 5001b+BUG_ENTRY_SIZE .org 5001b+BUG_ENTRY_SIZE
.previous .previous
...@@ -36,14 +36,14 @@ ...@@ -36,14 +36,14 @@
#ifdef CONFIG_DEBUG_BUGVERBOSE #ifdef CONFIG_DEBUG_BUGVERBOSE
#define _EMIT_BUG_ENTRY \ #define _EMIT_BUG_ENTRY \
".section __bug_table,\"aw\"\n" \ ".section __bug_table,\"aw\"\n" \
"2:\t" PPC_LONG "1b, %0\n" \ "2:\t.4byte 1b - 2b, %0 - 2b\n" \
"\t.short %1, %2\n" \ "\t.short %1, %2\n" \
".org 2b+%3\n" \ ".org 2b+%3\n" \
".previous\n" ".previous\n"
#else #else
#define _EMIT_BUG_ENTRY \ #define _EMIT_BUG_ENTRY \
".section __bug_table,\"aw\"\n" \ ".section __bug_table,\"aw\"\n" \
"2:\t" PPC_LONG "1b\n" \ "2:\t.4byte 1b - 2b\n" \
"\t.short %2\n" \ "\t.short %2\n" \
".org 2b+%3\n" \ ".org 2b+%3\n" \
".previous\n" ".previous\n"
......
...@@ -1747,9 +1747,9 @@ static void print_bug_trap(struct pt_regs *regs) ...@@ -1747,9 +1747,9 @@ static void print_bug_trap(struct pt_regs *regs)
#ifdef CONFIG_DEBUG_BUGVERBOSE #ifdef CONFIG_DEBUG_BUGVERBOSE
printf("kernel BUG at %s:%u!\n", printf("kernel BUG at %s:%u!\n",
bug->file, bug->line); (char *)bug + bug->file_disp, bug->line);
#else #else
printf("kernel BUG at %px!\n", (void *)bug->bug_addr); printf("kernel BUG at %px!\n", (void *)bug + bug->bug_addr_disp);
#endif #endif
#endif /* CONFIG_BUG */ #endif /* CONFIG_BUG */
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment