diff options
Diffstat (limited to 'arch/powerpc/include/asm/module.h')
| -rw-r--r-- | arch/powerpc/include/asm/module.h | 77 | 
1 files changed, 77 insertions, 0 deletions
diff --git a/arch/powerpc/include/asm/module.h b/arch/powerpc/include/asm/module.h new file mode 100644 index 00000000000..e5f14b13ccf --- /dev/null +++ b/arch/powerpc/include/asm/module.h @@ -0,0 +1,77 @@ +#ifndef _ASM_POWERPC_MODULE_H +#define _ASM_POWERPC_MODULE_H +#ifdef __KERNEL__ + +/* + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version + * 2 of the License, or (at your option) any later version. + */ + +#include <linux/list.h> +#include <asm/bug.h> + + +#ifndef __powerpc64__ +/* + * Thanks to Paul M for explaining this. + * + * PPC can only do rel jumps += 32MB, and often the kernel and other + * modules are furthur away than this.  So, we jump to a table of + * trampolines attached to the module (the Procedure Linkage Table) + * whenever that happens. + */ + +struct ppc_plt_entry { +	/* 16 byte jump instruction sequence (4 instructions) */ +	unsigned int jump[4]; +}; +#endif	/* __powerpc64__ */ + + +struct mod_arch_specific { +#ifdef __powerpc64__ +	unsigned int stubs_section;	/* Index of stubs section in module */ +	unsigned int toc_section;	/* What section is the TOC? */ +#else +	/* Indices of PLT sections within module. */ +	unsigned int core_plt_section; +	unsigned int init_plt_section; +#endif + +	/* List of BUG addresses, source line numbers and filenames */ +	struct list_head bug_list; +	struct bug_entry *bug_table; +	unsigned int num_bugs; +}; + +/* + * Select ELF headers. + * Make empty section for module_frob_arch_sections to expand. + */ + +#ifdef __powerpc64__ +#    define Elf_Shdr	Elf64_Shdr +#    define Elf_Sym	Elf64_Sym +#    define Elf_Ehdr	Elf64_Ehdr +#    ifdef MODULE +	asm(".section .stubs,\"ax\",@nobits; .align 3; .previous"); +#    endif +#else +#    define Elf_Shdr	Elf32_Shdr +#    define Elf_Sym	Elf32_Sym +#    define Elf_Ehdr	Elf32_Ehdr +#    ifdef MODULE +	asm(".section .plt,\"ax\",@nobits; .align 3; .previous"); +	asm(".section .init.plt,\"ax\",@nobits; .align 3; .previous"); +#    endif	/* MODULE */ +#endif + + +struct exception_table_entry; +void sort_ex_table(struct exception_table_entry *start, +		   struct exception_table_entry *finish); + +#endif /* __KERNEL__ */ +#endif	/* _ASM_POWERPC_MODULE_H */  |