Make most arch asm/module.h files use asm-generic/module.h
authorDavid Howells <dhowells@redhat.com>
Fri, 28 Sep 2012 05:01:03 +0000 (14:31 +0930)
committerRusty Russell <rusty@rustcorp.com.au>
Fri, 28 Sep 2012 05:01:03 +0000 (14:31 +0930)
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:
arch/Kconfig
arch/alpha/Kconfig
arch/alpha/include/asm/module.h
arch/arm/Kconfig
arch/arm/include/asm/module.h
arch/avr32/Kconfig
arch/avr32/include/asm/module.h
arch/blackfin/Kconfig
arch/blackfin/include/asm/module.h
arch/c6x/Kconfig
arch/c6x/include/asm/module.h
arch/cris/Kconfig
arch/cris/include/asm/Kbuild
arch/cris/include/asm/module.h [deleted file]
arch/frv/include/asm/module.h
arch/h8300/Kconfig
arch/h8300/include/asm/Kbuild
arch/h8300/include/asm/module.h [deleted file]
arch/hexagon/Kconfig
arch/ia64/Kconfig
arch/ia64/include/asm/module.h
arch/m32r/Kconfig
arch/m32r/include/asm/Kbuild
arch/m32r/include/asm/module.h [deleted file]
arch/m32r/kernel/module.c
arch/m68k/Kconfig
arch/m68k/include/asm/module.h
arch/microblaze/Kconfig
arch/mips/Kconfig
arch/mips/include/asm/module.h
arch/mips/kernel/Makefile
arch/mn10300/Kconfig
arch/mn10300/include/asm/module.h
arch/openrisc/Kconfig
arch/parisc/Kconfig
arch/parisc/include/asm/module.h
arch/powerpc/Kconfig
arch/powerpc/include/asm/module.h
arch/s390/Kconfig
arch/s390/include/asm/module.h
arch/score/Kconfig
arch/score/include/asm/module.h
arch/score/kernel/module.c
arch/sh/Kconfig
arch/sh/include/asm/module.h
arch/sparc/Kconfig
arch/sparc/include/asm/Kbuild
arch/sparc/include/asm/module.h [deleted file]
arch/tile/Kconfig
arch/unicore32/Kconfig
arch/x86/Kconfig
arch/x86/um/Kconfig
arch/xtensa/Kconfig
arch/xtensa/include/asm/module.h
include/asm-generic/module.h
include/linux/moduleloader.h
kernel/module.c

index 72f2fa189cc5200bb98143c6b35de8ffc9e0aaee..3450115c64373da128ba7be90de61b8fd7d8f160 100644 (file)
@@ -281,4 +281,23 @@ config SECCOMP_FILTER
 
          See Documentation/prctl/seccomp_filter.txt for details.
 
+config HAVE_MOD_ARCH_SPECIFIC
+       bool
+       help
+         The arch uses struct mod_arch_specific to store data.  Many arches
+         just need a simple module loader without arch specific data - those
+         should not enable this.
+
+config MODULES_USE_ELF_RELA
+       bool
+       help
+         Modules only use ELF RELA relocations.  Modules with ELF REL
+         relocations will give an error.
+
+config MODULES_USE_ELF_REL
+       bool
+       help
+         Modules only use ELF REL relocations.  Modules with ELF RELA
+         relocations will give an error.
+
 source "kernel/gcov/Kconfig"
index 9944dedee5b1b1b31abf08599a44421333bd9290..7e3710c0cce5a4c2ef51b8a889a061979a0b9b24 100644 (file)
@@ -20,6 +20,8 @@ config ALPHA
        select GENERIC_CMOS_UPDATE
        select GENERIC_STRNCPY_FROM_USER
        select GENERIC_STRNLEN_USER
+       select HAVE_MOD_ARCH_SPECIFIC
+       select MODULES_USE_ELF_RELA
        help
          The Alpha is a 64-bit general-purpose processor designed and
          marketed by the Digital Equipment Corporation of blessed memory,
index 7b63743c534a10c34a022c92c144558e425a38d9..9cd13b55155f2f4083f44a8fcec3a79b935570c9 100644 (file)
@@ -1,19 +1,13 @@
 #ifndef _ALPHA_MODULE_H
 #define _ALPHA_MODULE_H
 
+#include <asm-generic/module.h>
+
 struct mod_arch_specific
 {
        unsigned int gotsecindex;
 };
 
-#define Elf_Sym Elf64_Sym
-#define Elf_Shdr Elf64_Shdr
-#define Elf_Ehdr Elf64_Ehdr
-#define Elf_Phdr Elf64_Phdr
-#define Elf_Dyn Elf64_Dyn
-#define Elf_Rel Elf64_Rel
-#define Elf_Rela Elf64_Rela
-
 #define ARCH_SHF_SMALL SHF_ALPHA_GPREL
 
 #ifdef MODULE
index 2f88d8d9770116014f7ff55e80d98c65fbb191ed..7a08b3a71c013a2b3cbf9681e637eefdb637ecdf 100644 (file)
@@ -49,6 +49,8 @@ config ARM
        select GENERIC_STRNCPY_FROM_USER
        select GENERIC_STRNLEN_USER
        select DCACHE_WORD_ACCESS if (CPU_V6 || CPU_V6K || CPU_V7) && !CPU_BIG_ENDIAN
