| jdl@freescale.com | a37c887 | 2005-09-07 15:27:09 -0500 | [diff] [blame] | 1 | #ifndef _ASM_POWERPC_MODULE_H | 
 | 2 | #define _ASM_POWERPC_MODULE_H | 
| Arnd Bergmann | 88ced03 | 2005-12-16 22:43:46 +0100 | [diff] [blame] | 3 | #ifdef __KERNEL__ | 
| Jon Loeliger | 6b9269a | 2005-09-01 15:51:52 -0500 | [diff] [blame] | 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? */ | 
 | 37 | #else | 
 | 38 | 	/* Indices of PLT sections within module. */ | 
 | 39 | 	unsigned int core_plt_section; | 
 | 40 | 	unsigned int init_plt_section; | 
 | 41 | #endif | 
 | 42 |  | 
 | 43 | 	/* List of BUG addresses, source line numbers and filenames */ | 
 | 44 | 	struct list_head bug_list; | 
 | 45 | 	struct bug_entry *bug_table; | 
 | 46 | 	unsigned int num_bugs; | 
 | 47 | }; | 
 | 48 |  | 
| Jon Loeliger | 6b9269a | 2005-09-01 15:51:52 -0500 | [diff] [blame] | 49 | /* | 
 | 50 |  * Select ELF headers. | 
 | 51 |  * Make empty section for module_frob_arch_sections to expand. | 
 | 52 |  */ | 
 | 53 |  | 
 | 54 | #ifdef __powerpc64__ | 
 | 55 | #    define Elf_Shdr	Elf64_Shdr | 
 | 56 | #    define Elf_Sym	Elf64_Sym | 
 | 57 | #    define Elf_Ehdr	Elf64_Ehdr | 
 | 58 | #    ifdef MODULE | 
 | 59 | 	asm(".section .stubs,\"ax\",@nobits; .align 3; .previous"); | 
 | 60 | #    endif | 
 | 61 | #else | 
 | 62 | #    define Elf_Shdr	Elf32_Shdr | 
 | 63 | #    define Elf_Sym	Elf32_Sym | 
 | 64 | #    define Elf_Ehdr	Elf32_Ehdr | 
 | 65 | #    ifdef MODULE | 
 | 66 | 	asm(".section .plt,\"ax\",@nobits; .align 3; .previous"); | 
 | 67 | 	asm(".section .init.plt,\"ax\",@nobits; .align 3; .previous"); | 
 | 68 | #    endif	/* MODULE */ | 
 | 69 | #endif | 
 | 70 |  | 
 | 71 |  | 
 | 72 | struct exception_table_entry; | 
 | 73 | void sort_ex_table(struct exception_table_entry *start, | 
 | 74 | 		   struct exception_table_entry *finish); | 
 | 75 |  | 
| Arnd Bergmann | 88ced03 | 2005-12-16 22:43:46 +0100 | [diff] [blame] | 76 | #endif /* __KERNEL__ */ | 
| jdl@freescale.com | a37c887 | 2005-09-07 15:27:09 -0500 | [diff] [blame] | 77 | #endif	/* _ASM_POWERPC_MODULE_H */ |