diff options
| author | David Howells <dhowells@redhat.com> | 2012-09-28 01:01:03 -0400 |
|---|---|---|
| committer | Rusty Russell <rusty@rustcorp.com.au> | 2012-09-28 01:01:03 -0400 |
| commit | 786d35d45cc40b2a51a18f73e14e135d47fdced7 (patch) | |
| tree | df18f4dc3f8a333267e74089760043769b3b6184 | |
| parent | 6ede81239e31cfacbb1e2d260530cd80d13cf0db (diff) | |
Make most arch asm/module.h files use asm-generic/module.h
Use the mapping of Elf_[SPE]hdr, Elf_Addr, Elf_Sym, Elf_Dyn, Elf_Rel/Rela,
ELF_R_TYPE() and ELF_R_SYM() to either the 32-bit version or the 64-bit version
into asm-generic/module.h for all arches bar MIPS.
Also, use the generic definition mod_arch_specific where possible.
To this end, I've defined three new config bools:
(*) HAVE_MOD_ARCH_SPECIFIC
Arches define this if they don't want to use the empty generic
mod_arch_specific struct.
(*) MODULES_USE_ELF_RELA
Arches define this if their modules can contain RELA records. This causes
the Elf_Rela mapping to be emitted and allows apply_relocate_add() to be
defined by the arch rather than have the core emit an error message.
(*) MODULES_USE_ELF_REL
Arches define this if their modules can contain REL records. This causes
the Elf_Rel mapping to be emitted and allows apply_relocate() to be
defined by the arch rather than have the core emit an error message.
Note that it is possible to allow both REL and RELA records: m68k and mips are
two arches that do this.
With this, some arch asm/module.h files can be deleted entirely and replaced
with a generic-y marker in the arch Kbuild file.
Additionally, I have removed the bits from m32r and score that handle the
unsupported type of relocation record as that's now handled centrally.
Signed-off-by: David Howells <dhowells@redhat.com>
Acked-by: Sam Ravnborg <sam@ravnborg.org>
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
57 files changed, 168 insertions, 224 deletions
diff --git a/arch/Kconfig b/arch/Kconfig index 72f2fa189cc5..3450115c6437 100644 --- a/arch/Kconfig +++ b/arch/Kconfig | |||
| @@ -281,4 +281,23 @@ config SECCOMP_FILTER | |||
| 281 | 281 | ||
| 282 | See Documentation/prctl/seccomp_filter.txt for details. | 282 | See Documentation/prctl/seccomp_filter.txt for details. |
| 283 | 283 | ||
| 284 | config HAVE_MOD_ARCH_SPECIFIC | ||
| 285 | bool | ||
| 286 | help | ||
| 287 | The arch uses struct mod_arch_specific to store data. Many arches | ||
| 288 | just need a simple module loader without arch specific data - those | ||
| 289 | should not enable this. | ||
| 290 | |||
| 291 | config MODULES_USE_ELF_RELA | ||
| 292 | bool | ||
| 293 | help | ||
| 294 | Modules only use ELF RELA relocations. Modules with ELF REL | ||
| 295 | relocations will give an error. | ||
| 296 | |||
| 297 | config MODULES_USE_ELF_REL | ||
| 298 | bool | ||
| 299 | help | ||
| 300 | Modules only use ELF REL relocations. Modules with ELF RELA | ||
| 301 | relocations will give an error. | ||
| 302 | |||
| 284 | source "kernel/gcov/Kconfig" | 303 | source "kernel/gcov/Kconfig" |
diff --git a/arch/alpha/Kconfig b/arch/alpha/Kconfig index 9944dedee5b1..7e3710c0cce5 100644 --- a/arch/alpha/Kconfig +++ b/arch/alpha/Kconfig | |||
| @@ -20,6 +20,8 @@ config ALPHA | |||
| 20 | select GENERIC_CMOS_UPDATE | 20 | select GENERIC_CMOS_UPDATE |
| 21 | select GENERIC_STRNCPY_FROM_USER | 21 | select GENERIC_STRNCPY_FROM_USER |
| 22 | select GENERIC_STRNLEN_USER | 22 | select GENERIC_STRNLEN_USER |
| 23 | select HAVE_MOD_ARCH_SPECIFIC | ||
| 24 | select MODULES_USE_ELF_RELA | ||
| 23 | help | 25 | help |
| 24 | The Alpha is a 64-bit general-purpose processor designed and | 26 | The Alpha is a 64-bit general-purpose processor designed and |
| 25 | marketed by the Digital Equipment Corporation of blessed memory, | 27 | marketed by the Digital Equipment Corporation of blessed memory, |
diff --git a/arch/alpha/include/asm/module.h b/arch/alpha/include/asm/module.h index 7b63743c534a..9cd13b55155f 100644 --- a/arch/alpha/include/asm/module.h +++ b/arch/alpha/include/asm/module.h | |||
| @@ -1,19 +1,13 @@ | |||
| 1 | #ifndef _ALPHA_MODULE_H | 1 | #ifndef _ALPHA_MODULE_H |
| 2 | #define _ALPHA_MODULE_H | 2 | #define _ALPHA_MODULE_H |
| 3 | 3 | ||
| 4 | #include <asm-generic/module.h> | ||
| 5 | |||
| 4 | struct mod_arch_specific | 6 | struct mod_arch_specific |
| 5 | { | 7 | { |
| 6 | unsigned int gotsecindex; | 8 | unsigned int gotsecindex; |
| 7 | }; | 9 | }; |
| 8 | 10 | ||
| 9 | #define Elf_Sym Elf64_Sym | ||
| 10 | #define Elf_Shdr Elf64_Shdr | ||
| 11 | #define Elf_Ehdr Elf64_Ehdr | ||
| 12 | #define Elf_Phdr Elf64_Phdr | ||
| 13 | #define Elf_Dyn Elf64_Dyn | ||
| 14 | #define Elf_Rel Elf64_Rel | ||
| 15 | #define Elf_Rela Elf64_Rela | ||
| 16 | |||
| 17 | #define ARCH_SHF_SMALL SHF_ALPHA_GPREL | 11 | #define ARCH_SHF_SMALL SHF_ALPHA_GPREL |
| 18 | 12 | ||
| 19 | #ifdef MODULE | 13 | #ifdef MODULE |
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index 2f88d8d97701..7a08b3a71c01 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig | |||
| @@ -49,6 +49,8 @@ config ARM | |||
| 49 | select GENERIC_STRNCPY_FROM_USER | 49 | select GENERIC_STRNCPY_FROM_USER |
| 50 | select GENERIC_STRNLEN_USER | 50 | select GENERIC_STRNLEN_USER |
| 51 | select DCACHE_WORD_ACCESS if (CPU_V6 || CPU_V6K || CPU_V7) && !CPU_BIG_ENDIAN | 51 | select DCACHE_WORD_ACCESS if (CPU_V6 || CPU_V6K || CPU_V7) && !CPU_BIG_ENDIAN |
| 52 | select HAVE_MOD_ARCH_SPECIFIC if ARM_UNWIND | ||
| 53 | select MODULES_USE_ELF_REL | ||
| 52 | help | 54 | help |
| 53 | The ARM series is a line of low-power-consumption RISC chip designs | 55 | The ARM series is a line of low-power-consumption RISC chip designs |
| 54 | licensed by ARM Ltd and targeted at embedded applications and | 56 | licensed by ARM Ltd and targeted at embedded applications and |
diff --git a/arch/arm/include/asm/module.h b/arch/arm/include/asm/module.h index 6c6809f982f1..0d3a28dbc8e5 100644 --- a/arch/arm/include/asm/module.h +++ b/arch/arm/include/asm/module.h | |||
| @@ -1,9 +1,7 @@ | |||
| 1 | #ifndef _ASM_ARM_MODULE_H | 1 | #ifndef _ASM_ARM_MODULE_H |
| 2 | #define _ASM_ARM_MODULE_H | 2 | #define _ASM_ARM_MODULE_H |
| 3 | 3 | ||
| 4 | #define Elf_Shdr Elf32_Shdr | 4 | #include <asm-generic/module.h> |
| 5 | #define Elf_Sym Elf32_Sym | ||
| 6 | #define Elf_Ehdr Elf32_Ehdr | ||
| 7 | 5 | ||
| 8 | struct unwind_table; | 6 | struct unwind_table; |
| 9 | 7 | ||
| @@ -16,13 +14,11 @@ enum { | |||
| 16 | ARM_SEC_DEVEXIT, | 14 | ARM_SEC_DEVEXIT, |
| 17 | ARM_SEC_MAX, | 15 | ARM_SEC_MAX, |
| 18 | }; | 16 | }; |
| 19 | #endif | ||
| 20 | 17 | ||
| 21 | struct mod_arch_specific { | 18 | struct mod_arch_specific { |
