Commit | Line | Data |
---|---|---|
a37c8875 | 1 | #ifndef _ASM_POWERPC_MODULE_H |
2 | #define _ASM_POWERPC_MODULE_H | |
88ced031 | 3 | #ifdef __KERNEL__ |
6b9269ab JL |
4 | |
5 | /* | |
6 | * This program is free software; you can redistribute it and/or | |
7 | * modify it under the terms of the GNU General Public License | |
8 | * as published by the Free Software Foundation; either version | |
9 | * 2 of the License, or (at your option) any later version. | |
10 | */ | |
11 | ||
12 | #include <linux/list.h> | |
13 | #include <asm/bug.h> | |
786d35d4 | 14 | #include <asm-generic/module.h> |
6b9269ab JL |
15 | |
16 | ||
17 | #ifndef __powerpc64__ | |
18 | /* | |
19 | * Thanks to Paul M for explaining this. | |
20 | * | |
21 | * PPC can only do rel jumps += 32MB, and often the kernel and other | |
22 | * modules are furthur away than this. So, we jump to a table of | |
23 | * trampolines attached to the module (the Procedure Linkage Table) | |
24 | * whenever that happens. | |
25 | */ | |
26 | ||
27 | struct ppc_plt_entry { | |
28 | /* 16 byte jump instruction sequence (4 instructions) */ | |
29 | unsigned int jump[4]; | |
30 | }; | |
31 | #endif /* __powerpc64__ */ | |
32 | ||
33 | ||
34 | struct mod_arch_specific { | |
35 | #ifdef __powerpc64__ | |
36 | unsigned int stubs_section; /* Index of stubs section in module */ | |
37 | unsigned int toc_section; /* What section is the TOC? */ | |
f48cb8b4 SR |
38 | #ifdef CONFIG_DYNAMIC_FTRACE |
39 | unsigned long toc; | |
40 | unsigned long tramp; | |
41 | #endif | |
42 | ||
7cc45e64 | 43 | #else /* powerpc64 */ |
6b9269ab JL |
44 | /* Indices of PLT sections within module. */ |
45 | unsigned int core_plt_section; | |
46 | unsigned int init_plt_section; | |
7cc45e64 SR |
47 | #ifdef CONFIG_DYNAMIC_FTRACE |
48 | unsigned long tramp; | |
6b9269ab | 49 | #endif |
7cc45e64 | 50 | #endif /* powerpc64 */ |
6b9269ab JL |
51 | |
52 | /* List of BUG addresses, source line numbers and filenames */ | |
53 | struct list_head bug_list; | |
54 | struct bug_entry *bug_table; | |
55 | unsigned int num_bugs; | |
56 | }; | |
57 | ||
6b9269ab JL |
58 | /* |
59 | * Select ELF headers. | |
60 | * Make empty section for module_frob_arch_sections to expand. | |
61 | */ | |
62 | ||
63 | #ifdef __powerpc64__ | |
6b9269ab JL |
64 | # ifdef MODULE |
65 | asm(".section .stubs,\"ax\",@nobits; .align 3; .previous"); | |
66 | # endif | |
67 | #else | |
6b9269ab JL |
68 | # ifdef MODULE |
69 | asm(".section .plt,\"ax\",@nobits; .align 3; .previous"); | |
70 | asm(".section .init.plt,\"ax\",@nobits; .align 3; .previous"); | |
71 | # endif /* MODULE */ | |
72 | #endif | |
73 | ||
f48cb8b4 SR |
74 | #ifdef CONFIG_DYNAMIC_FTRACE |
75 | # ifdef MODULE | |
76 | asm(".section .ftrace.tramp,\"ax\",@nobits; .align 3; .previous"); | |
77 | # endif /* MODULE */ | |
78 | #endif | |
79 | ||
6b9269ab JL |
80 | |
81 | struct exception_table_entry; | |
82 | void sort_ex_table(struct exception_table_entry *start, | |
83 | struct exception_table_entry *finish); | |
84 | ||
0e0ed640 | 85 | #if defined(CONFIG_MODVERSIONS) && defined(CONFIG_PPC64) |
d4703aef | 86 | #define ARCH_RELOCATES_KCRCTAB |
0e0ed640 | 87 | #define reloc_start PHYSICAL_START |
d4703aef | 88 | #endif |
88ced031 | 89 | #endif /* __KERNEL__ */ |
a37c8875 | 90 | #endif /* _ASM_POWERPC_MODULE_H */ |