Greg Kroah-Hartman | b244131 | 2017-11-01 15:07:57 +0100 | [diff] [blame] | 1 | /* SPDX-License-Identifier: GPL-2.0 */ |
Al Viro | 527b5ba | 2016-12-26 00:50:06 -0500 | [diff] [blame] | 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 |