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>
	
	
This commit is contained in:
		
					parent
					
						
							
								6ede81239e
							
						
					
				
			
			
				commit
				
					
						786d35d45c
					
				
			
		
					 57 changed files with 168 additions and 224 deletions
				
			
		
							
								
								
									
										19
									
								
								arch/Kconfig
									
										
									
									
									
								
							
							
						
						
									
										19
									
								
								arch/Kconfig
									
										
									
									
									
								
							|  | @ -281,4 +281,23 @@ config SECCOMP_FILTER | ||||||
| 
 | 
 | ||||||
| 	  See Documentation/prctl/seccomp_filter.txt for details. | 	  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" | source "kernel/gcov/Kconfig" | ||||||
|  |  | ||||||
|  | @ -20,6 +20,8 @@ config ALPHA | ||||||
| 	select GENERIC_CMOS_UPDATE | 	select GENERIC_CMOS_UPDATE | ||||||
| 	select GENERIC_STRNCPY_FROM_USER | 	select GENERIC_STRNCPY_FROM_USER | ||||||
| 	select GENERIC_STRNLEN_USER | 	select GENERIC_STRNLEN_USER | ||||||
|  | 	select HAVE_MOD_ARCH_SPECIFIC | ||||||
|  | 	select MODULES_USE_ELF_RELA | ||||||
| 	help | 	help | ||||||
| 	  The Alpha is a 64-bit general-purpose processor designed and | 	  The Alpha is a 64-bit general-purpose processor designed and | ||||||
| 	  marketed by the Digital Equipment Corporation of blessed memory, | 	  marketed by the Digital Equipment Corporation of blessed memory, | ||||||
|  |  | ||||||
|  | @ -1,19 +1,13 @@ | ||||||
| #ifndef _ALPHA_MODULE_H | #ifndef _ALPHA_MODULE_H | ||||||
| #define _ALPHA_MODULE_H | #define _ALPHA_MODULE_H | ||||||
| 
 | 
 | ||||||
|  | #include <asm-generic/module.h> | ||||||
|  | 
 | ||||||
