aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc
diff options
context:
space:
mode:
authorDavid Howells <dhowells@redhat.com>2012-09-28 01:01:03 -0400
committerRusty Russell <rusty@rustcorp.com.au>2012-09-28 01:01:03 -0400
commit786d35d45cc40b2a51a18f73e14e135d47fdced7 (patch)
treedf18f4dc3f8a333267e74089760043769b3b6184 /arch/powerpc
parent6ede81239e31cfacbb1e2d260530cd80d13cf0db (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>
Diffstat (limited to 'arch/powerpc')
-rw-r--r--arch/powerpc/Kconfig2
-rw-r--r--arch/powerpc/include/asm/module.h7
2 files changed, 3 insertions, 6 deletions
diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
index 352f416269ce..74f84781b484 100644
--- a/arch/powerpc/Kconfig
+++ b/arch/powerpc/Kconfig
@@ -139,6 +139,8 @@ config PPC
139 select GENERIC_CLOCKEVENTS 139 select GENERIC_CLOCKEVENTS
140 select GENERIC_STRNCPY_FROM_USER 140 select GENERIC_STRNCPY_FROM_USER
141 select GENERIC_STRNLEN_USER 141 select GENERIC_STRNLEN_USER
142 select HAVE_MOD_ARCH_SPECIFIC
143 select MODULES_USE_ELF_RELA
142 144
143config EARLY_PRINTK 145config EARLY_PRINTK
144 bool 146 bool
diff --git a/arch/powerpc/include/asm/module.h b/arch/powerpc/include/asm/module.h
index 0192a4ee2bc2..c1df590ec444 100644
--- a/arch/powerpc/include/asm/module.h
+++ b/arch/powerpc/include/asm/module.h
@@ -11,6 +11,7 @@
11 11
12#include <linux/list.h> 12#include <linux/list.h>
13#include <asm/bug.h> 13#include <asm/bug.h>
14#include <asm-generic/module.h>
14 15
15 16
16#ifndef __powerpc64__ 17#ifndef __powerpc64__
@@ -60,16 +61,10 @@ struct mod_arch_specific {
60 */ 61 */
61 62
62#ifdef __powerpc64__ 63#ifdef __powerpc64__
63# define Elf_Shdr Elf64_Shdr
64# define Elf_Sym Elf64_Sym
65# define Elf_Ehdr Elf64_Ehdr
66# ifdef MODULE 64# ifdef MODULE
67 asm(".section .stubs,\"ax\",@nobits; .align 3; .previous"); 65 asm(".section .stubs,\"ax\",@nobits; .align 3; .previous");
68# endif 66# endif
69#else 67#else
70# define Elf_Shdr Elf32_Shdr
71# define Elf_Sym Elf32_Sym
72# define Elf_Ehdr Elf32_Ehdr
73# ifdef MODULE 68# ifdef MODULE
74 asm(".section .plt,\"ax\",@nobits; .align 3; .previous"); 69 asm(".section .plt,\"ax\",@nobits; .align 3; .previous");
75 asm(".section .init.plt,\"ax\",@nobits; .align 3; .previous"); 70 asm(".section .init.plt,\"ax\",@nobits; .align 3; .previous");