Commit 508f28c6 authored by Youling Tang's avatar Youling Tang Committed by Huacai Chen
Browse files

LoongArch: Consolidate __ex_table construction



Consolidate all the __ex_table constuction code with a _ASM_EXTABLE or
_asm_extable helper.

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

Signed-off-by: default avatarYouling Tang <tangyouling@loongson.cn>
Signed-off-by: default avatarHuacai Chen <chenhuacai@loongson.cn>
parent 1a34e7f2
Loading
Loading
Loading
Loading
+35 −0
Original line number Diff line number Diff line
/* SPDX-License-Identifier: GPL-2.0-only */
#ifndef __ASM_ASM_EXTABLE_H
#define __ASM_ASM_EXTABLE_H

#ifdef __ASSEMBLY__

#define __ASM_EXTABLE_RAW(insn, fixup)			\
	.pushsection	__ex_table, "a";		\
	.balign		8;				\
	.quad		(insn);				\
	.quad		(fixup);			\
	.popsection;

	.macro		_asm_extable, insn, fixup
	__ASM_EXTABLE_RAW(\insn, \fixup)
	.endm

#else /* __ASSEMBLY__ */

#include <linux/bits.h>
#include <linux/stringify.h>

#define __ASM_EXTABLE_RAW(insn, fixup)			\
	".pushsection	__ex_table, \"a\"\n"		\
	".balign	8\n"				\
	".quad		((" insn "))\n"			\
	".quad		((" fixup "))\n"		\
	".popsection\n"

#define _ASM_EXTABLE(insn, fixup)	\
	__ASM_EXTABLE_RAW(#insn, #fixup)

#endif /* __ASSEMBLY__ */

#endif /* __ASM_ASM_EXTABLE_H */
+5 −8
Original line number Diff line number Diff line
@@ -7,6 +7,7 @@

#include <linux/futex.h>
#include <linux/uaccess.h>
#include <asm/asm-extable.h>
#include <asm/barrier.h>
#include <asm/errno.h>

@@ -22,10 +23,8 @@
	"4:	li.w	%0, %6				\n"	\
	"	b	3b				\n"	\
	"	.previous				\n"	\
	"	.section __ex_table,\"a\"		\n"	\
	"	"__UA_ADDR "\t1b, 4b			\n"	\
	"	"__UA_ADDR "\t2b, 4b			\n"	\
	"	.previous				\n"	\
	_ASM_EXTABLE(1b, 4b)					\
	_ASM_EXTABLE(2b, 4b)					\
	: "=r" (ret), "=&r" (oldval),				\
	  "=ZC" (*uaddr)					\
	: "0" (0), "ZC" (*uaddr), "Jr" (oparg),			\
@@ -90,10 +89,8 @@ futex_atomic_cmpxchg_inatomic(u32 *uval, u32 __user *uaddr, u32 oldval, u32 newv
	"4:	li.d	%0, %6					\n"
	"	b	3b					\n"
	"	.previous					\n"
	"	.section __ex_table,\"a\"			\n"
	"	"__UA_ADDR "\t1b, 4b				\n"
	"	"__UA_ADDR "\t2b, 4b				\n"
	"	.previous					\n"
	_ASM_EXTABLE(1b, 4b)
	_ASM_EXTABLE(2b, 4b)
	: "+r" (ret), "=&r" (val), "=ZC" (*uaddr)
	: "ZC" (*uaddr), "Jr" (oldval), "Jr" (newval),
	  "i" (-EFAULT)
+3 −6
Original line number Diff line number Diff line
@@ -15,6 +15,7 @@
#include <linux/string.h>
#include <linux/extable.h>
#include <asm/pgtable.h>
#include <asm/asm-extable.h>
#include <asm-generic/extable.h>
#include <asm-generic/access_ok.h>

@@ -165,9 +166,7 @@ do { \
	"	move	%1, $zero				\n"	\
	"	b	2b					\n"	\
	"	.previous					\n"	\
	"	.section __ex_table,\"a\"			\n"	\
	"	"__UA_ADDR "\t1b, 3b				\n"	\
	"	.previous					\n"	\
	_ASM_EXTABLE(1b, 3b)						\
	: "+r" (__gu_err), "=r" (__gu_tmp)				\
	: "m" (__m(ptr)), "i" (-EFAULT));				\
									\
@@ -196,9 +195,7 @@ do { \
	"3:	li.w	%0, %3					\n"	\
	"	b	2b					\n"	\
	"	.previous					\n"	\
	"	.section	__ex_table,\"a\"		\n"	\
	"	" __UA_ADDR "	1b, 3b				\n"	\
	"	.previous					\n"	\
	_ASM_EXTABLE(1b, 3b)						\
	: "+r" (__pu_err), "=m" (__m(ptr))				\
	: "Jr" (__pu_val), "i" (-EFAULT));				\
}
+2 −3
Original line number Diff line number Diff line
@@ -8,6 +8,7 @@
 */
#include <asm/asm.h>
#include <asm/asmmacro.h>
#include <asm/asm-extable.h>
#include <asm/asm-offsets.h>
#include <asm/errno.h>
#include <asm/export.h>
@@ -21,9 +22,7 @@

	.macro	EX insn, reg, src, offs
.ex\@:	\insn	\reg, \src, \offs
	.section __ex_table,"a"
	PTR	.ex\@, fault
	.previous
	_asm_extable .ex\@, fault
	.endm

	.macro sc_save_fp base
+2 −3
Original line number Diff line number Diff line
@@ -5,6 +5,7 @@

#include <asm/asm.h>
#include <asm/asmmacro.h>
#include <asm/asm-extable.h>
#include <asm/export.h>
#include <asm/regdef.h>

@@ -15,9 +16,7 @@
	jr	ra
	.previous
.endif
	.section __ex_table, "a"
	PTR	\from\()b, \to\()b
	.previous
	_asm_extable \from\()b, \to\()b
.endm

/*
Loading