OSDN Git Service

riscv: consolidate __ex_table construction
authorJisheng Zhang <jszhang@kernel.org>
Thu, 18 Nov 2021 11:22:27 +0000 (19:22 +0800)
committerPalmer Dabbelt <palmer@rivosinc.com>
Thu, 6 Jan 2022 01:52:15 +0000 (17:52 -0800)
Consolidate all the __ex_table constuction code with a _ASM_EXTABLE
helper.

There should be no functional change as a result of this patch.

Signed-off-by: Jisheng Zhang <jszhang@kernel.org>
Reviewed-by: Kefeng Wang <wangkefeng.wang@huawei.com>
Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com>
arch/riscv/include/asm/futex.h
arch/riscv/include/asm/uaccess.h

index 1b00bad..3191574 100644 (file)
        "3:     li %[r],%[e]                            \n"     \
        "       jump 2b,%[t]                            \n"     \
        "       .previous                               \n"     \
-       "       .section __ex_table,\"a\"               \n"     \
-       "       .balign " RISCV_SZPTR "                 \n"     \
-       "       " RISCV_PTR " 1b, 3b                    \n"     \
-       "       .previous                               \n"     \
+               _ASM_EXTABLE(1b, 3b)                            \
        : [r] "+r" (ret), [ov] "=&r" (oldval),                  \
          [u] "+m" (*uaddr), [t] "=&r" (tmp)                    \
        : [op] "Jr" (oparg), [e] "i" (-EFAULT)                  \
@@ -103,11 +100,8 @@ futex_atomic_cmpxchg_inatomic(u32 *uval, u32 __user *uaddr,
        "4:     li %[r],%[e]                            \n"
        "       jump 3b,%[t]                            \n"
        "       .previous                               \n"
-       "       .section __ex_table,\"a\"               \n"
-       "       .balign " RISCV_SZPTR "                 \n"
-       "       " RISCV_PTR " 1b, 4b                    \n"
-       "       " RISCV_PTR " 2b, 4b                    \n"
-       "       .previous                               \n"
+               _ASM_EXTABLE(1b, 4b)                    \
+               _ASM_EXTABLE(2b, 4b)                    \
        : [r] "+r" (ret), [v] "=&r" (val), [u] "+m" (*uaddr), [t] "=&r" (tmp)
        : [ov] "Jr" (oldval), [nv] "Jr" (newval), [e] "i" (-EFAULT)
        : "memory");
index 9f92195..714cd31 100644 (file)
 
 #include <asm/pgtable.h>               /* for TASK_SIZE */
 
+#define _ASM_EXTABLE(from, to)                                         \
+       "       .pushsection    __ex_table, \"a\"\n"                    \
+       "       .balign "       RISCV_SZPTR "    \n"                    \
+       "       " RISCV_PTR     "(" #from "), (" #to ")\n"              \
+       "       .popsection\n"
+
 /*
  * User space memory access functions
  */
@@ -93,10 +99,7 @@ do {                                                         \
                "       li %1, 0\n"                             \
                "       jump 2b, %2\n"                          \
                "       .previous\n"                            \
-               "       .section __ex_table,\"a\"\n"            \
-               "       .balign " RISCV_SZPTR "\n"                      \
-               "       " RISCV_PTR " 1b, 3b\n"                 \
-               "       .previous"                              \
+                       _ASM_EXTABLE(1b, 3b)                    \
                : "+r" (err), "=&r" (__x), "=r" (__tmp)         \
                : "m" (*(ptr)), "i" (-EFAULT));                 \
        (x) = __x;                                              \
@@ -125,11 +128,8 @@ do {                                                               \
                "       li %2, 0\n"                             \
                "       jump 3b, %3\n"                          \
                "       .previous\n"                            \
-               "       .section __ex_table,\"a\"\n"            \
-               "       .balign " RISCV_SZPTR "\n"                      \
-               "       " RISCV_PTR " 1b, 4b\n"                 \
-               "       " RISCV_PTR " 2b, 4b\n"                 \
-               "       .previous"                              \
+                       _ASM_EXTABLE(1b, 4b)                    \
+                       _ASM_EXTABLE(2b, 4b)                    \
                : "+r" (err), "=&r" (__lo), "=r" (__hi),        \
                        "=r" (__tmp)                            \
                : "m" (__ptr[__LSW]), "m" (__ptr[__MSW]),       \
@@ -233,10 +233,7 @@ do {                                                               \
                "       li %0, %4\n"                            \
                "       jump 2b, %1\n"                          \
                "       .previous\n"                            \
-               "       .section __ex_table,\"a\"\n"            \
-               "       .balign " RISCV_SZPTR "\n"                      \
-               "       " RISCV_PTR " 1b, 3b\n"                 \
-               "       .previous"                              \
+                       _ASM_EXTABLE(1b, 3b)                    \
                : "+r" (err), "=r" (__tmp), "=m" (*(ptr))       \
                : "rJ" (__x), "i" (-EFAULT));                   \
 } while (0)
@@ -262,11 +259,8 @@ do {                                                               \
                "       li %0, %6\n"                            \
                "       jump 3b, %1\n"                          \
                "       .previous\n"                            \
-               "       .section __ex_table,\"a\"\n"            \
-               "       .balign " RISCV_SZPTR "\n"                      \
-               "       " RISCV_PTR " 1b, 4b\n"                 \
-               "       " RISCV_PTR " 2b, 4b\n"                 \
-               "       .previous"                              \
+                       _ASM_EXTABLE(1b, 4b)                    \
+                       _ASM_EXTABLE(2b, 4b)                    \
                : "+r" (err), "=r" (__tmp),                     \
                        "=m" (__ptr[__LSW]),                    \
                        "=m" (__ptr[__MSW])                     \