Linux-libre 4.14.68-gnu
[librecmc/linux-libre.git] / arch / powerpc / include / asm / extable.h
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