Commit | Line | Data |
---|---|---|
b2441318 | 1 | /* SPDX-License-Identifier: GPL-2.0 */ |
fbcd54b1 JL |
2 | #ifndef _ASM_POWERPC_SECTIONS_H |
3 | #define _ASM_POWERPC_SECTIONS_H | |
88ced031 | 4 | #ifdef __KERNEL__ |
1da177e4 | 5 | |
2d291e90 JB |
6 | #include <linux/elf.h> |
7 | #include <linux/uaccess.h> | |
6f07048c | 8 | |
0dc690e4 CL |
9 | #ifdef CONFIG_HAVE_FUNCTION_DESCRIPTORS |
10 | typedef struct func_desc func_desc_t; | |
11 | #endif | |
12 | ||
1da177e4 LT |
13 | #include <asm-generic/sections.h> |
14 | ||
7aa5b018 | 15 | extern char __head_end[]; |
b150a4d1 | 16 | extern char __srwx_boundary[]; |
7aa5b018 | 17 | |
eb316ae7 ME |
18 | /* Patch sites */ |
19 | extern s32 patch__call_flush_branch_caches1; | |
20 | extern s32 patch__call_flush_branch_caches2; | |
21 | extern s32 patch__call_flush_branch_caches3; | |
22 | extern s32 patch__flush_count_cache_return; | |
23 | extern s32 patch__flush_link_stack_return; | |
24 | extern s32 patch__call_kvm_flush_link_stack; | |
25 | extern s32 patch__call_kvm_flush_link_stack_p9; | |
26 | extern s32 patch__memset_nocache, patch__memcpy_nocache; | |
27 | ||
28 | extern long flush_branch_caches; | |
29 | extern long kvm_flush_link_stack; | |
30 | ||
fbcd54b1 | 31 | #ifdef __powerpc64__ |
1da177e4 | 32 | |
429d2e83 | 33 | extern char __start_interrupts[]; |
d715e433 | 34 | extern char __end_interrupts[]; |
1da177e4 | 35 | |
bd3524fe NP |
36 | #ifdef CONFIG_PPC_POWERNV |
37 | extern char start_real_trampolines[]; | |
38 | extern char end_real_trampolines[]; | |
39 | extern char start_virt_trampolines[]; | |
40 | extern char end_virt_trampolines[]; | |
41 | #endif | |
42 | ||
a3ad84da AM |
43 | /* |
44 | * This assumes the kernel is never compiled -mcmodel=small or | |
45 | * the total .toc is always less than 64k. | |
46 | */ | |
a5cab83c ME |
47 | static inline unsigned long kernel_toc_addr(void) |
48 | { | |
7e3a68be NP |
49 | #ifdef CONFIG_PPC_KERNEL_PCREL |
50 | BUILD_BUG(); | |
51 | return -1UL; | |
52 | #else | |
a3ad84da AM |
53 | unsigned long toc_ptr; |
54 | ||
55 | asm volatile("mr %0, 2" : "=r" (toc_ptr)); | |
56 | return toc_ptr; | |
7e3a68be | 57 | #endif |
a5cab83c ME |
58 | } |
59 | ||
429d2e83 MS |
60 | static inline int overlaps_interrupt_vector_text(unsigned long start, |
61 | unsigned long end) | |
62 | { | |
63 | unsigned long real_start, real_end; | |
64 | real_start = __start_interrupts - _stext; | |
65 | real_end = __end_interrupts - _stext; | |
66 | ||
67 | return start < (unsigned long)__va(real_end) && | |
68 | (unsigned long)__va(real_start) < end; | |
69 | } | |
70 | ||
549e8152 PM |
71 | static inline int overlaps_kernel_text(unsigned long start, unsigned long end) |
72 | { | |
73 | return start < (unsigned long)__init_end && | |
74 | (unsigned long)_stext < end; | |
75 | } | |
76 | ||
f3993a03 NR |
77 | #else |
78 | static inline unsigned long kernel_toc_addr(void) { BUILD_BUG(); return -1UL; } | |
1da177e4 | 79 | #endif |
fbcd54b1 | 80 | |
88ced031 | 81 | #endif /* __KERNEL__ */ |
fbcd54b1 | 82 | #endif /* _ASM_POWERPC_SECTIONS_H */ |