]>
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> | |
14 | ||
15 | ||
16 | #ifndef __powerpc64__ | |
17 | /* | |
18 | * Thanks to Paul M for explaining this. | |
19 | * | |
20 | * PPC can only do rel jumps += 32MB, and often the kernel and other | |
21 | * modules are furthur away than this. So, we jump to a table of | |
22 | * trampolines attached to the module (the Procedure Linkage Table) | |
23 | * whenever that happens. | |
24 | */ | |
25 | ||
26 | struct ppc_plt_entry { | |
27 | /* 16 byte jump instruction sequence (4 instructions) */ | |
28 | unsigned int jump[4]; | |
29 | }; | |
30 | #endif /* __powerpc64__ */ | |
31 | ||
32 | ||
33 | struct mod_arch_specific { | |
34 | #ifdef __powerpc64__ | |
35 | unsigned int stubs_section; /* Index of stubs section in module */ | |
36 | unsigned int toc_section; /* What section is the TOC? */ | |
f48cb8b4 SR |
37 | #ifdef CONFIG_DYNAMIC_FTRACE |
38 | unsigned long toc; | |
39 | unsigned long tramp; | |
40 | #endif | |
41 | ||
7cc45e64 | 42 | #else /* powerpc64 */ |
6b9269ab JL |
43 | /* Indices of PLT sections within module. */ |
44 | unsigned int core_plt_section; | |
45 | unsigned int init_plt_section; | |
7cc45e64 SR |
46 | #ifdef CONFIG_DYNAMIC_FTRACE |
47 | unsigned long tramp; | |
6b9269ab | 48 | #endif |
7cc45e64 | 49 | #endif /* powerpc64 */ |
6b9269ab JL |
50 | |
51 | /* List of BUG addresses, source line numbers and filenames */ | |
52 | struct list_head bug_list; | |
53 | struct bug_entry *bug_table; | |
54 | unsigned int num_bugs; | |
55 | }; | |
56 | ||
6b9269ab JL |
57 | /* |
58 | * Select ELF headers. | |
59 | * Make empty section for module_frob_arch_sections to expand. | |
60 | */ | |
61 | ||
62 | #ifdef __powerpc64__ | |
63 | # define Elf_Shdr Elf64_Shdr | |
64 | # define Elf_Sym Elf64_Sym | |
65 | # define Elf_Ehdr Elf64_Ehdr | |
66 | # ifdef MODULE | |
67 | asm(".section .stubs,\"ax\",@nobits; .align 3; .previous"); | |
68 | # endif | |
69 | #else | |
70 | # define Elf_Shdr Elf32_Shdr | |
71 | # define Elf_Sym Elf32_Sym | |
72 | # define Elf_Ehdr Elf32_Ehdr | |
73 | # ifdef MODULE | |
74 | asm(".section .plt,\"ax\",@nobits; .align 3; .previous"); | |
75 | asm(".section .init.plt,\"ax\",@nobits; .align 3; .previous"); | |
76 | # endif /* MODULE */ | |
77 | #endif | |
78 | ||
f48cb8b4 SR |
79 | #ifdef CONFIG_DYNAMIC_FTRACE |
80 | # ifdef MODULE | |
81 | asm(".section .ftrace.tramp,\"ax\",@nobits; .align 3; .previous"); | |
82 | # endif /* MODULE */ | |
83 | #endif | |
84 | ||
6b9269ab JL |
85 | |
86 | struct exception_table_entry; | |
87 | void sort_ex_table(struct exception_table_entry *start, | |
88 | struct exception_table_entry *finish); | |
89 | ||
88ced031 | 90 | #endif /* __KERNEL__ */ |
a37c8875 | 91 | #endif /* _ASM_POWERPC_MODULE_H */ |