diff options
author | David Dgien <dgienda125@gmail.com> | 2020-06-29 20:38:35 -0400 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2020-07-01 07:21:25 +0200 |
commit | a53cd2e3ed01c84250350ec1c67c6545da46a3ab (patch) | |
tree | dd854841229447b2bbd3a5bdc2bafc82dd07ab76 /include | |
parent | 6d42f894eaacd9e00f061d5918f9f58f8be8164e (diff) | |
download | barebox-a53cd2e3ed01c84250350ec1c67c6545da46a3ab.tar.gz barebox-a53cd2e3ed01c84250350ec1c67c6545da46a3ab.tar.xz |
module: Implement HAVE_MOD_ARCH_SPECIFIC
Implement HAVE_MOD_ARCH_SPECIFIC Kconfig and module_frob_arch_sections()
function prototype from Linux module subsystem.
module_frob_arch_sections() should be implemented by any architecture
that selects HAVE_MOD_ARCH_SPECIFIC, and is called from load_module()
Signed-off-by: David Dgien <dgienda125@gmail.com>
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'include')
-rw-r--r-- | include/asm-generic/module.h | 49 | ||||
-rw-r--r-- | include/module.h | 7 |
2 files changed, 56 insertions, 0 deletions
diff --git a/include/asm-generic/module.h b/include/asm-generic/module.h new file mode 100644 index 0000000000..98e1541b72 --- /dev/null +++ b/include/asm-generic/module.h @@ -0,0 +1,49 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef __ASM_GENERIC_MODULE_H +#define __ASM_GENERIC_MODULE_H + +/* + * Many architectures just need a simple module + * loader without arch specific data. + */ +#ifndef CONFIG_HAVE_MOD_ARCH_SPECIFIC +struct mod_arch_specific +{ +}; +#endif + +#ifdef CONFIG_64BIT +#define Elf_Shdr Elf64_Shdr +#define Elf_Phdr Elf64_Phdr +#define Elf_Sym Elf64_Sym +#define Elf_Dyn Elf64_Dyn +#define Elf_Ehdr Elf64_Ehdr +#define Elf_Addr Elf64_Addr +#ifdef CONFIG_MODULES_USE_ELF_REL +#define Elf_Rel Elf64_Rel +#endif +#ifdef CONFIG_MODULES_USE_ELF_RELA +#define Elf_Rela Elf64_Rela +#endif +#define ELF_R_TYPE(X) ELF64_R_TYPE(X) +#define ELF_R_SYM(X) ELF64_R_SYM(X) + +#else /* CONFIG_64BIT */ + +#define Elf_Shdr Elf32_Shdr +#define Elf_Phdr Elf32_Phdr +#define Elf_Sym Elf32_Sym +#define Elf_Dyn Elf32_Dyn +#define Elf_Ehdr Elf32_Ehdr +#define Elf_Addr Elf32_Addr +#ifdef CONFIG_MODULES_USE_ELF_REL +#define Elf_Rel Elf32_Rel +#endif +#ifdef CONFIG_MODULES_USE_ELF_RELA +#define Elf_Rela Elf32_Rela +#endif +#define ELF_R_TYPE(X) ELF32_R_TYPE(X) +#define ELF_R_SYM(X) ELF32_R_SYM(X) +#endif + +#endif /* __ASM_GENERIC_MODULE_H */ diff --git a/include/module.h b/include/module.h index f416cd0ae9..9099e5aeed 100644 --- a/include/module.h +++ b/include/module.h @@ -122,6 +122,13 @@ int apply_relocate_add(Elf_Shdr *sechdrs, unsigned int symindex, unsigned int relsec, struct module *mod); + +/* Adjust arch-specific sections. Return 0 on success. */ +int module_frob_arch_sections(Elf_Ehdr *hdr, + Elf_Shdr *sechdrs, + char *secstrings, + struct module *mod); + #endif /* CONFIG_MODULES */ extern struct list_head module_list; |