xref: /openbmc/linux/arch/powerpc/include/asm/extable.h (revision 55fd7e02)
1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef _ARCH_POWERPC_EXTABLE_H
3 #define _ARCH_POWERPC_EXTABLE_H
4 
5 /*
6  * The exception table consists of pairs of relative addresses: the first is
7  * the address of an instruction that is allowed to fault, and the second is
8  * the address at which the program should continue.  No registers are
9  * modified, so it is entirely up to the continuation code to figure out what
10  * to do.
11  *
12  * All the routines below use bits of fixup code that are out of line with the
13  * main instruction path.  This means when everything is well, we don't even
14  * have to jump over them.  Further, they do not intrude on our cache or tlb
15  * entries.
16  */
17 
18 #define ARCH_HAS_RELATIVE_EXTABLE
19 
20 struct exception_table_entry {
21 	int insn;
22 	int fixup;
23 };
24 
25 static inline unsigned long extable_fixup(const struct exception_table_entry *x)
26 {
27 	return (unsigned long)&x->fixup + x->fixup;
28 }
29 
30 #endif
31