Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 786d35d4 authored by David Howells's avatar David Howells Committed by Rusty Russell
Browse files

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: default avatarDavid Howells <dhowells@redhat.com>
Acked-by: default avatarSam Ravnborg <sam@ravnborg.org>
Signed-off-by: default avatarRusty Russell <rusty@rustcorp.com.au>
parent 6ede8123
Loading
Loading
Loading
Loading
+19 −0
Original line number Diff line number Diff line
@@ -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"
+2 −0
Original line number Diff line number Diff line
@@ -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,
+2 −8
Original line number Diff line number Diff line
#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
+2 −0
Original line number Diff line number Diff line
@@ -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
+2 −6
Original line number Diff line number Diff line
#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
Loading