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 <jniet...@gmail.com>

Reviewed-by: Christophe Leroy <christophe.le...@csgroup.eu>
Tested-by: Christophe Leroy <christophe.le...@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 */
  }

Reply via email to