+       select HAVE_MOD_ARCH_SPECIFIC if ARM_UNWIND
+       select MODULES_USE_ELF_REL
        help
          The ARM series is a line of low-power-consumption RISC chip designs
          licensed by ARM Ltd and targeted at embedded applications and
index 6c6809f982f12557a6fa23a711f095c9a122fdb0..0d3a28dbc8e5db05823e6b83f85ccc5d04b807ac 100644 (file)
@@ -1,9 +1,7 @@
 #ifndef _ASM_ARM_MODULE_H
 #define _ASM_ARM_MODULE_H
 
-#define Elf_Shdr       Elf32_Shdr
-#define Elf_Sym                Elf32_Sym
-#define Elf_Ehdr       Elf32_Ehdr
+#include <asm-generic/module.h>
 
 struct unwind_table;
 
@@ -16,13 +14,11 @@ enum {
        ARM_SEC_DEVEXIT,
        ARM_SEC_MAX,
 };
-#endif
 
 struct mod_arch_specific {
-#ifdef CONFIG_ARM_UNWIND
        struct unwind_table *unwind[ARM_SEC_MAX];
-#endif
 };
+#endif
 
 /*
  * Add the ARM architecture version to the version magic string
index 5ade51c8a87fbf5cd99d319ddbe55feef8fbe6c7..06e73bf665e92cba042590dbe68a50a463d50f76 100644 (file)
@@ -15,6 +15,8 @@ config AVR32
        select ARCH_WANT_IPC_PARSE_VERSION
        select ARCH_HAVE_NMI_SAFE_CMPXCHG
        select GENERIC_CLOCKEVENTS
+       select HAVE_MOD_ARCH_SPECIFIC
+       select MODULES_USE_ELF_RELA
        help
          AVR32 is a high-performance 32-bit RISC microprocessor core,
          designed for cost-sensitive embedded applications, with particular
index 451444538a1b06d2121c40bcc81d6b08a8cc3427..3f083d385a64e43a6b16b6d2bff73df37a21e024 100644 (file)
@@ -1,6 +1,8 @@
 #ifndef __ASM_AVR32_MODULE_H
 #define __ASM_AVR32_MODULE_H
 
+#include <asm-generic/module.h>
+
 struct mod_arch_syminfo {
        unsigned long got_offset;
        int got_initialized;
@@ -17,10 +19,6 @@ struct mod_arch_specific {
        struct mod_arch_syminfo *syminfo;
 };
 
-#define Elf_Shdr               Elf32_Shdr
-#define Elf_Sym                        Elf32_Sym
-#define Elf_Ehdr               Elf32_Ehdr
-
 #define MODULE_PROC_FAMILY "AVR32v1"
 
 #define MODULE_ARCH_VERMAGIC MODULE_PROC_FAMILY
index c7092e6057c56e4fa856362263ed4ac49a95d32e..8e82e267b89715f11ff26a0c2511764ddb3912aa 100644 (file)
@@ -42,6 +42,8 @@ config BLACKFIN
        select HAVE_NMI_WATCHDOG if NMI_WATCHDOG
        select GENERIC_SMP_IDLE_THREAD
        select ARCH_USES_GETTIMEOFFSET if !GENERIC_CLOCKEVENTS
+       select HAVE_MOD_ARCH_SPECIFIC
+       select MODULES_USE_ELF_RELA
 
 config GENERIC_CSUM
        def_bool y
index ed5689b82c9fefa7edc3303136a14a6edba2d13d..231a149b3f77df96eb59fb8dcc0eda22449d614d 100644 (file)
@@ -7,9 +7,7 @@
 #ifndef _ASM_BFIN_MODULE_H
 #define _ASM_BFIN_MODULE_H
 
-#define Elf_Shdr        Elf32_Shdr
-#define Elf_Sym         Elf32_Sym
-#define Elf_Ehdr        Elf32_Ehdr
+#include <asm-generic/module.h>
 
 struct mod_arch_specific {
        Elf_Shdr        *text_l1;
index 983c859e40b7b57e5eb1da68094524b7fe1c1301..f6a3648f5ec3c7030a8c4294be4e3bee54a25b6c 100644 (file)
@@ -17,6 +17,7 @@ config C6X
        select OF
        select OF_EARLY_FLATTREE
        select GENERIC_CLOCKEVENTS
+       select MODULES_USE_ELF_RELA
 
 config MMU
        def_bool n
index a453f9744f42aa0269e1512589a798ee38815d6d..5c7269c7ef73f72f8939af4ee23d929d39a506cd 100644 (file)
 #ifndef _ASM_C6X_MODULE_H
 #define _ASM_C6X_MODULE_H
 
-#define Elf_Shdr       Elf32_Shdr
-#define Elf_Sym                Elf32_Sym
-#define Elf_Ehdr       Elf32_Ehdr
-#define Elf_Addr       Elf32_Addr
-#define Elf_Word       Elf32_Word
-
-/*
- * This file contains the C6x architecture specific module code.
- */
-struct mod_arch_specific {
-};
+#include <asm-generic/module.h>
 
 struct loaded_sections {
        unsigned int new_vaddr;
index e92215428a37e315d0b5df9f962df8e4c8090dcc..7bb8cf90e6aa0f726f66090a6f47da857de1eca6 100644 (file)
@@ -47,6 +47,7 @@ config CRIS
        select GENERIC_IOMAP
        select GENERIC_SMP_IDLE_THREAD if ETRAX_ARCH_V32
        select GENERIC_CMOS_UPDATE
+       select MODULES_USE_ELF_RELA
 
 config HZ
        int
index 04d02a51c5e90a2b7dde5403f23329ece74362bc..28b690de797116ca4f5deb292021b75e72924e82 100644 (file)
@@ -7,3 +7,5 @@ header-y += ethernet.h
 header-y += etraxgpio.h
 header-y += rs485.h
 header-y += sync_serial.h
+
+generic-y += module.h
diff --git a/arch/cris/include/asm/module.h b/arch/cris/include/asm/module.h
deleted file mode 100644 (file)
index 7ee7231..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-#ifndef _ASM_CRIS_MODULE_H
-#define _ASM_CRIS_MODULE_H
-/* cris is simple */
-struct mod_arch_specific { };
-
-#define Elf_Shdr Elf32_Shdr
-#define Elf_Sym Elf32_Sym
-#define Elf_Ehdr Elf32_Ehdr
-#endif /* _ASM_CRIS_MODULE_H */
index 3d5c6360289a8085bb782c5909263bc00a83c697..a8848f09a217d6ead10e61c859713e5677cee828 100644 (file)
 #ifndef _ASM_MODULE_H
 #define _ASM_MODULE_H
 
-struct mod_arch_specific
-{
-};
-
-#define Elf_Shdr       Elf32_Shdr
-#define Elf_Sym                Elf32_Sym
-#define Elf_Ehdr       Elf32_Ehdr
+#include <asm-generic/module.h>
 
 /*
  * Include the architecture version.
index 5e8a0d9a09ce0035e424dc0334370607f306deb9..c149d3b29eb6a1b990c44025137e2632574a3d88 100644 (file)
@@ -6,6 +6,7 @@ config H8300
        select ARCH_WANT_IPC_PARSE_VERSION
        select GENERIC_IRQ_SHOW
        select GENERIC_CPU_DEVICES
+       select MODULES_USE_ELF_RELA
 
 config SYMBOL_PREFIX
        string
index c68e1680da0173d5754d1a1df4944120a5239e58..871382d239fef60105b37f50424afe24ed6773e3 100644 (file)
@@ -1 +1,3 @@
 include include/asm-generic/Kbuild.asm
+
+generic-y      += module.h
diff --git a/arch/h8300/include/asm/module.h b/arch/h8300/include/asm/module.h
deleted file mode 100644 (file)
index 8e46724..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-#ifndef _ASM_H8300_MODULE_H
-#define _ASM_H8300_MODULE_H
-/*
- * This file contains the H8/300 architecture specific module code.
- */
-struct mod_arch_specific { };
-#define Elf_Shdr Elf32_Shdr
-#define Elf_Sym Elf32_Sym
-#define Elf_Ehdr Elf32_Ehdr
-
-#endif /* _ASM_H8/300_MODULE_H */
index b2fdfb700f505d2e7afeb4e8ddc92d88528f7fbb..0744f7d7b1fd096b5ccbc71cab7305ea997fb3c3 100644 (file)
@@ -30,6 +30,7 @@ config HEXAGON
        select KTIME_SCALAR
        select GENERIC_CLOCKEVENTS
        select GENERIC_CLOCKEVENTS_BROADCAST
+       select MODULES_USE_ELF_RELA
        ---help---
          Qualcomm Hexagon is a processor architecture designed for high
          performance and low power across a wide variety of applications.
index 310cf5781fad2438a6ab24845724364bed31c7e4..688146466d0dc54117e9aa809c713adcff3926c1 100644 (file)
@@ -39,6 +39,8 @@ config IA64
        select ARCH_THREAD_INFO_ALLOCATOR
        select ARCH_CLOCKSOURCE_DATA
        select GENERIC_TIME_VSYSCALL
+       select HAVE_MOD_ARCH_SPECIFIC
+       select MODULES_USE_ELF_RELA
        default y
        help
          The Itanium Processor Family is Intel's 64-bit successor to
index 908eaef42a08d1dfd9451b55cf9852f61faaab80..dfba22a872c31c5739c05b79019d229f13f7eab8 100644 (file)
@@ -1,6 +1,8 @@
 #ifndef _ASM_IA64_MODULE_H
 #define _ASM_IA64_MODULE_H
 
+#include <asm-generic/module.h>
+
 /*
  * IA-64-specific support for kernel module loader.
  *
@@ -29,10 +31,6 @@ struct mod_arch_specific {
        unsigned int next_got_entry;    /* index of next available got entry */
 };
 
