summaryrefslogtreecommitdiffstats
path: root/arch/parisc
diff options
context:
space:
mode:
authorHelge Deller <deller@gmx.de>2023-11-20 23:30:49 +0100
committerHelge Deller <deller@gmx.de>2023-11-25 09:43:18 +0100
commitfe76a1349f235969381832c83d703bc911021eb6 (patch)
treebcc7e2a180c44b042124d89463353106480c1f2d /arch/parisc
parentparisc: Ensure 32-bit alignment on parisc unwind section (diff)
downloadlinux-fe76a1349f235969381832c83d703bc911021eb6.tar.xz
linux-fe76a1349f235969381832c83d703bc911021eb6.zip
parisc: Use natural CPU alignment for bug_table
Make sure that the __bug_table section gets 32- or 64-bit aligned, depending if a 32- or 64-bit kernel is being built. Mark it non-writeable and use .blockz instead of the .org assembler directive to pad the struct. Signed-off-by: Helge Deller <deller@gmx.de> Cc: stable@vger.kernel.org # v6.0+
Diffstat (limited to 'arch/parisc')
-rw-r--r--arch/parisc/include/asm/bug.h30
1 files changed, 18 insertions, 12 deletions
diff --git a/arch/parisc/include/asm/bug.h b/arch/parisc/include/asm/bug.h
index 4b6d60b94124..b9cad0bb4461 100644
--- a/arch/parisc/include/asm/bug.h
+++ b/arch/parisc/include/asm/bug.h
@@ -28,13 +28,15 @@
do { \
asm volatile("\n" \
"1:\t" PARISC_BUG_BREAK_ASM "\n" \
- "\t.pushsection __bug_table,\"aw\"\n" \
+ "\t.pushsection __bug_table,\"a\"\n" \
+ "\t.align %4\n" \
"2:\t" ASM_WORD_INSN "1b, %c0\n" \
- "\t.short %c1, %c2\n" \
- "\t.org 2b+%c3\n" \
+ "\t.short %1, %2\n" \
+ "\t.blockz %3-2*%4-2*2\n" \
"\t.popsection" \
: : "i" (__FILE__), "i" (__LINE__), \
- "i" (0), "i" (sizeof(struct bug_entry)) ); \
+ "i" (0), "i" (sizeof(struct bug_entry)), \
+ "i" (sizeof(long)) ); \
unreachable(); \
} while(0)
@@ -51,27 +53,31 @@
do { \
asm volatile("\n" \
"1:\t" PARISC_BUG_BREAK_ASM "\n" \
- "\t.pushsection __bug_table,\"aw\"\n" \
+ "\t.pushsection __bug_table,\"a\"\n" \
+ "\t.align %4\n" \
"2:\t" ASM_WORD_INSN "1b, %c0\n" \
- "\t.short %c1, %c2\n" \
- "\t.org 2b+%c3\n" \
+ "\t.short %1, %2\n" \
+ "\t.blockz %3-2*%4-2*2\n" \
"\t.popsection" \
: : "i" (__FILE__), "i" (__LINE__), \
"i" (BUGFLAG_WARNING|(flags)), \
- "i" (sizeof(struct bug_entry)) ); \
+ "i" (sizeof(struct bug_entry)), \
+ "i" (sizeof(long)) ); \
} while(0)
#else
#define __WARN_FLAGS(flags) \
do { \
asm volatile("\n" \
"1:\t" PARISC_BUG_BREAK_ASM "\n" \
- "\t.pushsection __bug_table,\"aw\"\n" \
+ "\t.pushsection __bug_table,\"a\"\n" \
+ "\t.align %2\n" \
"2:\t" ASM_WORD_INSN "1b\n" \
- "\t.short %c0\n" \
- "\t.org 2b+%c1\n" \
+ "\t.short %0\n" \
+ "\t.blockz %1-%2-2\n" \
"\t.popsection" \
: : "i" (BUGFLAG_WARNING|(flags)), \
- "i" (sizeof(struct bug_entry)) ); \
+ "i" (sizeof(struct bug_entry)), \
+ "i" (sizeof(long)) ); \
} while(0)
#endif