| struct mod_arch_specific | struct mod_arch_specific | ||||||
| { | { | ||||||
| 	unsigned int gotsecindex; | 	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 | #define ARCH_SHF_SMALL SHF_ALPHA_GPREL | ||||||
| 
 | 
 | ||||||
| #ifdef MODULE | #ifdef MODULE | ||||||
|  |  | ||||||
|  | @ -49,6 +49,8 @@ config ARM | ||||||
| 	select GENERIC_STRNCPY_FROM_USER | 	select GENERIC_STRNCPY_FROM_USER | ||||||
| 	select GENERIC_STRNLEN_USER | 	select GENERIC_STRNLEN_USER | ||||||
| 	select DCACHE_WORD_ACCESS if (CPU_V6 || CPU_V6K || CPU_V7) && !CPU_BIG_ENDIAN | 	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 | 	help | ||||||
| 	  The ARM series is a line of low-power-consumption RISC chip designs | 	  The ARM series is a line of low-power-consumption RISC chip designs | ||||||
| 	  licensed by ARM Ltd and targeted at embedded applications and | 	  licensed by ARM Ltd and targeted at embedded applications and | ||||||
|  |  | ||||||
|  | @ -1,9 +1,7 @@ | ||||||
| #ifndef _ASM_ARM_MODULE_H | #ifndef _ASM_ARM_MODULE_H | ||||||
| #define _ASM_ARM_MODULE_H | #define _ASM_ARM_MODULE_H | ||||||
| 
 | 
 | ||||||
| #define Elf_Shdr	Elf32_Shdr | #include <asm-generic/module.h> | ||||||
| #define Elf_Sym		Elf32_Sym |  | ||||||
| #define Elf_Ehdr	Elf32_Ehdr |  | ||||||
| 
 | 
 | ||||||
| struct unwind_table; | struct unwind_table; | ||||||
| 
 | 
 | ||||||
|  | @ -16,13 +14,11 @@ enum { | ||||||
| 	ARM_SEC_DEVEXIT, | 	ARM_SEC_DEVEXIT, | ||||||
| 	ARM_SEC_MAX, | 	ARM_SEC_MAX, | ||||||
| }; | }; | ||||||
| #endif |  | ||||||
| 
 | 
 | ||||||
| struct mod_arch_specific { | struct mod_arch_specific { | ||||||
| #ifdef CONFIG_ARM_UNWIND |  | ||||||
| 	struct unwind_table *unwind[ARM_SEC_MAX]; | 	struct unwind_table *unwind[ARM_SEC_MAX]; | ||||||
| #endif |  | ||||||
| }; | }; | ||||||
|  | #endif | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  * Add the ARM architecture version to the version magic string |  * Add the ARM architecture version to the version magic string | ||||||
|  |  | ||||||
|  | @ -15,6 +15,8 @@ config AVR32 | ||||||
| 	select ARCH_WANT_IPC_PARSE_VERSION | 	select ARCH_WANT_IPC_PARSE_VERSION | ||||||
| 	select ARCH_HAVE_NMI_SAFE_CMPXCHG | 	select ARCH_HAVE_NMI_SAFE_CMPXCHG | ||||||
| 	select GENERIC_CLOCKEVENTS | 	select GENERIC_CLOCKEVENTS | ||||||
|  | 	select HAVE_MOD_ARCH_SPECIFIC | ||||||
|  | 	select MODULES_USE_ELF_RELA | ||||||
| 	help | 	help | ||||||
| 	  AVR32 is a high-performance 32-bit RISC microprocessor core, | 	  AVR32 is a high-performance 32-bit RISC microprocessor core, | ||||||
| 	  designed for cost-sensitive embedded applications, with particular | 	  designed for cost-sensitive embedded applications, with particular | ||||||
|  |  | ||||||
|  | @ -1,6 +1,8 @@ | ||||||
| #ifndef __ASM_AVR32_MODULE_H | #ifndef __ASM_AVR32_MODULE_H | ||||||
| #define __ASM_AVR32_MODULE_H | #define __ASM_AVR32_MODULE_H | ||||||
| 
 | 
 | ||||||
|  | #include <asm-generic/module.h> | ||||||
|  | 
 | ||||||
| struct mod_arch_syminfo { | struct mod_arch_syminfo { | ||||||
| 	unsigned long got_offset; | 	unsigned long got_offset; | ||||||
| 	int got_initialized; | 	int got_initialized; | ||||||
|  | @ -17,10 +19,6 @@ struct mod_arch_specific { | ||||||
| 	struct mod_arch_syminfo *syminfo; | 	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_PROC_FAMILY "AVR32v1" | ||||||
| 
 | 
 | ||||||
| #define MODULE_ARCH_VERMAGIC MODULE_PROC_FAMILY | #define MODULE_ARCH_VERMAGIC MODULE_PROC_FAMILY | ||||||
|  |  | ||||||
|  | @ -42,6 +42,8 @@ config BLACKFIN | ||||||
| 	select HAVE_NMI_WATCHDOG if NMI_WATCHDOG | 	select HAVE_NMI_WATCHDOG if NMI_WATCHDOG | ||||||
| 	select GENERIC_SMP_IDLE_THREAD | 	select GENERIC_SMP_IDLE_THREAD | ||||||
| 	select ARCH_USES_GETTIMEOFFSET if !GENERIC_CLOCKEVENTS | 	select ARCH_USES_GETTIMEOFFSET if !GENERIC_CLOCKEVENTS | ||||||
|  | 	select HAVE_MOD_ARCH_SPECIFIC | ||||||
|  | 	select MODULES_USE_ELF_RELA | ||||||
| 
 | 
 | ||||||
| config GENERIC_CSUM | config GENERIC_CSUM | ||||||
| 	def_bool y | 	def_bool y | ||||||
|  |  | ||||||
|  | @ -7,9 +7,7 @@ | ||||||
| #ifndef _ASM_BFIN_MODULE_H | #ifndef _ASM_BFIN_MODULE_H | ||||||
| #define _ASM_BFIN_MODULE_H | #define _ASM_BFIN_MODULE_H | ||||||
| 
 | 
 | ||||||
| #define Elf_Shdr        Elf32_Shdr | #include <asm-generic/module.h> | ||||||
| #define Elf_Sym         Elf32_Sym |  | ||||||
| #define Elf_Ehdr        Elf32_Ehdr |  | ||||||
| 
 | 
 | ||||||
| struct mod_arch_specific { | struct mod_arch_specific { | ||||||
| 	Elf_Shdr	*text_l1; | 	Elf_Shdr	*text_l1; | ||||||
|  |  | ||||||
|  | @ -17,6 +17,7 @@ config C6X | ||||||
| 	select OF | 	select OF | ||||||
| 	select OF_EARLY_FLATTREE | 	select OF_EARLY_FLATTREE | ||||||
| 	select GENERIC_CLOCKEVENTS | 	select GENERIC_CLOCKEVENTS | ||||||
|  | 	select MODULES_USE_ELF_RELA | ||||||
| 
 | 
 | ||||||
| config MMU | config MMU | ||||||
| 	def_bool n | 	def_bool n | ||||||
|  |  | ||||||
|  | @ -13,17 +13,7 @@ | ||||||
| #ifndef _ASM_C6X_MODULE_H | #ifndef _ASM_C6X_MODULE_H | ||||||
| #define _ASM_C6X_MODULE_H | #define _ASM_C6X_MODULE_H | ||||||
| 
 | 
 | ||||||
| #define Elf_Shdr	Elf32_Shdr | #include <asm-generic/module.h> | ||||||
| #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 { |  | ||||||
| }; |  | ||||||
| 
 | 
 | ||||||
| struct loaded_sections { | struct loaded_sections { | ||||||
| 	unsigned int new_vaddr; | 	unsigned int new_vaddr; | ||||||
|  |  | ||||||
|  | @ -47,6 +47,7 @@ config CRIS | ||||||
| 	select GENERIC_IOMAP | 	select GENERIC_IOMAP | ||||||
| 	select GENERIC_SMP_IDLE_THREAD if ETRAX_ARCH_V32 | 	select GENERIC_SMP_IDLE_THREAD if ETRAX_ARCH_V32 | ||||||
| 	select GENERIC_CMOS_UPDATE | 	select GENERIC_CMOS_UPDATE | ||||||
|  | 	select MODULES_USE_ELF_RELA | ||||||
| 
 | 
 | ||||||
| config HZ | config HZ | ||||||
| 	int | 	int | ||||||
|  |  | ||||||
|  | @ -7,3 +7,5 @@ header-y += ethernet.h | ||||||
| header-y += etraxgpio.h | header-y += etraxgpio.h | ||||||
| header-y += rs485.h | header-y += rs485.h | ||||||
| header-y += sync_serial.h | header-y += sync_serial.h | ||||||
|  | 
 | ||||||
|  | generic-y += module.h | ||||||
|  |  | ||||||
|  | @ -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 */ |  | ||||||
|  | @ -11,13 +11,7 @@ | ||||||
| #ifndef _ASM_MODULE_H | #ifndef _ASM_MODULE_H | ||||||
| #define _ASM_MODULE_H | #define _ASM_MODULE_H | ||||||
| 
 | 
 | ||||||
| struct mod_arch_specific | #include <asm-generic/module.h> | ||||||
| { |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| #define Elf_Shdr	Elf32_Shdr |  | ||||||
| #define Elf_Sym		Elf32_Sym |  | ||||||
| #define Elf_Ehdr	Elf32_Ehdr |  | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  * Include the architecture version. |  * Include the architecture version. | ||||||
|  |  | ||||||
|  | @ -6,6 +6,7 @@ config H8300 | ||||||
| 	select ARCH_WANT_IPC_PARSE_VERSION | 	select ARCH_WANT_IPC_PARSE_VERSION | ||||||
| 	select GENERIC_IRQ_SHOW | 	select GENERIC_IRQ_SHOW | ||||||
| 	select GENERIC_CPU_DEVICES | 	select GENERIC_CPU_DEVICES | ||||||
|  | 	select MODULES_USE_ELF_RELA | ||||||
| 
 | 
 | ||||||
| config SYMBOL_PREFIX | config SYMBOL_PREFIX | ||||||
| 	string | 	string | ||||||
|  |  | ||||||
|  | @ -1 +1,3 @@ | ||||||
| include include/asm-generic/Kbuild.asm | include include/asm-generic/Kbuild.asm | ||||||
|  | 
 | ||||||
|  | generic-y	+= module.h | ||||||
|  |  | ||||||
|  | @ -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 */ |  | ||||||
|  | @ -30,6 +30,7 @@ config HEXAGON | ||||||
| 	select KTIME_SCALAR | 	select KTIME_SCALAR | ||||||
| 	select GENERIC_CLOCKEVENTS | 	select GENERIC_CLOCKEVENTS | ||||||
| 	select GENERIC_CLOCKEVENTS_BROADCAST | 	select GENERIC_CLOCKEVENTS_BROADCAST | ||||||
|  | 	select MODULES_USE_ELF_RELA | ||||||
| 	---help--- | 	---help--- | ||||||
| 	  Qualcomm Hexagon is a processor architecture designed for high | 	  Qualcomm Hexagon is a processor architecture designed for high | ||||||
| 	  performance and low power across a wide variety of applications. | 	  performance and low power across a wide variety of applications. | ||||||
|  |  | ||||||
|  | @ -39,6 +39,8 @@ config IA64 | ||||||
| 	select ARCH_THREAD_INFO_ALLOCATOR | 	select ARCH_THREAD_INFO_ALLOCATOR | ||||||
| 	select ARCH_CLOCKSOURCE_DATA | 	select ARCH_CLOCKSOURCE_DATA | ||||||
| 	select GENERIC_TIME_VSYSCALL | 	select GENERIC_TIME_VSYSCALL | ||||||
|  | 	select HAVE_MOD_ARCH_SPECIFIC | ||||||
|  | 	select MODULES_USE_ELF_RELA | ||||||
| 	default y | 	default y | ||||||
| 	help | 	help | ||||||
| 	  The Itanium Processor Family is Intel's 64-bit successor to | 	  The Itanium Processor Family is Intel's 64-bit successor to | ||||||
|  |  | ||||||
|  | @ -1,6 +1,8 @@ | ||||||
| #ifndef _ASM_IA64_MODULE_H | #ifndef _ASM_IA64_MODULE_H | ||||||
| #define _ASM_IA64_MODULE_H | #define _ASM_IA64_MODULE_H | ||||||
| 
 | 
 | ||||||
|  | #include <asm-generic/module.h> | ||||||
|  | 
 | ||||||
| /*
 | /*
 | ||||||
|  * IA-64-specific support for kernel module loader. |  * 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 */ | 	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_PROC_FAMILY	"ia64" | ||||||
| #define MODULE_ARCH_VERMAGIC	MODULE_PROC_FAMILY \ | #define MODULE_ARCH_VERMAGIC	MODULE_PROC_FAMILY \ | ||||||
| 	"gcc-" __stringify(__GNUC__) "." __stringify(__GNUC_MINOR__) | 	"gcc-" __stringify(__GNUC__) "." __stringify(__GNUC_MINOR__) | ||||||
|  |  | ||||||
|  | @ -13,6 +13,7 @@ config M32R | ||||||
| 	select GENERIC_IRQ_SHOW | 	select GENERIC_IRQ_SHOW | ||||||
| 	select GENERIC_ATOMIC64 | 	select GENERIC_ATOMIC64 | ||||||
| 	select ARCH_USES_GETTIMEOFFSET | 	select ARCH_USES_GETTIMEOFFSET | ||||||
|  | 	select MODULES_USE_ELF_RELA | ||||||
| 
 | 
 | ||||||
| config SBUS | config SBUS | ||||||
| 	bool | 	bool | ||||||
|  |  | ||||||
|  | @ -1 +1,3 @@ | ||||||
| include include/asm-generic/Kbuild.asm | include include/asm-generic/Kbuild.asm | ||||||
|  | 
 | ||||||
|  | generic-y	+= module.h | ||||||
|  |  | ||||||
|  | @ -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 */ |  | ||||||
|  | @ -201,18 +201,3 @@ int apply_relocate_add(Elf32_Shdr *sechdrs, | ||||||
| 	} | 	} | ||||||
| 	return 0; | 	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; |  | ||||||
| 
 |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  | @ -13,6 +13,9 @@ config M68K | ||||||
| 	select FPU if MMU | 	select FPU if MMU | ||||||
| 	select ARCH_WANT_IPC_PARSE_VERSION | 	select ARCH_WANT_IPC_PARSE_VERSION | ||||||
| 	select ARCH_USES_GETTIMEOFFSET if MMU && !COLDFIRE | 	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 | config RWSEM_GENERIC_SPINLOCK | ||||||
| 	bool | 	bool | ||||||
|  |  | ||||||
|  | @ -1,6 +1,8 @@ | ||||||
| #ifndef _ASM_M68K_MODULE_H | #ifndef _ASM_M68K_MODULE_H | ||||||
| #define _ASM_M68K_MODULE_H | #define _ASM_M68K_MODULE_H | ||||||
| 
 | 
 | ||||||
|  | #include <asm-generic/module.h> | ||||||
|  | 
 | ||||||
| enum m68k_fixup_type { | enum m68k_fixup_type { | ||||||
| 	m68k_fixup_memoffset, | 	m68k_fixup_memoffset, | ||||||
| 	m68k_fixup_vnode_shift, | 	m68k_fixup_vnode_shift, | ||||||
|  | @ -36,8 +38,4 @@ struct module; | ||||||
| extern void module_fixup(struct module *mod, struct m68k_fixup_info *start, | extern void module_fixup(struct module *mod, struct m68k_fixup_info *start, | ||||||
| 			 struct m68k_fixup_info *end); | 			 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 */ | #endif /* _ASM_M68K_MODULE_H */ | ||||||
|  |  | ||||||
|  | @ -24,6 +24,7 @@ config MICROBLAZE | ||||||
| 	select GENERIC_CPU_DEVICES | 	select GENERIC_CPU_DEVICES | ||||||
| 	select GENERIC_ATOMIC64 | 	select GENERIC_ATOMIC64 | ||||||
| 	select GENERIC_CLOCKEVENTS | 	select GENERIC_CLOCKEVENTS | ||||||
|  | 	select MODULES_USE_ELF_RELA | ||||||
| 
 | 
 | ||||||
| config SWAP | config SWAP | ||||||
| 	def_bool n | 	def_bool n | ||||||
|  |  | ||||||
|  | @ -36,6 +36,9 @@ config MIPS | ||||||
| 	select BUILDTIME_EXTABLE_SORT | 	select BUILDTIME_EXTABLE_SORT | ||||||
| 	select GENERIC_CLOCKEVENTS | 	select GENERIC_CLOCKEVENTS | ||||||
| 	select GENERIC_CMOS_UPDATE | 	select GENERIC_CMOS_UPDATE | ||||||
|  | 	select HAVE_MOD_ARCH_SPECIFIC | ||||||
|  | 	select MODULES_USE_ELF_REL | ||||||
|  | 	select MODULES_USE_ELF_RELA if 64BIT | ||||||
| 
 | 
 | ||||||
| menu "Machine selection" | menu "Machine selection" | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -35,11 +35,14 @@ typedef struct { | ||||||
| } Elf64_Mips_Rela; | } Elf64_Mips_Rela; | ||||||
| 
 | 
 | ||||||
| #ifdef CONFIG_32BIT | #ifdef CONFIG_32BIT | ||||||
| 
 |  | ||||||
| #define Elf_Shdr	Elf32_Shdr | #define Elf_Shdr	Elf32_Shdr | ||||||
| #define Elf_Sym		Elf32_Sym | #define Elf_Sym		Elf32_Sym | ||||||
| #define Elf_Ehdr	Elf32_Ehdr | #define Elf_Ehdr	Elf32_Ehdr | ||||||
| #define Elf_Addr	Elf32_Addr | #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_Rel	Elf32_Rel | ||||||
| #define Elf_Mips_Rela	Elf32_Rela | #define Elf_Mips_Rela	Elf32_Rela | ||||||
|  | @ -50,11 +53,14 @@ typedef struct { | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| #ifdef CONFIG_64BIT | #ifdef CONFIG_64BIT | ||||||
| 
 |  | ||||||
| #define Elf_Shdr	Elf64_Shdr | #define Elf_Shdr	Elf64_Shdr | ||||||
| #define Elf_Sym		Elf64_Sym | #define Elf_Sym		Elf64_Sym | ||||||
| #define Elf_Ehdr	Elf64_Ehdr | #define Elf_Ehdr	Elf64_Ehdr | ||||||
| #define Elf_Addr	Elf64_Addr | #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_Rel	Elf64_Mips_Rel | ||||||
| #define Elf_Mips_Rela	Elf64_Mips_Rela | #define Elf_Mips_Rela	Elf64_Mips_Rela | ||||||
|  |  | ||||||
|  | @ -31,7 +31,7 @@ obj-$(CONFIG_SYNC_R4K)		+= sync-r4k.o | ||||||
| 
 | 
 | ||||||
| obj-$(CONFIG_STACKTRACE)	+= stacktrace.o | obj-$(CONFIG_STACKTRACE)	+= stacktrace.o | ||||||
| obj-$(CONFIG_MODULES)		+= mips_ksyms.o module.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 | obj-$(CONFIG_FUNCTION_TRACER)	+= mcount.o ftrace.o | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -8,6 +8,7 @@ config MN10300 | ||||||
| 	select HAVE_ARCH_KGDB | 	select HAVE_ARCH_KGDB | ||||||
| 	select HAVE_NMI_WATCHDOG if MN10300_WD_TIMER | 	select HAVE_NMI_WATCHDOG if MN10300_WD_TIMER | ||||||
| 	select GENERIC_CLOCKEVENTS | 	select GENERIC_CLOCKEVENTS | ||||||
|  | 	select MODULES_USE_ELF_RELA | ||||||
| 
 | 
 | ||||||
| config AM33_2 | config AM33_2 | ||||||
| 	def_bool n | 	def_bool n | ||||||
|  |  | ||||||
|  | @ -12,12 +12,7 @@ | ||||||
| #ifndef _ASM_MODULE_H | #ifndef _ASM_MODULE_H | ||||||
| #define _ASM_MODULE_H | #define _ASM_MODULE_H | ||||||
| 
 | 
 | ||||||
| struct mod_arch_specific { | #include <asm-generic/module.h> | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| #define Elf_Shdr	Elf32_Shdr |  | ||||||
| #define Elf_Sym		Elf32_Sym |  | ||||||
| #define Elf_Ehdr	Elf32_Ehdr |  | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  * Include the MN10300 architecture version. |  * Include the MN10300 architecture version. | ||||||
|  |  | ||||||
|  | @ -21,6 +21,7 @@ config OPENRISC | ||||||
| 	select GENERIC_CLOCKEVENTS | 	select GENERIC_CLOCKEVENTS | ||||||
| 	select GENERIC_STRNCPY_FROM_USER | 	select GENERIC_STRNCPY_FROM_USER | ||||||
| 	select GENERIC_STRNLEN_USER | 	select GENERIC_STRNLEN_USER | ||||||
|  | 	select MODULES_USE_ELF_RELA | ||||||
| 
 | 
 | ||||||
| config MMU | config MMU | ||||||
| 	def_bool y | 	def_bool y | ||||||
|  |  | ||||||
|  | @ -19,6 +19,8 @@ config PARISC | ||||||
| 	select ARCH_HAVE_NMI_SAFE_CMPXCHG | 	select ARCH_HAVE_NMI_SAFE_CMPXCHG | ||||||
| 	select GENERIC_SMP_IDLE_THREAD | 	select GENERIC_SMP_IDLE_THREAD | ||||||
| 	select GENERIC_STRNCPY_FROM_USER | 	select GENERIC_STRNCPY_FROM_USER | ||||||
|  | 	select HAVE_MOD_ARCH_SPECIFIC | ||||||
|  | 	select MODULES_USE_ELF_RELA | ||||||
| 
 | 
 | ||||||
| 	help | 	help | ||||||
| 	  The PA-RISC microprocessor is designed by Hewlett-Packard and used | 	  The PA-RISC microprocessor is designed by Hewlett-Packard and used | ||||||
|  |  | ||||||
|  | @ -1,21 +1,11 @@ | ||||||
| #ifndef _ASM_PARISC_MODULE_H | #ifndef _ASM_PARISC_MODULE_H | ||||||
| #define _ASM_PARISC_MODULE_H | #define _ASM_PARISC_MODULE_H | ||||||
|  | 
 | ||||||
|  | #include <asm-generic/module.h> | ||||||
|  | 
 | ||||||
| /*
 | /*
 | ||||||
|  * This file contains the parisc architecture specific module code. |  * 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; | struct unwind_table; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -139,6 +139,8 @@ config PPC | ||||||
| 	select GENERIC_CLOCKEVENTS | 	select GENERIC_CLOCKEVENTS | ||||||
| 	select GENERIC_STRNCPY_FROM_USER | 	select GENERIC_STRNCPY_FROM_USER | ||||||
| 	select GENERIC_STRNLEN_USER | 	select GENERIC_STRNLEN_USER | ||||||
|  | 	select HAVE_MOD_ARCH_SPECIFIC | ||||||
|  | 	select MODULES_USE_ELF_RELA | ||||||
| 
 | 
 | ||||||
| config EARLY_PRINTK | config EARLY_PRINTK | ||||||
| 	bool | 	bool | ||||||
|  |  | ||||||
|  | @ -11,6 +11,7 @@ | ||||||
| 
 | 
 | ||||||
| #include <linux/list.h> | #include <linux/list.h> | ||||||
| #include <asm/bug.h> | #include <asm/bug.h> | ||||||
|  | #include <asm-generic/module.h> | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| #ifndef __powerpc64__ | #ifndef __powerpc64__ | ||||||
|  | @ -60,16 +61,10 @@ struct mod_arch_specific { | ||||||
|  */ |  */ | ||||||
| 
 | 
 | ||||||
| #ifdef __powerpc64__ | #ifdef __powerpc64__ | ||||||
| #    define Elf_Shdr	Elf64_Shdr |  | ||||||
| #    define Elf_Sym	Elf64_Sym |  | ||||||
| #    define Elf_Ehdr	Elf64_Ehdr |  | ||||||
| #    ifdef MODULE | #    ifdef MODULE | ||||||
| 	asm(".section .stubs,\"ax\",@nobits; .align 3; .previous"); | 	asm(".section .stubs,\"ax\",@nobits; .align 3; .previous"); | ||||||
| #    endif | #    endif | ||||||
| #else | #else | ||||||
| #    define Elf_Shdr	Elf32_Shdr |  | ||||||
| #    define Elf_Sym	Elf32_Sym |  | ||||||
| #    define Elf_Ehdr	Elf32_Ehdr |  | ||||||
| #    ifdef MODULE | #    ifdef MODULE | ||||||
| 	asm(".section .plt,\"ax\",@nobits; .align 3; .previous"); | 	asm(".section .plt,\"ax\",@nobits; .align 3; .previous"); | ||||||
| 	asm(".section .init.plt,\"ax\",@nobits; .align 3; .previous"); | 	asm(".section .init.plt,\"ax\",@nobits; .align 3; .previous"); | ||||||
|  |  | ||||||
|  | @ -125,6 +125,8 @@ config S390 | ||||||
| 	select GENERIC_CLOCKEVENTS | 	select GENERIC_CLOCKEVENTS | ||||||
| 	select KTIME_SCALAR if 32BIT | 	select KTIME_SCALAR if 32BIT | ||||||
| 	select HAVE_ARCH_SECCOMP_FILTER | 	select HAVE_ARCH_SECCOMP_FILTER | ||||||
|  | 	select HAVE_MOD_ARCH_SPECIFIC | ||||||
|  | 	select MODULES_USE_ELF_RELA | ||||||
| 
 | 
 | ||||||
| config SCHED_OMIT_FRAME_POINTER | config SCHED_OMIT_FRAME_POINTER | ||||||
| 	def_bool y | 	def_bool y | ||||||
|  |  | ||||||
|  | @ -1,5 +1,8 @@ | ||||||
| #ifndef _ASM_S390_MODULE_H | #ifndef _ASM_S390_MODULE_H | ||||||
| #define _ASM_S390_MODULE_H | #define _ASM_S390_MODULE_H | ||||||
|  | 
 | ||||||
|  | #include <asm-generic/module.h> | ||||||
|  | 
 | ||||||
| /*
 | /*
 | ||||||
|  * This file contains the s390 architecture specific module code. |  * This file contains the s390 architecture specific module code. | ||||||
|  */ |  */ | ||||||
|  | @ -28,19 +31,4 @@ struct mod_arch_specific | ||||||
| 	struct mod_arch_syminfo *syminfo; | 	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 */ | #endif /* _ASM_S390_MODULE_H */ | ||||||
|  |  | ||||||
|  | @ -10,6 +10,8 @@ config SCORE | ||||||
|        select ARCH_DISCARD_MEMBLOCK |        select ARCH_DISCARD_MEMBLOCK | ||||||
|        select GENERIC_CPU_DEVICES |        select GENERIC_CPU_DEVICES | ||||||
|        select GENERIC_CLOCKEVENTS |        select GENERIC_CLOCKEVENTS | ||||||
|  |        select HAVE_MOD_ARCH_SPECIFIC | ||||||
|  | 	select MODULES_USE_ELF_REL | ||||||
| 
 | 
 | ||||||
| choice | choice | ||||||
| 	prompt "System type" | 	prompt "System type" | ||||||
|  |  | ||||||
|  | @ -3,6 +3,7 @@ | ||||||
| 
 | 
 | ||||||
| #include <linux/list.h> | #include <linux/list.h> | ||||||
| #include <asm/uaccess.h> | #include <asm/uaccess.h> | ||||||
|  | #include <asm-generic/module.h> | ||||||
| 
 | 
 | ||||||
| struct mod_arch_specific { | struct mod_arch_specific { | ||||||
| 	/* Data Bus Error exception tables */ | 	/* Data Bus Error exception tables */ | ||||||
|  | @ -13,11 +14,6 @@ struct mod_arch_specific { | ||||||
| 
 | 
 | ||||||
| typedef uint8_t Elf64_Byte;		/* Type for a 8-bit quantity. */ | 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. */ | /* Given an address, look for it in the exception tables. */ | ||||||
| #ifdef CONFIG_MODULES | #ifdef CONFIG_MODULES | ||||||
| const struct exception_table_entry *search_module_dbetables(unsigned long addr); | const struct exception_table_entry *search_module_dbetables(unsigned long addr); | ||||||
|  |  | ||||||
|  | @ -125,16 +125,6 @@ int apply_relocate(Elf_Shdr *sechdrs, const char *strtab, | ||||||
| 	return 0; | 	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. */ | /* Given an address, look for it in the module exception tables. */ | ||||||
| const struct exception_table_entry *search_module_dbetables(unsigned long addr) | const struct exception_table_entry *search_module_dbetables(unsigned long addr) | ||||||
| { | { | ||||||
|  |  | ||||||
|  | @ -35,6 +35,8 @@ config SUPERH | ||||||
| 	select GENERIC_CMOS_UPDATE if SH_SH03 || SH_DREAMCAST | 	select GENERIC_CMOS_UPDATE if SH_SH03 || SH_DREAMCAST | ||||||
| 	select GENERIC_STRNCPY_FROM_USER | 	select GENERIC_STRNCPY_FROM_USER | ||||||
| 	select GENERIC_STRNLEN_USER | 	select GENERIC_STRNLEN_USER | ||||||
|  | 	select HAVE_MOD_ARCH_SPECIFIC if DWARF_UNWINDER | ||||||
|  | 	select MODULES_USE_ELF_RELA | ||||||
| 	help | 	help | ||||||
| 	  The SuperH is a RISC processor targeted for use in embedded systems | 	  The SuperH is a RISC processor targeted for use in embedded systems | ||||||
| 	  and consumer electronics; it was also used in the Sega Dreamcast | 	  and consumer electronics; it was also used in the Sega Dreamcast | ||||||
|  |  | ||||||
|  | @ -1,21 +1,13 @@ | ||||||
| #ifndef _ASM_SH_MODULE_H | #ifndef _ASM_SH_MODULE_H | ||||||
| #define _ASM_SH_MODULE_H | #define _ASM_SH_MODULE_H | ||||||
| 
 | 
 | ||||||
| struct mod_arch_specific { | #include <asm-generic/module.h> | ||||||
|  | 
 | ||||||
| #ifdef CONFIG_DWARF_UNWINDER | #ifdef CONFIG_DWARF_UNWINDER | ||||||
|  | struct mod_arch_specific { | ||||||
| 	struct list_head fde_list; | 	struct list_head fde_list; | ||||||
| 	struct list_head cie_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 | #endif | ||||||
| 
 | 
 | ||||||
| #ifdef CONFIG_CPU_LITTLE_ENDIAN | #ifdef CONFIG_CPU_LITTLE_ENDIAN | ||||||
|  |  | ||||||
|  | @ -37,6 +37,7 @@ config SPARC | ||||||
| 	select GENERIC_CLOCKEVENTS | 	select GENERIC_CLOCKEVENTS | ||||||
| 	select GENERIC_STRNCPY_FROM_USER | 	select GENERIC_STRNCPY_FROM_USER | ||||||
| 	select GENERIC_STRNLEN_USER | 	select GENERIC_STRNLEN_USER | ||||||
|  | 	select MODULES_USE_ELF_RELA | ||||||
| 
 | 
 | ||||||
| config SPARC32 | config SPARC32 | ||||||
| 	def_bool !64BIT | 	def_bool !64BIT | ||||||
|  |  | ||||||
|  | @ -21,4 +21,5 @@ generic-y += div64.h | ||||||
| generic-y += local64.h | generic-y += local64.h | ||||||
| generic-y += irq_regs.h | generic-y += irq_regs.h | ||||||
| generic-y += local.h | generic-y += local.h | ||||||
|  | generic-y += module.h | ||||||
| generic-y += word-at-a-time.h | generic-y += word-at-a-time.h | ||||||
|  |  | ||||||
|  | @ -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 */ |  | ||||||
|  | @ -17,6 +17,7 @@ config TILE | ||||||
| 	select SYS_HYPERVISOR | 	select SYS_HYPERVISOR | ||||||
| 	select ARCH_HAVE_NMI_SAFE_CMPXCHG | 	select ARCH_HAVE_NMI_SAFE_CMPXCHG | ||||||
| 	select GENERIC_CLOCKEVENTS | 	select GENERIC_CLOCKEVENTS | ||||||
|  | 	select MODULES_USE_ELF_RELA | ||||||
| 
 | 
 | ||||||
| # FIXME: investigate whether we need/want these options. | # FIXME: investigate whether we need/want these options. | ||||||
| #	select HAVE_IOREMAP_PROT | #	select HAVE_IOREMAP_PROT | ||||||
|  |  | ||||||
|  | @ -14,6 +14,7 @@ config UNICORE32 | ||||||
| 	select GENERIC_IRQ_SHOW | 	select GENERIC_IRQ_SHOW | ||||||
| 	select ARCH_WANT_FRAME_POINTERS | 	select ARCH_WANT_FRAME_POINTERS | ||||||
| 	select GENERIC_IOMAP | 	select GENERIC_IOMAP | ||||||
|  | 	select MODULES_USE_ELF_REL | ||||||
| 	help | 	help | ||||||
| 	  UniCore-32 is 32-bit Instruction Set Architecture, | 	  UniCore-32 is 32-bit Instruction Set Architecture, | ||||||
| 	  including a series of low-power-consumption RISC chip | 	  including a series of low-power-consumption RISC chip | ||||||
|  |  | ||||||
|  | @ -97,6 +97,8 @@ config X86 | ||||||
| 	select KTIME_SCALAR if X86_32 | 	select KTIME_SCALAR if X86_32 | ||||||
| 	select GENERIC_STRNCPY_FROM_USER | 	select GENERIC_STRNCPY_FROM_USER | ||||||
| 	select GENERIC_STRNLEN_USER | 	select GENERIC_STRNLEN_USER | ||||||
|  | 	select MODULES_USE_ELF_REL if X86_32 | ||||||
|  | 	select MODULES_USE_ELF_RELA if X86_64 | ||||||
| 
 | 
 | ||||||
| config INSTRUCTION_DECODER | config INSTRUCTION_DECODER | ||||||
| 	def_bool (KPROBES || PERF_EVENTS || UPROBES) | 	def_bool (KPROBES || PERF_EVENTS || UPROBES) | ||||||
|  |  | ||||||
|  | @ -21,9 +21,11 @@ config 64BIT | ||||||
| config X86_32 | config X86_32 | ||||||
| 	def_bool !64BIT | 	def_bool !64BIT | ||||||
| 	select HAVE_AOUT | 	select HAVE_AOUT | ||||||
|  | 	select MODULES_USE_ELF_REL | ||||||
| 
 | 
 | ||||||
| config X86_64 | config X86_64 | ||||||
| 	def_bool 64BIT | 	def_bool 64BIT | ||||||
|  | 	select MODULES_USE_ELF_RELA | ||||||
| 
 | 
 | ||||||
| config RWSEM_XCHGADD_ALGORITHM | config RWSEM_XCHGADD_ALGORITHM | ||||||
| 	def_bool X86_XADD && 64BIT | 	def_bool X86_XADD && 64BIT | ||||||
|  |  | ||||||
|  | @ -11,6 +11,7 @@ config XTENSA | ||||||
| 	select HAVE_GENERIC_HARDIRQS | 	select HAVE_GENERIC_HARDIRQS | ||||||
| 	select GENERIC_IRQ_SHOW | 	select GENERIC_IRQ_SHOW | ||||||
| 	select GENERIC_CPU_DEVICES | 	select GENERIC_CPU_DEVICES | ||||||
|  | 	select MODULES_USE_ELF_RELA | ||||||
| 	help | 	help | ||||||
| 	  Xtensa processors are 32-bit RISC machines designed by Tensilica | 	  Xtensa processors are 32-bit RISC machines designed by Tensilica | ||||||
| 	  primarily for embedded systems.  These processors are both | 	  primarily for embedded systems.  These processors are both | ||||||
|  |  | ||||||
|  | @ -13,15 +13,8 @@ | ||||||
| #ifndef _XTENSA_MODULE_H | #ifndef _XTENSA_MODULE_H | ||||||
| #define _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 MODULE_ARCH_VERMAGIC "xtensa-" __stringify(XCHAL_CORE_ID) " " | ||||||
| 
 | 
 | ||||||
| #define Elf_Shdr Elf32_Shdr | #include <asm-generic/module.h> | ||||||
| #define Elf_Sym Elf32_Sym |  | ||||||
| #define Elf_Ehdr Elf32_Ehdr |  | ||||||
| 
 | 
 | ||||||
| #endif	/* _XTENSA_MODULE_H */ | #endif	/* _XTENSA_MODULE_H */ | ||||||
|  |  | ||||||
|  | @ -5,18 +5,44 @@ | ||||||
|  * Many architectures just need a simple module |  * Many architectures just need a simple module | ||||||
|  * loader without arch specific data. |  * loader without arch specific data. | ||||||
|  */ |  */ | ||||||
|  | #ifndef CONFIG_HAVE_MOD_ARCH_SPECIFIC | ||||||
| struct mod_arch_specific | struct mod_arch_specific | ||||||
| { | { | ||||||
| }; | }; | ||||||
|  | #endif | ||||||
| 
 | 
 | ||||||
| #ifdef CONFIG_64BIT | #ifdef CONFIG_64BIT | ||||||
| #define Elf_Shdr Elf64_Shdr | #define Elf_Shdr	Elf64_Shdr | ||||||
| #define Elf_Sym Elf64_Sym | #define Elf_Phdr	Elf64_Phdr | ||||||
| #define Elf_Ehdr Elf64_Ehdr | #define Elf_Sym		Elf64_Sym | ||||||
| #else | #define Elf_Dyn		Elf64_Dyn | ||||||
| #define Elf_Shdr Elf32_Shdr | #define Elf_Ehdr	Elf64_Ehdr | ||||||
| #define Elf_Sym Elf32_Sym | #define Elf_Addr	Elf64_Addr | ||||||
| #define Elf_Ehdr Elf32_Ehdr | #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 | ||||||
| 
 | 
 | ||||||
| #endif /* __ASM_GENERIC_MODULE_H */ | #endif /* __ASM_GENERIC_MODULE_H */ | ||||||
|  |  | ||||||
|  | @ -28,21 +28,49 @@ void *module_alloc(unsigned long size); | ||||||
| /* Free memory returned from module_alloc. */ | /* Free memory returned from module_alloc. */ | ||||||
| void module_free(struct module *mod, void *module_region); | 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, | int apply_relocate(Elf_Shdr *sechdrs, | ||||||
| 		   const char *strtab, | 		   const char *strtab, | ||||||
| 		   unsigned int symindex, | 		   unsigned int symindex, | ||||||
| 		   unsigned int relsec, | 		   unsigned int relsec, | ||||||
| 		   struct module *mod); | 		   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, | int apply_relocate_add(Elf_Shdr *sechdrs, | ||||||
| 		       const char *strtab, | 		       const char *strtab, | ||||||
| 		       unsigned int symindex, | 		       unsigned int symindex, | ||||||
| 		       unsigned int relsec, | 		       unsigned int relsec, | ||||||
| 		       struct module *mod); | 		       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. */ | /* Any final processing of module before access.  Return -error or 0. */ | ||||||
| int module_finalize(const Elf_Ehdr *hdr, | int module_finalize(const Elf_Ehdr *hdr, | ||||||
|  |  | ||||||
|  | @ -1949,26 +1949,6 @@ static int simplify_symbols(struct module *mod, const struct load_info *info) | ||||||
| 	return ret; | 	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) | static int apply_relocations(struct module *mod, const struct load_info *info) | ||||||
| { | { | ||||||
| 	unsigned int i; | 	unsigned int i; | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 David Howells
				David Howells