-#define Elf_Shdr       Elf64_Shdr
-#define Elf_Sym                Elf64_Sym
-#define Elf_Ehdr       Elf64_Ehdr
-
 #define MODULE_PROC_FAMILY     "ia64"
 #define MODULE_ARCH_VERMAGIC   MODULE_PROC_FAMILY \
        "gcc-" __stringify(__GNUC__) "." __stringify(__GNUC_MINOR__)
index 49498bbb96163ec10477fac83fdd9f21f277b5cc..fc6153361bf596e5b44659247f0946b4c446266c 100644 (file)
@@ -13,6 +13,7 @@ config M32R
        select GENERIC_IRQ_SHOW
        select GENERIC_ATOMIC64
        select ARCH_USES_GETTIMEOFFSET
+       select MODULES_USE_ELF_RELA
 
 config SBUS
        bool
index c68e1680da0173d5754d1a1df4944120a5239e58..871382d239fef60105b37f50424afe24ed6773e3 100644 (file)
@@ -1 +1,3 @@
 include include/asm-generic/Kbuild.asm
+
+generic-y      += module.h
diff --git a/arch/m32r/include/asm/module.h b/arch/m32r/include/asm/module.h
deleted file mode 100644 (file)
index eb73ee0..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-#ifndef _ASM_M32R_MODULE_H
-#define _ASM_M32R_MODULE_H
-
-struct mod_arch_specific { };
-
-#define Elf_Shdr       Elf32_Shdr
-#define Elf_Sym                Elf32_Sym
-#define Elf_Ehdr       Elf32_Ehdr
-
-#endif /* _ASM_M32R_MODULE_H */
index 3071fe83ffc8aac10c1083bca7a7d940e9383400..38233b6596b6e837e7cdf67ccad02f93834fe1ef 100644 (file)
@@ -201,18 +201,3 @@ int apply_relocate_add(Elf32_Shdr *sechdrs,
        }
        return 0;
 }
