diff options
Diffstat (limited to 'arch/powerpc/include/asm/exception-64s.h')
-rw-r--r-- | arch/powerpc/include/asm/exception-64s.h | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/arch/powerpc/include/asm/exception-64s.h b/arch/powerpc/include/asm/exception-64s.h index 2e4e7d878c8e..84d49b197c32 100644 --- a/arch/powerpc/include/asm/exception-64s.h +++ b/arch/powerpc/include/asm/exception-64s.h | |||
@@ -93,6 +93,10 @@ | |||
93 | ld reg,PACAKBASE(r13); /* get high part of &label */ \ | 93 | ld reg,PACAKBASE(r13); /* get high part of &label */ \ |
94 | ori reg,reg,(FIXED_SYMBOL_ABS_ADDR(label))@l; | 94 | ori reg,reg,(FIXED_SYMBOL_ABS_ADDR(label))@l; |
95 | 95 | ||
96 | #define __LOAD_HANDLER(reg, label) \ | ||
97 | ld reg,PACAKBASE(r13); \ | ||
98 | ori reg,reg,(ABS_ADDR(label))@l; | ||
99 | |||
96 | /* Exception register prefixes */ | 100 | /* Exception register prefixes */ |
97 | #define EXC_HV H | 101 | #define EXC_HV H |
98 | #define EXC_STD | 102 | #define EXC_STD |
@@ -208,6 +212,18 @@ END_FTR_SECTION_NESTED(ftr,ftr,943) | |||
208 | #define kvmppc_interrupt kvmppc_interrupt_pr | 212 | #define kvmppc_interrupt kvmppc_interrupt_pr |
209 | #endif | 213 | #endif |
210 | 214 | ||
215 | #ifdef CONFIG_RELOCATABLE | ||
216 | #define BRANCH_TO_COMMON(reg, label) \ | ||
217 | __LOAD_HANDLER(reg, label); \ | ||
218 | mtctr reg; \ | ||
219 | bctr | ||
220 | |||
221 | #else | ||
222 | #define BRANCH_TO_COMMON(reg, label) \ | ||
223 | b label | ||
224 | |||
225 | #endif | ||
226 | |||
211 | #define __KVM_HANDLER_PROLOG(area, n) \ | 227 | #define __KVM_HANDLER_PROLOG(area, n) \ |
212 | BEGIN_FTR_SECTION_NESTED(947) \ | 228 | BEGIN_FTR_SECTION_NESTED(947) \ |
213 | ld r10,area+EX_CFAR(r13); \ | 229 | ld r10,area+EX_CFAR(r13); \ |