parisc: Use natural CPU alignment for bug_table
authorHelge Deller <deller@gmx.de>
Mon, 20 Nov 2023 22:30:49 +0000 (23:30 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 8 Dec 2023 07:52:19 +0000 (08:52 +0100)
commit fe76a1349f235969381832c83d703bc911021eb6 upstream.

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+
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
arch/parisc/include/asm/bug.h

index 4b6d60b941247e7f2269b67d8eda526f8eab617c..b9cad0bb4461bdb31f8d01c770f2fee3ce435769 100644 (file)
        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)
 
        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