-
-int apply_relocate(Elf32_Shdr *sechdrs,
-                      const char *strtab,
-                      unsigned int symindex,
-                      unsigned int relsec,
-                      struct module *me)
-{
-#if 0
-       printk(KERN_ERR "module %s: REL RELOCATION unsupported\n",
-              me->name);
-       return -ENOEXEC;
-#endif
-       return 0;
-
-}
index b22df9410dceb75169f4127bb897befb6f4960ad..0df07cee3faf5e1c0585f879a8e61e8d69a1d81b 100644 (file)
@@ -13,6 +13,9 @@ config M68K
        select FPU if MMU
        select ARCH_WANT_IPC_PARSE_VERSION
        select ARCH_USES_GETTIMEOFFSET if MMU && !COLDFIRE
+       select HAVE_MOD_ARCH_SPECIFIC
+       select MODULES_USE_ELF_REL
+       select MODULES_USE_ELF_RELA
 
 config RWSEM_GENERIC_SPINLOCK
        bool
index edffe66b7f4972aad851ccd5de39218f9c12a20d..8b58fce843ddc2bf06a4f6f030f241a2add7b312 100644 (file)
@@ -1,6 +1,8 @@
 #ifndef _ASM_M68K_MODULE_H
 #define _ASM_M68K_MODULE_H
 
