1*1da177e4SLinus Torvalds #ifndef _LINUX_MODULELOADER_H 2*1da177e4SLinus Torvalds #define _LINUX_MODULELOADER_H 3*1da177e4SLinus Torvalds /* The stuff needed for archs to support modules. */ 4*1da177e4SLinus Torvalds 5*1da177e4SLinus Torvalds #include <linux/module.h> 6*1da177e4SLinus Torvalds #include <linux/elf.h> 7*1da177e4SLinus Torvalds 8*1da177e4SLinus Torvalds /* These must be implemented by the specific architecture */ 9*1da177e4SLinus Torvalds 10*1da177e4SLinus Torvalds /* Adjust arch-specific sections. Return 0 on success. */ 11*1da177e4SLinus Torvalds int module_frob_arch_sections(Elf_Ehdr *hdr, 12*1da177e4SLinus Torvalds Elf_Shdr *sechdrs, 13*1da177e4SLinus Torvalds char *secstrings, 14*1da177e4SLinus Torvalds struct module *mod); 15*1da177e4SLinus Torvalds 16*1da177e4SLinus Torvalds /* Allocator used for allocating struct module, core sections and init 17*1da177e4SLinus Torvalds sections. Returns NULL on failure. */ 18*1da177e4SLinus Torvalds void *module_alloc(unsigned long size); 19*1da177e4SLinus Torvalds 20*1da177e4SLinus Torvalds /* Free memory returned from module_alloc. */ 21*1da177e4SLinus Torvalds void module_free(struct module *mod, void *module_region); 22*1da177e4SLinus Torvalds 23*1da177e4SLinus Torvalds /* Apply the given relocation to the (simplified) ELF. Return -error 24*1da177e4SLinus Torvalds or 0. */ 25*1da177e4SLinus Torvalds int apply_relocate(Elf_Shdr *sechdrs, 26*1da177e4SLinus Torvalds const char *strtab, 27*1da177e4SLinus Torvalds unsigned int symindex, 28*1da177e4SLinus Torvalds unsigned int relsec, 29*1da177e4SLinus Torvalds struct module *mod); 30*1da177e4SLinus Torvalds 31*1da177e4SLinus Torvalds /* Apply the given add relocation to the (simplified) ELF. Return 32*1da177e4SLinus Torvalds -error or 0 */ 33*1da177e4SLinus Torvalds int apply_relocate_add(Elf_Shdr *sechdrs, 34*1da177e4SLinus Torvalds const char *strtab, 35*1da177e4SLinus Torvalds unsigned int symindex, 36*1da177e4SLinus Torvalds unsigned int relsec, 37*1da177e4SLinus Torvalds struct module *mod); 38*1da177e4SLinus Torvalds 39*1da177e4SLinus Torvalds /* Any final processing of module before access. Return -error or 0. */ 40*1da177e4SLinus Torvalds int module_finalize(const Elf_Ehdr *hdr, 41*1da177e4SLinus Torvalds const Elf_Shdr *sechdrs, 42*1da177e4SLinus Torvalds struct module *mod); 43*1da177e4SLinus Torvalds 44*1da177e4SLinus Torvalds /* Any cleanup needed when module leaves. */ 45*1da177e4SLinus Torvalds void module_arch_cleanup(struct module *mod); 46*1da177e4SLinus Torvalds 47*1da177e4SLinus Torvalds #endif 48