[PATCH v2] powerpc: Allow relative pointers in bug table entries
Christophe Leroy
christophe.leroy at csgroup.eu
Tue Dec 1 17:25:38 AEDT 2020
Le 01/12/2020 à 01:52, Jordan Niethe a écrit :
> 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: Jordan Niethe <jniethe5 at gmail.com>
Reviewed-by: Christophe Leroy <christophe.leroy at csgroup.eu>
Tested-by: Christophe Leroy <christophe.leroy at csgroup.eu> # on PPC32
> ---
> v2: Remove non-relative pointers code
> ---
> arch/powerpc/Kconfig | 4 ++++
> arch/powerpc/include/asm/bug.h | 8 ++++----
> arch/powerpc/xmon/xmon.c | 4 ++--
> 3 files changed, 10 insertions(+), 6 deletions(-)
>
> diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
> index e9f13fe08492..294108e0e5c6 100644
> --- a/arch/powerpc/Kconfig
> +++ b/arch/powerpc/Kconfig
> @@ -311,6 +311,10 @@ config GENERIC_BUG
> default y
> depends on BUG
>
> +config GENERIC_BUG_RELATIVE_POINTERS
> + def_bool y
> + depends on GENERIC_BUG
> +
> config SYS_SUPPORTS_APM_EMULATION
> default y if PMAC_APM_EMU
> bool
> diff --git a/arch/powerpc/include/asm/bug.h b/arch/powerpc/include/asm/bug.h
> index 338f36cd9934..ba0500872cce 100644
> --- a/arch/powerpc/include/asm/bug.h
> +++ b/arch/powerpc/include/asm/bug.h
> @@ -12,7 +12,7 @@
> #ifdef CONFIG_DEBUG_BUGVERBOSE
> .macro EMIT_BUG_ENTRY addr,file,line,flags
> .section __bug_table,"aw"
> -5001: PPC_LONG \addr, 5002f
> +5001: .4byte \addr - 5001b, 5002f - 5001b
> .short \line, \flags
> .org 5001b+BUG_ENTRY_SIZE
> .previous
> @@ -23,7 +23,7 @@
> #else
> .macro EMIT_BUG_ENTRY addr,file,line,flags
> .section __bug_table,"aw"
> -5001: PPC_LONG \addr
> +5001: .4byte \addr - 5001b
> .short \flags
> .org 5001b+BUG_ENTRY_SIZE
> .previous
> @@ -36,14 +36,14 @@
> #ifdef CONFIG_DEBUG_BUGVERBOSE
> #define _EMIT_BUG_ENTRY \
> ".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" \
> ".org 2b+%3\n" \
> ".previous\n"
> #else
> #define _EMIT_BUG_ENTRY \
> ".section __bug_table,\"aw\"\n" \
> - "2:\t" PPC_LONG "1b\n" \
> + "2:\t.4byte 1b - 2b\n" \
> "\t.short %2\n" \
> ".org 2b+%3\n" \
> ".previous\n"
> diff --git a/arch/powerpc/xmon/xmon.c b/arch/powerpc/xmon/xmon.c
> index 55c43a6c9111..9704c81aff7d 100644
> --- a/arch/powerpc/xmon/xmon.c
> +++ b/arch/powerpc/xmon/xmon.c
> @@ -1745,9 +1745,9 @@ static void print_bug_trap(struct pt_regs *regs)
>
> #ifdef CONFIG_DEBUG_BUGVERBOSE
> printf("kernel BUG at %s:%u!\n",
> - bug->file, bug->line);
> + (char *)bug + bug->file_disp, bug->line);
> #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 /* CONFIG_BUG */
> }
>
More information about the Linuxppc-dev
mailing list