+#include <asm-generic/module.h>
+
 enum m68k_fixup_type {
        m68k_fixup_memoffset,
        m68k_fixup_vnode_shift,
@@ -36,8 +38,4 @@ struct module;
 extern void module_fixup(struct module *mod, struct m68k_fixup_info *start,
                         struct m68k_fixup_info *end);
 
-#define Elf_Shdr Elf32_Shdr
-#define Elf_Sym Elf32_Sym
-#define Elf_Ehdr Elf32_Ehdr
-
 #endif /* _ASM_M68K_MODULE_H */
index ab9afcaa7f6a44bad81bb9d80a9c5775fcf7c4f8..b4f409f942ab759b85244d8429fefaf5f80c5d35 100644 (file)
@@ -24,6 +24,7 @@ config MICROBLAZE
        select GENERIC_CPU_DEVICES
        select GENERIC_ATOMIC64
        select GENERIC_CLOCKEVENTS
+       select MODULES_USE_ELF_RELA
 
 config SWAP
        def_bool n
index faf65286574e9f28d32d9cf31e1c097afcfc7acb..dccdfcd9e18e4ba05d842cee4481f796202e399a 100644 (file)
@@ -36,6 +36,9 @@ config MIPS
        select BUILDTIME_EXTABLE_SORT
        select GENERIC_CLOCKEVENTS
        select GENERIC_CMOS_UPDATE
+       select HAVE_MOD_ARCH_SPECIFIC
+       select MODULES_USE_ELF_REL
+       select MODULES_USE_ELF_RELA if 64BIT
 
 menu "Machine selection"
 
index dca8bce8c7abbe47473920ca6d9e28eb3c235dc9..26137da1c713cd95ca0de3bc422fcb8e5fa6f6e8 100644 (file)
@@ -35,11 +35,14 @@ typedef struct {
 } Elf64_Mips_Rela;
 
 #ifdef CONFIG_32BIT
-
 #define Elf_Shdr       Elf32_Shdr
 #define Elf_Sym                Elf32_Sym
 #define Elf_Ehdr       Elf32_Ehdr
 #define Elf_Addr       Elf32_Addr
+#define Elf_Rel                Elf32_Rel
+#define Elf_Rela       Elf32_Rela
+#define ELF_R_TYPE(X)  ELF32_R_TYPE(X)
+#define ELF_R_SYM(X)   ELF32_R_SYM(X)
 
 #define Elf_Mips_Rel   Elf32_Rel
 #define Elf_Mips_Rela  Elf32_Rela
@@ -50,11 +53,14 @@ typedef struct {
 #endif
 
 #ifdef CONFIG_64BIT
-
 #define Elf_Shdr       Elf64_Shdr
 #define Elf_Sym                Elf64_Sym
 #define Elf_Ehdr       Elf64_Ehdr
 #define Elf_Addr       Elf64_Addr
+#define Elf_Rel                Elf64_Rel
+#define Elf_Rela       Elf64_Rela
+#define ELF_R_TYPE(X)  ELF64_R_TYPE(X)
+#define ELF_R_SYM(X)   ELF64_R_SYM(X)
 
 #define Elf_Mips_Rel   Elf64_Mips_Rel
 #define Elf_Mips_Rela  Elf64_Mips_Rela
index e2c14999839ad390f676c10b193bf0cbd38732b8..cd1e6c2421b2378a2863489cb4db26f5977ba1d5 100644 (file)
@@ -31,7 +31,7 @@ obj-$(CONFIG_SYNC_R4K)                += sync-r4k.o
 
 obj-$(CONFIG_STACKTRACE)       += stacktrace.o
 obj-$(CONFIG_MODULES)          += mips_ksyms.o module.o
-obj-$(CONFIG_MODULES)          += module-rela.o
+obj-$(CONFIG_MODULES_USE_ELF_RELA) += module-rela.o
 
 obj-$(CONFIG_FUNCTION_TRACER)  += mcount.o ftrace.o
 
index 5cfb086b39034417208a3efd4a708c5835c91db7..aa03f2e13385fe5083a50b17ae6f8c02e3ccb269 100644 (file)
@@ -8,6 +8,7 @@ config MN10300
        select HAVE_ARCH_KGDB
        select HAVE_NMI_WATCHDOG if MN10300_WD_TIMER
        select GENERIC_CLOCKEVENTS
+       select MODULES_USE_ELF_RELA
 
 config AM33_2
        def_bool n
index 5d7057d01494a69f2dc4a1bfdb69fd7754d1ea93..6571103b051811c1e7e25a6ab7319d82f5209c49 100644 (file)
 #ifndef _ASM_MODULE_H
 #define _ASM_MODULE_H
 
-struct mod_arch_specific {
-};
-
-#define Elf_Shdr       Elf32_Shdr
-#define Elf_Sym                Elf32_Sym
-#define Elf_Ehdr       Elf32_Ehdr
+#include <asm-generic/module.h>
 
 /*
  * Include the MN10300 architecture version.
index 49765b53f6374709943a1c1a5d17b46cad1846fb..05f2ba41ff1aadd52634a136b0f4450bba2970cc 100644 (file)
@@ -21,6 +21,7 @@ config OPENRISC
        select GENERIC_CLOCKEVENTS
        select GENERIC_STRNCPY_FROM_USER
        select GENERIC_STRNLEN_USER
+       select MODULES_USE_ELF_RELA
 
 config MMU
        def_bool y
index 3ff21b536f28f6c1e84b06b665e6d7589579f6c9..166d9911bc836e3c6de518fada2d4dcb27d35638 100644 (file)
@@ -19,6 +19,8 @@ config PARISC
        select ARCH_HAVE_NMI_SAFE_CMPXCHG
        select GENERIC_SMP_IDLE_THREAD
        select GENERIC_STRNCPY_FROM_USER
+       select HAVE_MOD_ARCH_SPECIFIC
+       select MODULES_USE_ELF_RELA
 
        help
          The PA-RISC microprocessor is designed by Hewlett-Packard and used
index 1f4123427ea09c9c80c5b25c0cbb40fea5ca754a..bab37e99168a64324043f009481884338e7ea263 100644 (file)
@@ -1,21 +1,11 @@
 #ifndef _ASM_PARISC_MODULE_H
 #define _ASM_PARISC_MODULE_H
+
+#include <asm-generic/module.h>
+
 /*
  * This file contains the parisc architecture specific module code.
  */
-#ifdef CONFIG_64BIT
-#define Elf_Shdr Elf64_Shdr
-#define Elf_Sym Elf64_Sym
-#define Elf_Ehdr Elf64_Ehdr
-#define Elf_Addr Elf64_Addr
-#define Elf_Rela Elf64_Rela
-#else
-#define Elf_Shdr Elf32_Shdr
-#define Elf_Sym Elf32_Sym
-#define Elf_Ehdr Elf32_Ehdr
-#define Elf_Addr Elf32_Addr
-#define Elf_Rela Elf32_Rela
-#endif
 
 struct unwind_table;
 
index 352f416269ce245c515e25e0cc5cbcf5a446d2a6..74f84781b484ea02755c7f4e078abd514ccfa43e 100644 (file)
@@ -139,6 +139,8 @@ config PPC
        select GENERIC_CLOCKEVENTS
        select GENERIC_STRNCPY_FROM_USER
        select GENERIC_STRNLEN_USER
+       select HAVE_MOD_ARCH_SPECIFIC
+       select MODULES_USE_ELF_RELA
 
 config EARLY_PRINTK
        bool
index 0192a4ee2bc2b65354778a6ec2392f6cab5cddba..c1df590ec4440a96f81b97f6048ad79a7f326179 100644 (file)
@@ -11,6 +11,7 @@
 
 #include <linux/list.h>
 #include <asm/bug.h>
+#include <asm-generic/module.h>
 
 
 #ifndef __powerpc64__
@@ -60,16 +61,10 @@ struct mod_arch_specific {
  */
 
 #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");
index 107610e01a295e27a7fdb1d82fbf8ad0270a4bfc..c76a052f60e29ddd9724d4555fe77d4148c013ef 100644 (file)
@@ -125,6 +125,8 @@ config S390
        select GENERIC_CLOCKEVENTS
        select KTIME_SCALAR if 32BIT
        select HAVE_ARCH_SECCOMP_FILTER
+       select HAVE_MOD_ARCH_SPECIFIC
+       select MODULES_USE_ELF_RELA
 
 config SCHED_OMIT_FRAME_POINTER
        def_bool y
index f0b6b26b6e59de846b260deef64d3d0b07e0a188..df1f861a848a1ef85a2b902d7bf45a1ad6e81cef 100644 (file)
@@ -1,5 +1,8 @@
 #ifndef _ASM_S390_MODULE_H
 #define _ASM_S390_MODULE_H
+
+#include <asm-generic/module.h>
+
 /*
  * This file contains the s390 architecture specific module code.
  */
@@ -28,19 +31,4 @@ struct mod_arch_specific
        struct mod_arch_syminfo *syminfo;
 };
 
-#ifdef CONFIG_64BIT
-#define ElfW(x) Elf64_ ## x
-#define ELFW(x) ELF64_ ## x
-#else
-#define ElfW(x) Elf32_ ## x
-#define ELFW(x) ELF32_ ## x
-#endif
-
-#define Elf_Addr ElfW(Addr)
-#define Elf_Rela ElfW(Rela)
-#define Elf_Shdr ElfW(Shdr)
-#define Elf_Sym ElfW(Sym)
-#define Elf_Ehdr ElfW(Ehdr)
-#define ELF_R_SYM ELFW(R_SYM)
-#define ELF_R_TYPE ELFW(R_TYPE)
 #endif /* _ASM_S390_MODULE_H */
index ba0f412920befb05cdd0a26c6a707e2b91289954..e2c8db4533dc3be6cf1d88ba6a7c3863460955c7 100644 (file)
@@ -10,6 +10,8 @@ config SCORE
        select ARCH_DISCARD_MEMBLOCK
        select GENERIC_CPU_DEVICES
        select GENERIC_CLOCKEVENTS
+       select HAVE_MOD_ARCH_SPECIFIC
+       select MODULES_USE_ELF_REL
 
 choice
        prompt "System type"
index f0b5dc0bd023d738ee80f7fb936f1a5e681c330d..abf395bbfabadc23524e36cb169511a088563007 100644 (file)
@@ -3,6 +3,7 @@
 
 #include <linux/list.h>
 #include <asm/uaccess.h>
+#include <asm-generic/module.h>
 
 struct mod_arch_specific {
        /* Data Bus Error exception tables */
@@ -13,11 +14,6 @@ struct mod_arch_specific {
 
 typedef uint8_t Elf64_Byte;            /* Type for a 8-bit quantity. */
 
-#define Elf_Shdr       Elf32_Shdr
-#define Elf_Sym                Elf32_Sym
-#define Elf_Ehdr       Elf32_Ehdr
-#define Elf_Addr       Elf32_Addr
-
 /* Given an address, look for it in the exception tables. */
 #ifdef CONFIG_MODULES
 const struct exception_table_entry *search_module_dbetables(unsigned long addr);
index 469e3b64e2f26aa760a307d68827eacc0768df21..1378d99baa3d5744464ab4aa1f50591769ddc9a4 100644 (file)
@@ -125,16 +125,6 @@ int apply_relocate(Elf_Shdr *sechdrs, const char *strtab,
        return 0;
 }
 
-int apply_relocate_add(Elf_Shdr *sechdrs, const char *strtab,
-               unsigned int symindex, unsigned int relsec,
-               struct module *me)
-{
-       /* Non-standard return value... most other arch's return -ENOEXEC
-        * for an unsupported relocation variant
-        */
-       return 0;
-}
-
 /* Given an address, look for it in the module exception tables. */
 const struct exception_table_entry *search_module_dbetables(unsigned long addr)
 {
index 36f5141e80417ac6172ce6965602e4d15a67bdfb..656329a9a59b2bc40adf2689b347977a23114d76 100644 (file)
@@ -35,6 +35,8 @@ config SUPERH
        select GENERIC_CMOS_UPDATE if SH_SH03 || SH_DREAMCAST
        select GENERIC_STRNCPY_FROM_USER
        select GENERIC_STRNLEN_USER
+       select HAVE_MOD_ARCH_SPECIFIC if DWARF_UNWINDER
+       select MODULES_USE_ELF_RELA
        help
          The SuperH is a RISC processor targeted for use in embedded systems
          and consumer electronics; it was also used in the Sega Dreamcast
index b7927de86f9fcfb9d220abfd03872d06307cf149..81300d8b5448c35e85ed1f895e054a1b73492550 100644 (file)
@@ -1,21 +1,13 @@
 #ifndef _ASM_SH_MODULE_H
 #define _ASM_SH_MODULE_H
 
-struct mod_arch_specific {
+#include <asm-generic/module.h>
+
 #ifdef CONFIG_DWARF_UNWINDER
+struct mod_arch_specific {
        struct list_head fde_list;
        struct list_head cie_list;
-#endif
 };
-
-#ifdef CONFIG_64BIT
-#define Elf_Shdr Elf64_Shdr
-#define Elf_Sym Elf64_Sym
-#define Elf_Ehdr Elf64_Ehdr
-#else
-#define Elf_Shdr Elf32_Shdr
-#define Elf_Sym Elf32_Sym
-#define Elf_Ehdr Elf32_Ehdr
 #endif
 
 #ifdef CONFIG_CPU_LITTLE_ENDIAN
index 67f1f6f5f4e14fa35408cda35ad1464297dd2859..a244e70b9bb0853520f0d2f155b76296b557f81f 100644 (file)
@@ -37,6 +37,7 @@ config SPARC
        select GENERIC_CLOCKEVENTS
        select GENERIC_STRNCPY_FROM_USER
        select GENERIC_STRNLEN_USER
+       select MODULES_USE_ELF_RELA
 
 config SPARC32
        def_bool !64BIT
index 67f83e0a0d68d47e3bebff7a365897614bfa411e..fbe1cb578fcd0fcdceeaa637724fdf13bbb12958 100644 (file)
@@ -21,4 +21,5 @@ generic-y += div64.h
 generic-y += local64.h
 generic-y += irq_regs.h
 generic-y += local.h
+generic-y += module.h
 generic-y += word-at-a-time.h
diff --git a/arch/sparc/include/asm/module.h b/arch/sparc/include/asm/module.h
deleted file mode 100644 (file)
index ff8e02d..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-#ifndef __SPARC_MODULE_H
-#define __SPARC_MODULE_H
-struct mod_arch_specific { };
-
-/*
- * Use some preprocessor magic to define the correct symbol
- * for sparc32 and sparc64.
- * Elf_Addr becomes Elf32_Addr for sparc32 and Elf64_Addr for sparc64
- */
-#define ___ELF(a, b, c) a##b##c
-#define __ELF(a, b, c)  ___ELF(a, b, c)
-#define  _Elf(t)        __ELF(Elf, CONFIG_BITS, t)
-#define  _ELF(t)        __ELF(ELF, CONFIG_BITS, t)
-
-#define Elf_Shdr     _Elf(_Shdr)
-#define Elf_Sym      _Elf(_Sym)
-#define Elf_Ehdr     _Elf(_Ehdr)
-#define Elf_Rela     _Elf(_Rela)
-#define Elf_Addr     _Elf(_Addr)
-
-#define ELF_R_SYM    _ELF(_R_SYM)
-#define ELF_R_TYPE   _ELF(_R_TYPE)
-
-#endif /* __SPARC_MODULE_H */
index 932e4430f7f3323ef9be06d2f4b1f8ac98ae611f..1603f304339986be9f96bdd8406ebf6973e8130b 100644 (file)
@@ -17,6 +17,7 @@ config TILE
        select SYS_HYPERVISOR
        select ARCH_HAVE_NMI_SAFE_CMPXCHG
        select GENERIC_CLOCKEVENTS
+       select MODULES_USE_ELF_RELA
 
 # FIXME: investigate whether we need/want these options.
 #      select HAVE_IOREMAP_PROT
index b0a47433341e4164988c8332ff85b1560eb11252..5ef081475bbaefa457b9b875bcb2c15c5303de92 100644 (file)
@@ -14,6 +14,7 @@ config UNICORE32
        select GENERIC_IRQ_SHOW
        select ARCH_WANT_FRAME_POINTERS
        select GENERIC_IOMAP
+       select MODULES_USE_ELF_REL
        help
          UniCore-32 is 32-bit Instruction Set Architecture,
          including a series of low-power-consumption RISC chip
index 8ec3a1aa4abd3f612df4a5da31f30c67554d5182..01726cbcc73bd23a7d318201247e2b1b8c909648 100644 (file)
@@ -97,6 +97,8 @@ config X86
        select KTIME_SCALAR if X86_32
        select GENERIC_STRNCPY_FROM_USER
        select GENERIC_STRNLEN_USER
+       select MODULES_USE_ELF_REL if X86_32
+       select MODULES_USE_ELF_RELA if X86_64
 
 config INSTRUCTION_DECODER
        def_bool (KPROBES || PERF_EVENTS || UPROBES)
index 9926e11a772dbe9b5417fa204407c2ec9ee58878..a4b0c10c9d5d571673db4278f67c86eeb30cc094 100644 (file)
@@ -21,9 +21,11 @@ config 64BIT
 config X86_32
        def_bool !64BIT
        select HAVE_AOUT
+       select MODULES_USE_ELF_REL
 
 config X86_64
        def_bool 64BIT
+       select MODULES_USE_ELF_RELA
 
 config RWSEM_XCHGADD_ALGORITHM
        def_bool X86_XADD && 64BIT
index 8ed64cfae4ff1f46953315f04853ce06831394f5..4816e44001f1ed8943c7fa70c6af199ba674c4df 100644 (file)
@@ -11,6 +11,7 @@ config XTENSA
        select HAVE_GENERIC_HARDIRQS
        select GENERIC_IRQ_SHOW
        select GENERIC_CPU_DEVICES
+       select MODULES_USE_ELF_RELA
        help
          Xtensa processors are 32-bit RISC machines designed by Tensilica
          primarily for embedded systems.  These processors are both
index d9b34bee4d4255955bb0fae7340eb135a43158c4..488b40c6f9b9aa89fcf0cce02d33e9bd6bfa6274 100644 (file)
 #ifndef _XTENSA_MODULE_H
 #define _XTENSA_MODULE_H
 
-struct mod_arch_specific
-{
-       /* No special elements, yet. */
-};
-
 #define MODULE_ARCH_VERMAGIC "xtensa-" __stringify(XCHAL_CORE_ID) " "
 
-#define Elf_Shdr Elf32_Shdr
-#define Elf_Sym Elf32_Sym
-#define Elf_Ehdr Elf32_Ehdr
+#include <asm-generic/module.h>
 
 #endif /* _XTENSA_MODULE_H */
index ed5b44de4c915b27b61a2ef77dc58d0c69ecc569..14dc41d185a7a3163bc59f45a9df37588584fb65 100644 (file)
@@ -5,18 +5,44 @@
  * 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_Sym Elf64_Sym
-#define Elf_Ehdr Elf64_Ehdr
-#else
-#define Elf_Shdr Elf32_Shdr
-#define Elf_Sym Elf32_Sym
-#define Elf_Ehdr Elf32_Ehdr
+#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 */
index b2be02ebf453df40cb07ab7fdfa261903fa44c11..560ca53a75fa629b1be138b07f865f95c07b2bb3 100644 (file)
@@ -28,21 +28,49 @@ void *module_alloc(unsigned long size);
 /* Free memory returned from module_alloc. */
 void module_free(struct module *mod, void *module_region);
 
-/* Apply the given relocation to the (simplified) ELF.  Return -error
-   or 0. */
+/*
+ * Apply the given relocation to the (simplified) ELF.  Return -error
+ * or 0.
+ */
+#ifdef CONFIG_MODULES_USE_ELF_REL
 int apply_relocate(Elf_Shdr *sechdrs,
                   const char *strtab,
                   unsigned int symindex,
                   unsigned int relsec,
                   struct module *mod);
+#else
+static inline int apply_relocate(Elf_Shdr *sechdrs,
+                                const char *strtab,
+                                unsigned int symindex,
+                                unsigned int relsec,
+                                struct module *me)
+{
+       printk(KERN_ERR "module %s: REL relocation unsupported\n", me->name);
+       return -ENOEXEC;
+}
+#endif
 
-/* Apply the given add relocation to the (simplified) ELF.  Return
-   -error or 0 */
+/*
+ * Apply the given add relocation to the (simplified) ELF.  Return
+ * -error or 0
+ */
+#ifdef CONFIG_MODULES_USE_ELF_RELA
 int apply_relocate_add(Elf_Shdr *sechdrs,
                       const char *strtab,
                       unsigned int symindex,
                       unsigned int relsec,
                       struct module *mod);
+#else
+static inline int apply_relocate_add(Elf_Shdr *sechdrs,
+                                    const char *strtab,
+                                    unsigned int symindex,
+                                    unsigned int relsec,
+                                    struct module *me)
+{
+       printk(KERN_ERR "module %s: REL relocation unsupported\n", me->name);
+       return -ENOEXEC;
+}
+#endif
 
 /* Any final processing of module before access.  Return -error or 0. */
 int module_finalize(const Elf_Ehdr *hdr,
index 9ad9ee9406d64df05e9938fb16852180cb2feb54..7f2ee45f362c5a59de4c07a24ff52507451421ce 100644 (file)
@@ -1949,26 +1949,6 @@ static int simplify_symbols(struct module *mod, const struct load_info *info)
        return ret;
 }
 
-int __weak apply_relocate(Elf_Shdr *sechdrs,
-                         const char *strtab,
-                         unsigned int symindex,
-                         unsigned int relsec,
-                         struct module *me)
-{
-       pr_err("module %s: REL relocation unsupported\n", me->name);
-       return -ENOEXEC;
-}
-
-int __weak apply_relocate_add(Elf_Shdr *sechdrs,
-                             const char *strtab,
-                             unsigned int symindex,
-                             unsigned int relsec,
-                             struct module *me)
-{
-       pr_err("module %s: RELA relocation unsupported\n", me->name);
-       return -ENOEXEC;
-}
-
 static int apply_relocations(struct module *mod, const struct load_info *info)
 {
        unsigned int i;