[RFC PATCH 4/4] powerpc/64: Remove support for kernel's built with ELFv1 ABI
Christophe Leroy
christophe.leroy at csgroup.eu
Fri May 5 18:49:50 AEST 2023
Le 05/05/2023 à 09:18, Nicholas Piggin a écrit :
> User code must still support ELFv1, e.g., see is_elf2_task().
>
> This one should wait a while until ELFv2 fallout settles, so
> just posting it out of interest.
Can't ELFv1 user code run on an ELFv2 kernel ?
Christophe
>
> Thanks,
> Nick
> ---
> arch/powerpc/Kconfig | 19 ------
> arch/powerpc/Makefile | 15 +----
> arch/powerpc/boot/Makefile | 4 +-
> arch/powerpc/include/asm/code-patching.h | 36 ++--------
> arch/powerpc/include/asm/kfence.h | 4 --
> arch/powerpc/include/asm/linkage.h | 9 ---
> arch/powerpc/include/asm/module.h | 3 -
> arch/powerpc/include/asm/ppc_asm.h | 38 +----------
> arch/powerpc/include/asm/ptrace.h | 17 +----
> arch/powerpc/include/asm/sections.h | 4 --
> arch/powerpc/kernel/exceptions-64s.S | 2 +-
> arch/powerpc/kernel/fadump.c | 6 +-
> arch/powerpc/kernel/head_64.S | 5 +-
> arch/powerpc/kernel/interrupt_64.S | 4 --
> arch/powerpc/kernel/kprobes.c | 39 +----------
> arch/powerpc/kernel/misc_64.S | 4 --
> arch/powerpc/kernel/module.c | 8 ---
> arch/powerpc/kernel/module_64.c | 84 ++++--------------------
> arch/powerpc/kernel/trace/ftrace.c | 10 ---
> arch/powerpc/kernel/vdso/Makefile | 2 +-
> arch/powerpc/kernel/vdso/gettimeofday.S | 2 +-
> arch/powerpc/kernel/vmlinux.lds.S | 8 ---
> arch/powerpc/kvm/book3s_hv_rmhandlers.S | 36 +++++-----
> arch/powerpc/kvm/book3s_interrupts.S | 14 ++--
> arch/powerpc/kvm/book3s_rmhandlers.S | 12 +---
> arch/powerpc/net/bpf_jit.h | 6 --
> arch/powerpc/net/bpf_jit_comp.c | 14 ++--
> arch/powerpc/net/bpf_jit_comp64.c | 13 ++--
> arch/powerpc/platforms/Kconfig.cputype | 6 --
> drivers/crypto/vmx/Makefile | 4 --
> kernel/extable.c | 2 +-
> kernel/trace/ftrace.c | 12 ----
> 32 files changed, 68 insertions(+), 374 deletions(-)
>
> diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
> index a64bfd9b8a1d..6cbcaf1d01a6 100644
> --- a/arch/powerpc/Kconfig
> +++ b/arch/powerpc/Kconfig
> @@ -1,9 +1,6 @@
> # SPDX-License-Identifier: GPL-2.0
> source "arch/powerpc/platforms/Kconfig.cputype"
>
> -config CC_HAS_ELFV2
> - def_bool PPC64 && $(cc-option, -mabi=elfv2)
> -
> config CC_HAS_PREFIXED
> def_bool PPC64 && $(cc-option, -mcpu=power10 -mprefixed)
>
> @@ -232,7 +229,6 @@ config PPC
> select HAVE_EFFICIENT_UNALIGNED_ACCESS
> select HAVE_FAST_GUP
> select HAVE_FTRACE_MCOUNT_RECORD
> - select HAVE_FUNCTION_DESCRIPTORS if PPC64_ELF_ABI_V1
> select HAVE_FUNCTION_ERROR_INJECTION
> select HAVE_FUNCTION_GRAPH_TRACER
> select HAVE_FUNCTION_TRACER
> @@ -623,21 +619,6 @@ config KEXEC_FILE
> config ARCH_HAS_KEXEC_PURGATORY
> def_bool KEXEC_FILE
>
> -config PPC64_BIG_ENDIAN_ELF_ABI_V2
> - prompt "Build big-endian kernel using ELF ABI V2" if LD_IS_BFD && EXPERT
> - def_bool y
> - depends on PPC64 && CPU_BIG_ENDIAN
> - depends on CC_HAS_ELFV2
> - help
> - This builds the kernel image using the "Power Architecture 64-Bit ELF
> - V2 ABI Specification", which has a reduced stack overhead and faster
> - function calls. This internal kernel ABI option does not affect
> - userspace compatibility.
> -
> - The V2 ABI is standard for 64-bit little-endian, but for big-endian
> - it is less well tested by kernel and toolchain. However some distros
> - build userspace this way, and it can produce a functioning kernel.
> -
> config RELOCATABLE
> bool "Build a relocatable kernel"
> depends on PPC64 || (FLATMEM && (44x || PPC_85xx))
> diff --git a/arch/powerpc/Makefile b/arch/powerpc/Makefile
> index dca73f673d70..8ddc779e675f 100644
> --- a/arch/powerpc/Makefile
> +++ b/arch/powerpc/Makefile
> @@ -72,10 +72,8 @@ endif
>
> ifdef CONFIG_PPC64
> ifndef CONFIG_CC_IS_CLANG
> -cflags-$(CONFIG_PPC64_ELF_ABI_V1) += $(call cc-option,-mabi=elfv1)
> -cflags-$(CONFIG_PPC64_ELF_ABI_V1) += $(call cc-option,-mcall-aixdesc)
> -aflags-$(CONFIG_PPC64_ELF_ABI_V1) += $(call cc-option,-mabi=elfv1)
> -aflags-$(CONFIG_PPC64_ELF_ABI_V2) += -mabi=elfv2
> +#Is this even needed?
> +aflags-y += -mabi=elfv2
> endif
> endif
>
> @@ -125,14 +123,7 @@ endif
> endif
>
> CFLAGS-$(CONFIG_PPC64) := $(call cc-option,-mtraceback=no)
> -ifdef CONFIG_PPC64_ELF_ABI_V2
> -CFLAGS-$(CONFIG_PPC64) += $(call cc-option,-mabi=elfv2,$(call cc-option,-mcall-aixdesc))
> -else
> -ifndef CONFIG_CC_IS_CLANG
> -CFLAGS-$(CONFIG_PPC64) += $(call cc-option,-mabi=elfv1)
> -CFLAGS-$(CONFIG_PPC64) += $(call cc-option,-mcall-aixdesc)
> -endif
> -endif
> +CFLAGS-$(CONFIG_PPC64) += -mabi=elfv2
> CFLAGS-$(CONFIG_PPC64) += $(call cc-option,-mcmodel=medium,$(call cc-option,-mminimal-toc))
> CFLAGS-$(CONFIG_PPC64) += $(call cc-option,-mno-pointers-to-nested-functions)
> CFLAGS-$(CONFIG_PPC64) += $(call cc-option,-mlong-double-128)
> diff --git a/arch/powerpc/boot/Makefile b/arch/powerpc/boot/Makefile
> index 85cde5bf04b7..e6979f4ea571 100644
> --- a/arch/powerpc/boot/Makefile
> +++ b/arch/powerpc/boot/Makefile
> @@ -42,9 +42,7 @@ BOOTCFLAGS := -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs \
>
> ifdef CONFIG_PPC64_BOOT_WRAPPER
> BOOTCFLAGS += -m64
> -ifdef CONFIG_PPC64_ELF_ABI_V2
> -BOOTCFLAGS += $(call cc-option,-mabi=elfv2)
> -endif
> +BOOTCFLAGS += -mabi=elfv2
> else
> BOOTCFLAGS += -m32
> endif
> diff --git a/arch/powerpc/include/asm/code-patching.h b/arch/powerpc/include/asm/code-patching.h
> index 3f881548fb61..90508151e5f4 100644
> --- a/arch/powerpc/include/asm/code-patching.h
> +++ b/arch/powerpc/include/asm/code-patching.h
> @@ -130,7 +130,7 @@ bool is_conditional_branch(ppc_inst_t instr);
>
> static inline unsigned long ppc_function_entry(void *func)
> {
> -#ifdef CONFIG_PPC64_ELF_ABI_V2
> +#ifdef CONFIG_PPC64
> u32 *insn = func;
>
> /*
> @@ -155,13 +155,6 @@ static inline unsigned long ppc_function_entry(void *func)
> return (unsigned long)(insn + 2);
> else
> return (unsigned long)func;
> -#elif defined(CONFIG_PPC64_ELF_ABI_V1)
> - /*
> - * On PPC64 ABIv1 the function pointer actually points to the
> - * function's descriptor. The first entry in the descriptor is the
> - * address of the function text.
> - */
> - return ((struct func_desc *)func)->addr;
> #else
> return (unsigned long)func;
> #endif
> @@ -169,7 +162,7 @@ static inline unsigned long ppc_function_entry(void *func)
>
> static inline unsigned long ppc_global_function_entry(void *func)
> {
> -#ifdef CONFIG_PPC64_ELF_ABI_V2
> +#ifdef CONFIG_PPC64
> /* PPC64 ABIv2 the global entry point is at the address */
> return (unsigned long)func;
> #else
> @@ -186,28 +179,7 @@ static inline unsigned long ppc_global_function_entry(void *func)
> static inline unsigned long ppc_kallsyms_lookup_name(const char *name)
> {
> unsigned long addr;
> -#ifdef CONFIG_PPC64_ELF_ABI_V1
> - /* check for dot variant */
> - char dot_name[1 + KSYM_NAME_LEN];
> - bool dot_appended = false;
> -
> - if (strnlen(name, KSYM_NAME_LEN) >= KSYM_NAME_LEN)
> - return 0;
> -
> - if (name[0] != '.') {
> - dot_name[0] = '.';
> - dot_name[1] = '\0';
> - strlcat(dot_name, name, sizeof(dot_name));
> - dot_appended = true;
> - } else {
> - dot_name[0] = '\0';
> - strlcat(dot_name, name, sizeof(dot_name));
> - }
> - addr = kallsyms_lookup_name(dot_name);
> - if (!addr && dot_appended)
> - /* Let's try the original non-dot symbol lookup */
> - addr = kallsyms_lookup_name(name);
> -#elif defined(CONFIG_PPC64_ELF_ABI_V2)
> +#ifdef CONFIG_PPC64
> addr = kallsyms_lookup_name(name);
> if (addr)
> addr = ppc_function_entry((void *)addr);
> @@ -223,7 +195,7 @@ static inline unsigned long ppc_kallsyms_lookup_name(const char *name)
> */
>
> /* This must match the definition of STK_GOT in <asm/ppc_asm.h> */
> -#ifdef CONFIG_PPC64_ELF_ABI_V2
> +#ifdef CONFIG_PPC64
> #define R2_STACK_OFFSET 24
> #else
> #define R2_STACK_OFFSET 40
> diff --git a/arch/powerpc/include/asm/kfence.h b/arch/powerpc/include/asm/kfence.h
> index 6fd2b4d486c5..5e79b69b2764 100644
> --- a/arch/powerpc/include/asm/kfence.h
> +++ b/arch/powerpc/include/asm/kfence.h
> @@ -11,10 +11,6 @@
> #include <linux/mm.h>
> #include <asm/pgtable.h>
>
> -#ifdef CONFIG_PPC64_ELF_ABI_V1
> -#define ARCH_FUNC_PREFIX "."
> -#endif
> -
> static inline bool arch_kfence_init_pool(void)
> {
> return true;
> diff --git a/arch/powerpc/include/asm/linkage.h b/arch/powerpc/include/asm/linkage.h
> index b88d1d2cf304..46a2ce031844 100644
> --- a/arch/powerpc/include/asm/linkage.h
> +++ b/arch/powerpc/include/asm/linkage.h
> @@ -7,13 +7,4 @@
> #define __ALIGN .align 2
> #define __ALIGN_STR ".align 2"
>
> -#ifdef CONFIG_PPC64_ELF_ABI_V1
> -#define cond_syscall(x) \
> - asm ("\t.weak " #x "\n\t.set " #x ", sys_ni_syscall\n" \
> - "\t.weak ." #x "\n\t.set ." #x ", .sys_ni_syscall\n")
> -#define SYSCALL_ALIAS(alias, name) \
> - asm ("\t.globl " #alias "\n\t.set " #alias ", " #name "\n" \
> - "\t.globl ." #alias "\n\t.set ." #alias ", ." #name)
> -#endif
> -
> #endif /* _ASM_POWERPC_LINKAGE_H */
> diff --git a/arch/powerpc/include/asm/module.h b/arch/powerpc/include/asm/module.h
> index ac53606c2594..ceb21a65e94b 100644
> --- a/arch/powerpc/include/asm/module.h
> +++ b/arch/powerpc/include/asm/module.h
> @@ -35,9 +35,6 @@ struct mod_arch_specific {
> bool toc_fixed; /* Have we fixed up .TOC.? */
> #endif
>
> - /* For module function descriptor dereference */
> - unsigned long start_opd;
> - unsigned long end_opd;
> #else /* powerpc64 */
> /* Indices of PLT sections within module. */
> unsigned int core_plt_section;
> diff --git a/arch/powerpc/include/asm/ppc_asm.h b/arch/powerpc/include/asm/ppc_asm.h
> index 5f05a984b103..7e845597b5c9 100644
> --- a/arch/powerpc/include/asm/ppc_asm.h
> +++ b/arch/powerpc/include/asm/ppc_asm.h
> @@ -199,7 +199,7 @@
> #define __STK_REG(i) (112 + ((i)-14)*8)
> #define STK_REG(i) __STK_REG(__REG_##i)
>
> -#ifdef CONFIG_PPC64_ELF_ABI_V2
> +#ifdef CONFIG_PPC64
> #define STK_GOT 24
> #define __STK_PARAM(i) (32 + ((i)-3)*8)
> #else
> @@ -208,8 +208,6 @@
> #endif
> #define STK_PARAM(i) __STK_PARAM(__REG_##i)
>
> -#ifdef CONFIG_PPC64_ELF_ABI_V2
> -
> #define _GLOBAL(name) \
> .align 2 ; \
> .type name, at function; \
> @@ -229,32 +227,6 @@ name: \
> .localentry name,.-name
> #endif
>
> -#define DOTSYM(a) a
> -
> -#else
> -
> -#define XGLUE(a,b) a##b
> -#define GLUE(a,b) XGLUE(a,b)
> -
> -#define _GLOBAL(name) \
> - .align 2 ; \
> - .globl name; \
> - .globl GLUE(.,name); \
> - .pushsection ".opd","aw"; \
> -name: \
> - .quad GLUE(.,name); \
> - .quad .TOC. at tocbase; \
> - .quad 0; \
> - .popsection; \
> - .type GLUE(.,name), at function; \
> -GLUE(.,name):
> -
> -#define _GLOBAL_TOC(name) _GLOBAL(name)
> -
> -#define DOTSYM(a) GLUE(.,a)
> -
> -#endif
> -
> #else /* 32-bit */
>
> #define _GLOBAL(n) \
> @@ -263,8 +235,6 @@ GLUE(.,name):
>
> #define _GLOBAL_TOC(name) _GLOBAL(name)
>
> -#define DOTSYM(a) a
> -
> #endif
>
> /*
> @@ -861,11 +831,9 @@ END_FTR_SECTION_NESTED(CPU_FTR_CELL_TB_BUG, CPU_FTR_CELL_TB_BUG, 96)
> #define BTB_FLUSH(reg)
> #endif /* CONFIG_PPC_E500 */
>
> -#if defined(CONFIG_PPC64_ELF_ABI_V1)
> -#define STACK_FRAME_PARAMS 48
> -#elif defined(CONFIG_PPC64_ELF_ABI_V2)
> +#ifdef CONFIG_PPC64
> #define STACK_FRAME_PARAMS 32
> -#elif defined(CONFIG_PPC32)
> +#else
> #define STACK_FRAME_PARAMS 8
> #endif
>
> diff --git a/arch/powerpc/include/asm/ptrace.h b/arch/powerpc/include/asm/ptrace.h
> index 0eb90a013346..56517d9b4b99 100644
> --- a/arch/powerpc/include/asm/ptrace.h
> +++ b/arch/powerpc/include/asm/ptrace.h
> @@ -120,26 +120,15 @@ struct pt_regs
>
> #define STACK_FRAME_LR_SAVE 2 /* Location of LR in stack frame */
>
> -#ifdef CONFIG_PPC64_ELF_ABI_V2
> +/*
> + * The kernel always uses the ELFv2 ABI even on big-endian builds
> + */
> #define STACK_FRAME_MIN_SIZE 32
> #define STACK_USER_INT_FRAME_SIZE (sizeof(struct pt_regs) + STACK_FRAME_MIN_SIZE + 16)
> #define STACK_INT_FRAME_REGS (STACK_FRAME_MIN_SIZE + 16)
> #define STACK_INT_FRAME_MARKER STACK_FRAME_MIN_SIZE
> #define STACK_SWITCH_FRAME_SIZE (sizeof(struct pt_regs) + STACK_FRAME_MIN_SIZE + 16)
> #define STACK_SWITCH_FRAME_REGS (STACK_FRAME_MIN_SIZE + 16)
> -#else
> -/*
> - * The ELFv1 ABI specifies 48 bytes plus a minimum 64 byte parameter save
> - * area. This parameter area is not used by calls to C from interrupt entry,
> - * so the second from last one of those is used for the frame marker.
> - */
> -#define STACK_FRAME_MIN_SIZE 112
> -#define STACK_USER_INT_FRAME_SIZE (sizeof(struct pt_regs) + STACK_FRAME_MIN_SIZE)
> -#define STACK_INT_FRAME_REGS STACK_FRAME_MIN_SIZE
> -#define STACK_INT_FRAME_MARKER (STACK_FRAME_MIN_SIZE - 16)
> -#define STACK_SWITCH_FRAME_SIZE (sizeof(struct pt_regs) + STACK_FRAME_MIN_SIZE)
> -#define STACK_SWITCH_FRAME_REGS STACK_FRAME_MIN_SIZE
> -#endif
>
> /* Size of dummy stack frame allocated when calling signal handler. */
> #define __SIGNAL_FRAMESIZE 128
> diff --git a/arch/powerpc/include/asm/sections.h b/arch/powerpc/include/asm/sections.h
> index 4e1f548c8d37..89fd5bba93f5 100644
> --- a/arch/powerpc/include/asm/sections.h
> +++ b/arch/powerpc/include/asm/sections.h
> @@ -6,10 +6,6 @@
> #include <linux/elf.h>
> #include <linux/uaccess.h>
>
> -#ifdef CONFIG_HAVE_FUNCTION_DESCRIPTORS
> -typedef struct func_desc func_desc_t;
> -#endif
> -
> #include <asm-generic/sections.h>
>
> extern char __head_end[];
> diff --git a/arch/powerpc/kernel/exceptions-64s.S b/arch/powerpc/kernel/exceptions-64s.S
> index c33c8ebf8641..281cf280afd5 100644
> --- a/arch/powerpc/kernel/exceptions-64s.S
> +++ b/arch/powerpc/kernel/exceptions-64s.S
> @@ -1043,7 +1043,7 @@ TRAMP_REAL_BEGIN(system_reset_idle_wake)
> /* We are waking up from idle, so may clobber any volatile register */
> cmpwi cr1,r5,2
> bltlr cr1 /* no state loss, return to idle caller with r3=SRR1 */
> - __LOAD_FAR_HANDLER(r12, DOTSYM(idle_return_gpr_loss), real_trampolines)
> + __LOAD_FAR_HANDLER(r12, idle_return_gpr_loss, real_trampolines)
> mtctr r12
> bctr
> #endif
> diff --git a/arch/powerpc/kernel/fadump.c b/arch/powerpc/kernel/fadump.c
> index ea0a073abd96..2c770c56d500 100644
> --- a/arch/powerpc/kernel/fadump.c
> +++ b/arch/powerpc/kernel/fadump.c
> @@ -979,10 +979,8 @@ static int fadump_init_elfcore_header(char *bufp)
> elf->e_phoff = sizeof(struct elfhdr);
> elf->e_shoff = 0;
>
> - if (IS_ENABLED(CONFIG_PPC64_ELF_ABI_V2))
> - elf->e_flags = 2;
> - else if (IS_ENABLED(CONFIG_PPC64_ELF_ABI_V1))
> - elf->e_flags = 1;
> + if (IS_ENABLED(CONFIG_PPC64))
> + elf->e_flags = 2; /* PPC64 always uses ELFv2 */
> else
> elf->e_flags = 0;
>
> diff --git a/arch/powerpc/kernel/head_64.S b/arch/powerpc/kernel/head_64.S
> index f132d8704263..da7883afdaf5 100644
> --- a/arch/powerpc/kernel/head_64.S
> +++ b/arch/powerpc/kernel/head_64.S
> @@ -446,9 +446,6 @@ generic_secondary_common_init:
> ld r12,CPU_SPEC_RESTORE(r23)
> cmpdi 0,r12,0
> beq 3f
> -#ifdef CONFIG_PPC64_ELF_ABI_V1
> - ld r12,0(r12)
> -#endif
> mtctr r12
> bctrl
>
> @@ -1009,7 +1006,7 @@ start_here_multiplatform:
> #endif
> /* Restore parameters passed from prom_init/kexec */
> mr r3,r31
> - LOAD_REG_ADDR(r12, DOTSYM(early_setup))
> + LOAD_REG_ADDR(r12, early_setup)
> mtctr r12
> bctrl /* also sets r13 and SPRG_PACA */
>
> diff --git a/arch/powerpc/kernel/interrupt_64.S b/arch/powerpc/kernel/interrupt_64.S
> index bd863702d812..19581e3f4b5f 100644
> --- a/arch/powerpc/kernel/interrupt_64.S
> +++ b/arch/powerpc/kernel/interrupt_64.S
> @@ -743,9 +743,7 @@ _GLOBAL(ret_from_kernel_user_thread)
> bl CFUNC(schedule_tail)
> mtctr r14
> mr r3,r15
> -#ifdef CONFIG_PPC64_ELF_ABI_V2
> mr r12,r14
> -#endif
> bctrl
> li r3,0
> /*
> @@ -759,9 +757,7 @@ _GLOBAL(start_kernel_thread)
> bl CFUNC(schedule_tail)
> mtctr r14
> mr r3,r15
> -#ifdef CONFIG_PPC64_ELF_ABI_V2
> mr r12,r14
> -#endif
> bctrl
> /*
> * This must not return. We actually want to BUG here, not WARN,
> diff --git a/arch/powerpc/kernel/kprobes.c b/arch/powerpc/kernel/kprobes.c
> index b20ee72e873a..805a45132060 100644
> --- a/arch/powerpc/kernel/kprobes.c
> +++ b/arch/powerpc/kernel/kprobes.c
> @@ -45,7 +45,7 @@ kprobe_opcode_t *kprobe_lookup_name(const char *name, unsigned int offset)
> {
> kprobe_opcode_t *addr = NULL;
>
> -#ifdef CONFIG_PPC64_ELF_ABI_V2
> +#ifdef CONFIG_PPC64
> /* PPC64 ABIv2 needs local entry point */
> addr = (kprobe_opcode_t *)kallsyms_lookup_name(name);
> if (addr && !offset) {
> @@ -63,41 +63,6 @@ kprobe_opcode_t *kprobe_lookup_name(const char *name, unsigned int offset)
> #endif
> addr = (kprobe_opcode_t *)ppc_function_entry(addr);
> }
> -#elif defined(CONFIG_PPC64_ELF_ABI_V1)
> - /*
> - * 64bit powerpc ABIv1 uses function descriptors:
> - * - Check for the dot variant of the symbol first.
> - * - If that fails, try looking up the symbol provided.
> - *
> - * This ensures we always get to the actual symbol and not
> - * the descriptor.
> - *
> - * Also handle <module:symbol> format.
> - */
> - char dot_name[MODULE_NAME_LEN + 1 + KSYM_NAME_LEN];
> - bool dot_appended = false;
> - const char *c;
> - ssize_t ret = 0;
> - int len = 0;
> -
> - if ((c = strnchr(name, MODULE_NAME_LEN, ':')) != NULL) {
> - c++;
> - len = c - name;
> - memcpy(dot_name, name, len);
> - } else
> - c = name;
> -
> - if (*c != '\0' && *c != '.') {
> - dot_name[len++] = '.';
> - dot_appended = true;
> - }
> - ret = strscpy(dot_name + len, c, KSYM_NAME_LEN);
> - if (ret > 0)
> - addr = (kprobe_opcode_t *)kallsyms_lookup_name(dot_name);
> -
> - /* Fallback to the original non-dot symbol lookup */
> - if (!addr && dot_appended)
> - addr = (kprobe_opcode_t *)kallsyms_lookup_name(name);
> #else
> addr = (kprobe_opcode_t *)kallsyms_lookup_name(name);
> #endif
> @@ -107,7 +72,7 @@ kprobe_opcode_t *kprobe_lookup_name(const char *name, unsigned int offset)
>
> static bool arch_kprobe_on_func_entry(unsigned long offset)
> {
> -#ifdef CONFIG_PPC64_ELF_ABI_V2
> +#ifdef CONFIG_PPC64
> #ifdef CONFIG_KPROBES_ON_FTRACE
> return offset <= 16;
> #else
> diff --git a/arch/powerpc/kernel/misc_64.S b/arch/powerpc/kernel/misc_64.S
> index 2c9ac70aaf0c..65fa51e46f3e 100644
> --- a/arch/powerpc/kernel/misc_64.S
> +++ b/arch/powerpc/kernel/misc_64.S
> @@ -456,11 +456,7 @@ _GLOBAL(kexec_sequence)
> beq 1f
>
> /* clear out hardware hash page table and tlb */
> -#ifdef CONFIG_PPC64_ELF_ABI_V1
> - ld r12,0(r27) /* deref function descriptor */
> -#else
> mr r12,r27
> -#endif
> mtctr r12
> bctrl /* mmu_hash_ops.hpte_clear_all(void); */
>
> diff --git a/arch/powerpc/kernel/module.c b/arch/powerpc/kernel/module.c
> index f6d6ae0a1692..d145175ed799 100644
> --- a/arch/powerpc/kernel/module.c
> +++ b/arch/powerpc/kernel/module.c
> @@ -64,14 +64,6 @@ int module_finalize(const Elf_Ehdr *hdr,
> (void *)sect->sh_addr + sect->sh_size);
> #endif /* CONFIG_PPC64 */
>
> -#ifdef CONFIG_PPC64_ELF_ABI_V1
> - sect = find_section(hdr, sechdrs, ".opd");
> - if (sect != NULL) {
> - me->arch.start_opd = sect->sh_addr;
> - me->arch.end_opd = sect->sh_addr + sect->sh_size;
> - }
> -#endif /* CONFIG_PPC64_ELF_ABI_V1 */
> -
> #ifdef CONFIG_PPC_BARRIER_NOSPEC
> sect = find_section(hdr, sechdrs, "__spec_barrier_fixup");
> if (sect != NULL)
> diff --git a/arch/powerpc/kernel/module_64.c b/arch/powerpc/kernel/module_64.c
> index 92570289ce08..c8e19364a256 100644
> --- a/arch/powerpc/kernel/module_64.c
> +++ b/arch/powerpc/kernel/module_64.c
> @@ -35,21 +35,7 @@ bool module_elf_check_arch(Elf_Ehdr *hdr)
> {
> unsigned long abi_level = hdr->e_flags & 0x3;
>
> - if (IS_ENABLED(CONFIG_PPC64_ELF_ABI_V2))
> - return abi_level == 2;
> - else
> - return abi_level < 2;
> -}
> -
> -#ifdef CONFIG_PPC64_ELF_ABI_V2
> -
> -static func_desc_t func_desc(unsigned long addr)
> -{
> - func_desc_t desc = {
> - .addr = addr,
> - };
> -
> - return desc;
> + return abi_level == 2; /* Require ELFv2 */
> }
>
> /* PowerPC64 specific values for the Elf64_Sym st_other field. */
> @@ -65,36 +51,6 @@ static unsigned int local_entry_offset(const Elf64_Sym *sym)
> * of function and try to derive r2 from it). */
> return PPC64_LOCAL_ENTRY_OFFSET(sym->st_other);
> }
> -#else
> -
> -static func_desc_t func_desc(unsigned long addr)
> -{
> - return *(struct func_desc *)addr;
> -}
> -static unsigned int local_entry_offset(const Elf64_Sym *sym)
> -{
> - return 0;
> -}
> -
> -void *dereference_module_function_descriptor(struct module *mod, void *ptr)
> -{
> - if (ptr < (void *)mod->arch.start_opd ||
> - ptr >= (void *)mod->arch.end_opd)
> - return ptr;
> -
> - return dereference_function_descriptor(ptr);
> -}
> -#endif
> -
> -static unsigned long func_addr(unsigned long addr)
> -{
> - return func_desc(addr).addr;
> -}
> -
> -static unsigned long stub_func_addr(func_desc_t func)
> -{
> - return func.addr;
> -}
>
> #define STUB_MAGIC 0x73747562 /* stub */
>
> @@ -111,7 +67,7 @@ struct ppc64_stub_entry {
> /* Used by ftrace to identify stubs */
> u32 magic;
> /* Data for the above code */
> - func_desc_t funcdata;
> + u64 target;
> } __aligned(8);
>
> struct ppc64_got_entry {
> @@ -122,8 +78,7 @@ struct ppc64_got_entry {
> * PPC64 uses 24 bit jumps, but we need to jump into other modules or
> * the kernel which may be further. So we jump to a stub.
> *
> - * Target address and TOC are loaded from function descriptor in the
> - * ppc64_stub_entry.
> + * Target address is loaded from target in the ppc64_stub_entry.
> *
> * r12 is used to generate the target address, which is required for the
> * ELFv2 global entry point calling convention.
> @@ -132,7 +87,6 @@ struct ppc64_got_entry {
> * - PCREL does not have a TOC.
> * - ELFv2 non-PCREL just has to save r2, the callee is responsible for
> * setting its own TOC pointer at the global entry address.
> - * - ELFv1 must load the new TOC pointer from the function descriptor.
> */
> static u32 ppc64_stub_insns[] = {
> #ifdef CONFIG_PPC_KERNEL_PCREL
> @@ -145,10 +99,6 @@ static u32 ppc64_stub_insns[] = {
> /* Save current r2 value in magic place on the stack. */
> PPC_RAW_STD(_R2, _R1, R2_STACK_OFFSET),
> PPC_RAW_LD(_R12, _R11, 32),
> -#ifdef CONFIG_PPC64_ELF_ABI_V1
> - /* Set up new r2 from function descriptor */
> - PPC_RAW_LD(_R2, _R11, 40),
> -#endif
> #endif
> PPC_RAW_MTCTR(_R12),
> PPC_RAW_BCTR(),
> @@ -535,8 +485,8 @@ static inline int create_ftrace_stub(struct ppc64_stub_entry *entry,
> entry->jump[2] |= PPC_LO(reladdr);
> }
>
> - /* Even though we don't use funcdata in the stub, it's needed elsewhere. */
> - entry->funcdata = func_desc(addr);
> + /* Even though we don't use target in the stub, it's needed elsewhere. */
> + entry->target = addr;
> entry->magic = STUB_MAGIC;
>
> return 1;
> @@ -594,7 +544,6 @@ static inline int create_stub(const Elf64_Shdr *sechdrs,
> const char *name)
> {
> long reladdr;
> - func_desc_t desc;
> int i;
>
> if (is_mprofile_ftrace_call(name))
> @@ -614,7 +563,7 @@ static inline int create_stub(const Elf64_Shdr *sechdrs,
>
> if (IS_ENABLED(CONFIG_PPC_KERNEL_PCREL)) {
> /* Stub uses address relative to itself! */
> - reladdr = 0 + offsetof(struct ppc64_stub_entry, funcdata);
> + reladdr = 0 + offsetof(struct ppc64_stub_entry, target);
> BUILD_BUG_ON(reladdr != 32);
> if (reladdr > 0x1FFFFFFFFL || reladdr < -0x200000000L) {
> pr_err("%s: Address of %p out of range of 34-bit relative address.\n",
> @@ -648,11 +597,10 @@ static inline int create_stub(const Elf64_Shdr *sechdrs,
> return 0;
> }
>
> - // func_desc_t is 8 bytes if ABIv2, else 16 bytes
> - desc = func_desc(addr);
> - for (i = 0; i < sizeof(func_desc_t) / sizeof(u32); i++) {
> - if (patch_instruction(((u32 *)&entry->funcdata) + i,
> - ppc_inst(((u32 *)(&desc))[i])))
> + // target is 8 bytes
> + for (i = 0; i < sizeof(u64) / sizeof(u32); i++) {
> + if (patch_instruction(((u32 *)&entry->target) + i,
> + ppc_inst(((u32 *)(&addr))[i])))
> return 0;
> }
>
> @@ -676,11 +624,11 @@ static unsigned long stub_for_addr(const Elf64_Shdr *sechdrs,
>
> /* Find this stub, or if that fails, the next avail. entry */
> stubs = (void *)sechdrs[me->arch.stubs_section].sh_addr;
> - for (i = 0; stub_func_addr(stubs[i].funcdata); i++) {
> + for (i = 0; stubs[i].target; i++) {
> if (WARN_ON(i >= num_stubs))
> return 0;
>
> - if (stub_func_addr(stubs[i].funcdata) == func_addr(addr))
> + if (stubs[i].target == addr)
> return (unsigned long)&stubs[i];
> }
>
> @@ -1054,7 +1002,6 @@ int module_trampoline_target(struct module *mod, unsigned long addr,
> unsigned long *target)
> {
> struct ppc64_stub_entry *stub;
> - func_desc_t funcdata;
> u32 magic;
>
> if (!within_module_core(addr, mod)) {
> @@ -1075,14 +1022,11 @@ int module_trampoline_target(struct module *mod, unsigned long addr,
> return -EFAULT;
> }
>
> - if (copy_from_kernel_nofault(&funcdata, &stub->funcdata,
> - sizeof(funcdata))) {
> - pr_err("%s: fault reading funcdata for stub %lx for %s\n", __func__, addr, mod->name);
> + if (copy_from_kernel_nofault(target, &stub->target, sizeof(*target))) {
> + pr_err("%s: fault reading target for stub %lx for %s\n", __func__, addr, mod->name);
> return -EFAULT;
> }
>
> - *target = stub_func_addr(funcdata);
> -
> return 0;
> }
>
> diff --git a/arch/powerpc/kernel/trace/ftrace.c b/arch/powerpc/kernel/trace/ftrace.c
> index a47f30373423..81a121b56c4d 100644
> --- a/arch/powerpc/kernel/trace/ftrace.c
> +++ b/arch/powerpc/kernel/trace/ftrace.c
> @@ -864,13 +864,3 @@ unsigned long prepare_ftrace_return(unsigned long parent, unsigned long ip,
> }
> #endif
> #endif /* CONFIG_FUNCTION_GRAPH_TRACER */
> -
> -#ifdef CONFIG_PPC64_ELF_ABI_V1
> -char *arch_ftrace_match_adjust(char *str, const char *search)
> -{
> - if (str[0] == '.' && search[0] != '.')
> - return str + 1;
> - else
> - return str;
> -}
> -#endif /* CONFIG_PPC64_ELF_ABI_V1 */
> diff --git a/arch/powerpc/kernel/vdso/Makefile b/arch/powerpc/kernel/vdso/Makefile
> index 4c3f34485f08..d558a2dd9b65 100644
> --- a/arch/powerpc/kernel/vdso/Makefile
> +++ b/arch/powerpc/kernel/vdso/Makefile
> @@ -15,7 +15,7 @@ ifneq ($(c-gettimeofday-y),)
> CFLAGS_vgettimeofday-32.o += -DDISABLE_BRANCH_PROFILING
> CFLAGS_vgettimeofday-32.o += -ffreestanding -fasynchronous-unwind-tables
> CFLAGS_REMOVE_vgettimeofday-32.o = $(CC_FLAGS_FTRACE)
> - CFLAGS_REMOVE_vgettimeofday-32.o += -mcmodel=medium -mabi=elfv1 -mabi=elfv2 -mcall-aixdesc
> + CFLAGS_REMOVE_vgettimeofday-32.o += -mcmodel=medium -mabi=elfv2
> # This flag is supported by clang for 64-bit but not 32-bit so it will cause
> # an unused command line flag warning for this file.
> ifdef CONFIG_CC_IS_CLANG
> diff --git a/arch/powerpc/kernel/vdso/gettimeofday.S b/arch/powerpc/kernel/vdso/gettimeofday.S
> index 48fc6658053a..88110ec0a5a6 100644
> --- a/arch/powerpc/kernel/vdso/gettimeofday.S
> +++ b/arch/powerpc/kernel/vdso/gettimeofday.S
> @@ -39,7 +39,7 @@
> addi r4, r5, VDSO_DATA_OFFSET
> .endif
> #ifdef __powerpc64__
> - bl CFUNC(DOTSYM(\funct))
> + bl CFUNC(\funct)
> #else
> bl \funct
> #endif
> diff --git a/arch/powerpc/kernel/vmlinux.lds.S b/arch/powerpc/kernel/vmlinux.lds.S
> index 13614f0b269c..c3da2dd34691 100644
> --- a/arch/powerpc/kernel/vmlinux.lds.S
> +++ b/arch/powerpc/kernel/vmlinux.lds.S
> @@ -186,14 +186,6 @@ SECTIONS
> SOFT_MASK_TABLE(8)
> RESTART_TABLE(8)
>
> -#ifdef CONFIG_PPC64_ELF_ABI_V1
> - .opd : AT(ADDR(.opd) - LOAD_OFFSET) {
> - __start_opd = .;
> - KEEP(*(.opd))
> - __end_opd = .;
> - }
> -#endif
> -
> . = ALIGN(8);
> __stf_entry_barrier_fixup : AT(ADDR(__stf_entry_barrier_fixup) - LOAD_OFFSET) {
> __start___stf_entry_barrier_fixup = .;
> diff --git a/arch/powerpc/kvm/book3s_hv_rmhandlers.S b/arch/powerpc/kvm/book3s_hv_rmhandlers.S
> index 870110e3d9b1..50b3cae5e67d 100644
> --- a/arch/powerpc/kvm/book3s_hv_rmhandlers.S
> +++ b/arch/powerpc/kvm/book3s_hv_rmhandlers.S
> @@ -1790,17 +1790,17 @@ hcall_real_fallback:
> .globl hcall_real_table
> hcall_real_table:
> .long 0 /* 0 - unused */
> - .long DOTSYM(kvmppc_h_remove) - hcall_real_table
> - .long DOTSYM(kvmppc_h_enter) - hcall_real_table
> - .long DOTSYM(kvmppc_h_read) - hcall_real_table
> - .long DOTSYM(kvmppc_h_clear_mod) - hcall_real_table
> - .long DOTSYM(kvmppc_h_clear_ref) - hcall_real_table
> - .long DOTSYM(kvmppc_h_protect) - hcall_real_table
> + .long kvmppc_h_remove - hcall_real_table
> + .long kvmppc_h_enter - hcall_real_table
> + .long kvmppc_h_read - hcall_real_table
> + .long kvmppc_h_clear_mod - hcall_real_table
> + .long kvmppc_h_clear_ref - hcall_real_table
> + .long kvmppc_h_protect - hcall_real_table
> .long 0 /* 0x1c */
> .long 0 /* 0x20 */
> .long 0 /* 0x24 - H_SET_SPRG0 */
> - .long DOTSYM(kvmppc_h_set_dabr) - hcall_real_table
> - .long DOTSYM(kvmppc_rm_h_page_init) - hcall_real_table
> + .long kvmppc_h_set_dabr - hcall_real_table
> + .long kvmppc_rm_h_page_init - hcall_real_table
> .long 0 /* 0x30 */
> .long 0 /* 0x34 */
> .long 0 /* 0x38 */
> @@ -1815,11 +1815,11 @@ hcall_real_table:
> .long 0 /* 0x5c */
> .long 0 /* 0x60 */
> #ifdef CONFIG_KVM_XICS
> - .long DOTSYM(xics_rm_h_eoi) - hcall_real_table
> - .long DOTSYM(xics_rm_h_cppr) - hcall_real_table
> - .long DOTSYM(xics_rm_h_ipi) - hcall_real_table
> + .long xics_rm_h_eoi - hcall_real_table
> + .long xics_rm_h_cppr - hcall_real_table
> + .long xics_rm_h_ipi - hcall_real_table
> .long 0 /* 0x70 - H_IPOLL */
> - .long DOTSYM(xics_rm_h_xirr) - hcall_real_table
> + .long xics_rm_h_xirr - hcall_real_table
> #else
> .long 0 /* 0x64 - H_EOI */
> .long 0 /* 0x68 - H_CPPR */
> @@ -1853,8 +1853,8 @@ hcall_real_table:
> .long 0 /* 0xd4 */
> .long 0 /* 0xd8 */
> .long 0 /* 0xdc */
> - .long DOTSYM(kvmppc_h_cede) - hcall_real_table
> - .long DOTSYM(kvmppc_rm_h_confer) - hcall_real_table
> + .long kvmppc_h_cede - hcall_real_table
> + .long kvmppc_rm_h_confer - hcall_real_table
> .long 0 /* 0xe8 */
> .long 0 /* 0xec */
> .long 0 /* 0xf0 */
> @@ -1870,11 +1870,11 @@ hcall_real_table:
> .long 0 /* 0x118 */
> .long 0 /* 0x11c */
> .long 0 /* 0x120 */
> - .long DOTSYM(kvmppc_h_bulk_remove) - hcall_real_table
> + .long kvmppc_h_bulk_remove - hcall_real_table
> .long 0 /* 0x128 */
> .long 0 /* 0x12c */
> .long 0 /* 0x130 */
> - .long DOTSYM(kvmppc_h_set_xdabr) - hcall_real_table
> + .long kvmppc_h_set_xdabr - hcall_real_table
> .long 0 /* 0x138 */
> .long 0 /* 0x13c */
> .long 0 /* 0x140 */
> @@ -1989,11 +1989,11 @@ hcall_real_table:
> .long 0 /* 0x2f4 */
> .long 0 /* 0x2f8 */
> #ifdef CONFIG_KVM_XICS
> - .long DOTSYM(xics_rm_h_xirr_x) - hcall_real_table
> + .long xics_rm_h_xirr_x - hcall_real_table
> #else
> .long 0 /* 0x2fc - H_XIRR_X*/
> #endif
> - .long DOTSYM(kvmppc_rm_h_random) - hcall_real_table
> + .long kvmppc_rm_h_random - hcall_real_table
> .globl hcall_real_table_end
> hcall_real_table_end:
>
> diff --git a/arch/powerpc/kvm/book3s_interrupts.S b/arch/powerpc/kvm/book3s_interrupts.S
> index f4bec2fc51aa..d65d405dabdc 100644
> --- a/arch/powerpc/kvm/book3s_interrupts.S
> +++ b/arch/powerpc/kvm/book3s_interrupts.S
> @@ -15,15 +15,9 @@
> #include <asm/asm-compat.h>
>
> #if defined(CONFIG_PPC_BOOK3S_64)
> -#ifdef CONFIG_PPC64_ELF_ABI_V2
> -#define FUNC(name) name
> -#else
> -#define FUNC(name) GLUE(.,name)
> -#endif
> #define GET_SHADOW_VCPU(reg) addi reg, r13, PACA_SVCPU
>
> #elif defined(CONFIG_PPC_BOOK3S_32)
> -#define FUNC(name) name
> #define GET_SHADOW_VCPU(reg) lwz reg, (THREAD + THREAD_KVM_SVCPU)(r2)
>
> #endif /* CONFIG_PPC_BOOK3S_64 */
> @@ -85,7 +79,7 @@ kvm_start_entry:
>
> kvm_start_lightweight:
> /* Copy registers into shadow vcpu so we can access them in real mode */
> - bl FUNC(kvmppc_copy_to_svcpu)
> + bl kvmppc_copy_to_svcpu
> nop
> REST_GPR(3, r1)
>
> @@ -123,7 +117,7 @@ after_sprg3_load:
> PPC_LL r4, VCPU_SHADOW_MSR(r3) /* get shadow_msr */
>
> /* Jump to segment patching handler and into our guest */
> - bl FUNC(kvmppc_entry_trampoline)
> + bl kvmppc_entry_trampoline
> nop
>
> /*
> @@ -154,7 +148,7 @@ after_sprg3_load:
>
> /* Transfer reg values from shadow vcpu back to vcpu struct */
>
> - bl FUNC(kvmppc_copy_from_svcpu)
> + bl kvmppc_copy_from_svcpu
> nop
>
> #ifdef CONFIG_PPC_BOOK3S_64
> @@ -193,7 +187,7 @@ after_sprg3_load:
>
> /* Restore r3 (vcpu) */
> REST_GPR(3, r1)
> - bl FUNC(kvmppc_handle_exit_pr)
> + bl kvmppc_handle_exit_pr
>
> /* If RESUME_GUEST, get back in the loop */
> cmpwi r3, RESUME_GUEST
> diff --git a/arch/powerpc/kvm/book3s_rmhandlers.S b/arch/powerpc/kvm/book3s_rmhandlers.S
> index 0a557ffca9fe..415802bedfdf 100644
> --- a/arch/powerpc/kvm/book3s_rmhandlers.S
> +++ b/arch/powerpc/kvm/book3s_rmhandlers.S
> @@ -24,17 +24,7 @@
> * *
> ****************************************************************************/
>
> -#if defined(CONFIG_PPC_BOOK3S_64)
> -
> -#ifdef CONFIG_PPC64_ELF_ABI_V2
> -#define FUNC(name) name
> -#else
> -#define FUNC(name) GLUE(.,name)
> -#endif
> -
> -#elif defined(CONFIG_PPC_BOOK3S_32)
> -
> -#define FUNC(name) name
> +#if defined(CONFIG_PPC_BOOK3S_32)
>
> #define RFI_TO_KERNEL rfi
> #define RFI_TO_GUEST rfi
> diff --git a/arch/powerpc/net/bpf_jit.h b/arch/powerpc/net/bpf_jit.h
> index 72b7bb34fade..65f1b80ae589 100644
> --- a/arch/powerpc/net/bpf_jit.h
> +++ b/arch/powerpc/net/bpf_jit.h
> @@ -13,12 +13,6 @@
> #include <asm/types.h>
> #include <asm/ppc-opcode.h>
>
> -#ifdef CONFIG_PPC64_ELF_ABI_V1
> -#define FUNCTION_DESCR_SIZE 24
> -#else
> -#define FUNCTION_DESCR_SIZE 0
> -#endif
> -
> #define CTX_NIA(ctx) ((unsigned long)ctx->idx * 4)
>
> #define PLANT_INSTR(d, idx, instr) \
> diff --git a/arch/powerpc/net/bpf_jit_comp.c b/arch/powerpc/net/bpf_jit_comp.c
> index e93aefcfb83f..dec3119e2bdb 100644
> --- a/arch/powerpc/net/bpf_jit_comp.c
> +++ b/arch/powerpc/net/bpf_jit_comp.c
> @@ -152,7 +152,7 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *fp)
> extable_len = fp->aux->num_exentries * sizeof(struct exception_table_entry);
>
> proglen = cgctx.idx * 4;
> - alloclen = proglen + FUNCTION_DESCR_SIZE + fixup_len + extable_len;
> + alloclen = proglen + fixup_len + extable_len;
>
> bpf_hdr = bpf_jit_binary_alloc(alloclen, &image, 4, bpf_jit_fill_ill_insns);
> if (!bpf_hdr) {
> @@ -161,10 +161,10 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *fp)
> }
>
> if (extable_len)
> - fp->aux->extable = (void *)image + FUNCTION_DESCR_SIZE + proglen + fixup_len;
> + fp->aux->extable = (void *)image + proglen + fixup_len;
>
> skip_init_ctx:
> - code_base = (u32 *)(image + FUNCTION_DESCR_SIZE);
> + code_base = (u32 *)image;
>
> /* Code generation passes 1-2 */
> for (pass = 1; pass < 3; pass++) {
> @@ -191,15 +191,9 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *fp)
> */
> bpf_jit_dump(flen, proglen, pass, code_base);
>
> -#ifdef CONFIG_PPC64_ELF_ABI_V1
> - /* Function descriptor nastiness: Address + TOC */
> - ((u64 *)image)[0] = (u64)code_base;
> - ((u64 *)image)[1] = local_paca->kernel_toc;
> -#endif
> -
> fp->bpf_func = (void *)image;
> fp->jited = 1;
> - fp->jited_len = proglen + FUNCTION_DESCR_SIZE;
> + fp->jited_len = proglen;
>
> bpf_flush_icache(bpf_hdr, (u8 *)bpf_hdr + bpf_hdr->size);
> if (!fp->is_func || extra_pass) {
> diff --git a/arch/powerpc/net/bpf_jit_comp64.c b/arch/powerpc/net/bpf_jit_comp64.c
> index 0f8048f6dad6..4a5cc7acf21e 100644
> --- a/arch/powerpc/net/bpf_jit_comp64.c
> +++ b/arch/powerpc/net/bpf_jit_comp64.c
> @@ -127,8 +127,7 @@ void bpf_jit_build_prologue(u32 *image, struct codegen_context *ctx)
> int i;
>
> #ifndef CONFIG_PPC_KERNEL_PCREL
> - if (IS_ENABLED(CONFIG_PPC64_ELF_ABI_V2))
> - EMIT(PPC_RAW_LD(_R2, _R13, offsetof(struct paca_struct, kernel_toc)));
> + EMIT(PPC_RAW_LD(_R2, _R13, offsetof(struct paca_struct, kernel_toc)));
> #endif
>
> /*
> @@ -247,9 +246,6 @@ int bpf_jit_emit_func_call_rel(u32 *image, struct codegen_context *ctx, u64 func
> if (WARN_ON_ONCE(func && is_module_text_address(func)))
> return -EINVAL;
>
> - /* skip past descriptor if elf v1 */
> - func += FUNCTION_DESCR_SIZE;
> -
> /* Load function address into r12 */
> PPC_LI64(_R12, func);
>
> @@ -285,8 +281,7 @@ static int bpf_jit_emit_tail_call(u32 *image, struct codegen_context *ctx, u32 o
> int b2p_index = bpf_to_ppc(BPF_REG_3);
> int bpf_tailcall_prologue_size = 8;
>
> - if (IS_ENABLED(CONFIG_PPC64_ELF_ABI_V2))
> - bpf_tailcall_prologue_size += 4; /* skip past the toc load */
> + bpf_tailcall_prologue_size += 4; /* skip past the toc load */
>
> /*
> * if (index >= array->map.max_entries)
> @@ -326,7 +321,7 @@ static int bpf_jit_emit_tail_call(u32 *image, struct codegen_context *ctx, u32 o
> /* goto *(prog->bpf_func + prologue_size); */
> EMIT(PPC_RAW_LD(bpf_to_ppc(TMP_REG_1), bpf_to_ppc(TMP_REG_1), offsetof(struct bpf_prog, bpf_func)));
> EMIT(PPC_RAW_ADDI(bpf_to_ppc(TMP_REG_1), bpf_to_ppc(TMP_REG_1),
> - FUNCTION_DESCR_SIZE + bpf_tailcall_prologue_size));
> + bpf_tailcall_prologue_size));
> EMIT(PPC_RAW_MTCTR(bpf_to_ppc(TMP_REG_1)));
>
> /* tear down stack, restore NVRs, ... */
> @@ -743,7 +738,7 @@ int bpf_jit_build_body(struct bpf_prog *fp, u32 *image, struct codegen_context *
> break;
> case STF_BARRIER_FALLBACK:
> ctx->seen |= SEEN_FUNC;
> - PPC_LI64(_R12, dereference_kernel_function_descriptor(bpf_stf_barrier));
> + PPC_LI64(_R12, bpf_stf_barrier);
> EMIT(PPC_RAW_MTCTR(_R12));
> EMIT(PPC_RAW_BCTRL());
> break;
> diff --git a/arch/powerpc/platforms/Kconfig.cputype b/arch/powerpc/platforms/Kconfig.cputype
> index 45fd975ef521..51d00f5aadc7 100644
> --- a/arch/powerpc/platforms/Kconfig.cputype
> +++ b/arch/powerpc/platforms/Kconfig.cputype
> @@ -627,12 +627,6 @@ config CPU_LITTLE_ENDIAN
>
> endchoice
>
> -config PPC64_ELF_ABI_V1
> - def_bool PPC64 && (CPU_BIG_ENDIAN && !PPC64_BIG_ENDIAN_ELF_ABI_V2)
> -
> -config PPC64_ELF_ABI_V2
> - def_bool PPC64 && !PPC64_ELF_ABI_V1
> -
> config PPC64_BOOT_WRAPPER
> def_bool n
> depends on CPU_LITTLE_ENDIAN
> diff --git a/drivers/crypto/vmx/Makefile b/drivers/crypto/vmx/Makefile
> index 7257b8c44626..8e7e559d6098 100644
> --- a/drivers/crypto/vmx/Makefile
> +++ b/drivers/crypto/vmx/Makefile
> @@ -5,11 +5,7 @@ vmx-crypto-objs := vmx.o aesp8-ppc.o ghashp8-ppc.o aes.o aes_cbc.o aes_ctr.o aes
> ifeq ($(CONFIG_CPU_LITTLE_ENDIAN),y)
> override flavour := linux-ppc64le
> else
> -ifdef CONFIG_PPC64_ELF_ABI_V2
> override flavour := linux-ppc64-elfv2
> -else
> -override flavour := linux-ppc64
> -endif
> endif
>
> quiet_cmd_perl = PERL $@
> diff --git a/kernel/extable.c b/kernel/extable.c
> index 71f482581cab..3b559b2d55a9 100644
> --- a/kernel/extable.c
> +++ b/kernel/extable.c
> @@ -133,7 +133,7 @@ int kernel_text_address(unsigned long addr)
> }
>
> /*
> - * On some architectures (PPC64, IA64, PARISC) function pointers
> + * On some architectures (IA64, PARISC) function pointers
> * are actually only tokens to some data that then holds the
> * real function address. As a result, to find if a function
> * pointer is part of the kernel text, we need to do some
> diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c
> index 76973a70ab9d..d50ca738d408 100644
> --- a/kernel/trace/ftrace.c
> +++ b/kernel/trace/ftrace.c
> @@ -4122,23 +4122,11 @@ struct ftrace_glob {
> int type;
> };
>
> -/*
> - * If symbols in an architecture don't correspond exactly to the user-visible
> - * name of what they represent, it is possible to define this function to
> - * perform the necessary adjustments.
> -*/
> -char * __weak arch_ftrace_match_adjust(char *str, const char *search)
> -{
> - return str;
> -}
> -
> static int ftrace_match(char *str, struct ftrace_glob *g)
> {
> int matched = 0;
> int slen;
>
> - str = arch_ftrace_match_adjust(str, g->search);
> -
> switch (g->type) {
> case MATCH_FULL:
> if (strcmp(str, g->search) == 0)
More information about the Linuxppc-dev
mailing list