Message ID | db0cc5bc7e55431f1ac6580aa1d983f8cfc661fb.1729770373.git.thehajime@gmail.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | [RFC,01/13] fs: binfmt_elf_efpic: add architecture hook elf_arch_finalize_exec | expand |
On Thu, 2024-10-24 at 21:09 +0900, Hajime Tazaki wrote: > > +#ifndef CONFIG_MMU > +#include <asm-generic/bug.h> Not sure that makes so much sense in the middle of the file, no harm always having it? > > +static inline const struct user_regset_view *task_user_regset_view( > + struct task_struct *task) What happened to indentation here ;-) static inline const ..... * task_user_regset_view(....) would be far easier to read. > +++ b/arch/x86/um/asm/module.h > @@ -2,23 +2,6 @@ > #ifndef __UM_MODULE_H > #define __UM_MODULE_H > > -/* UML is simple */ > -struct mod_arch_specific > -{ > -}; > - > -#ifdef CONFIG_X86_32 > - > -#define Elf_Shdr Elf32_Shdr > -#define Elf_Sym Elf32_Sym > -#define Elf_Ehdr Elf32_Ehdr > - > -#else > - > -#define Elf_Shdr Elf64_Shdr > -#define Elf_Sym Elf64_Sym > -#define Elf_Ehdr Elf64_Ehdr > - > -#endif > +#include <asm-generic/module.h> > > #endif That seems like a worthwhile cleanup on its own, but you should be able to just remove the file entirely? johannes
Hello Johannes, On Fri, 25 Oct 2024 17:56:51 +0900, Johannes Berg wrote: > > On Thu, 2024-10-24 at 21:09 +0900, Hajime Tazaki wrote: > > > > +#ifndef CONFIG_MMU > > +#include <asm-generic/bug.h> > > Not sure that makes so much sense in the middle of the file, no harm > always having it? agree. > > +static inline const struct user_regset_view *task_user_regset_view( > > + struct task_struct *task) > > What happened to indentation here ;-) > > static inline const ..... * > task_user_regset_view(....) > > would be far easier to read. fine, will fix it in the next revision. > > +++ b/arch/x86/um/asm/module.h > > @@ -2,23 +2,6 @@ > > #ifndef __UM_MODULE_H > > #define __UM_MODULE_H > > > > -/* UML is simple */ > > -struct mod_arch_specific > > -{ > > -}; > > - > > -#ifdef CONFIG_X86_32 > > - > > -#define Elf_Shdr Elf32_Shdr > > -#define Elf_Sym Elf32_Sym > > -#define Elf_Ehdr Elf32_Ehdr > > - > > -#else > > - > > -#define Elf_Shdr Elf64_Shdr > > -#define Elf_Sym Elf64_Sym > > -#define Elf_Ehdr Elf64_Ehdr > > - > > -#endif > > +#include <asm-generic/module.h> > > > > #endif > > That seems like a worthwhile cleanup on its own, but you should be able > to just remove the file entirely? agree. will add module.h to arch/um/include/asm/Kbuild. -- Hajime
diff --git a/arch/um/include/asm/mmu.h b/arch/um/include/asm/mmu.h index a3eaca41ff61..01422b761aa0 100644 --- a/arch/um/include/asm/mmu.h +++ b/arch/um/include/asm/mmu.h @@ -14,6 +14,11 @@ typedef struct mm_context { /* Address range in need of a TLB sync */ unsigned long sync_tlb_range_from; unsigned long sync_tlb_range_to; + +#ifdef CONFIG_BINFMT_ELF_FDPIC + unsigned long exec_fdpic_loadmap; + unsigned long interp_fdpic_loadmap; +#endif } mm_context_t; #endif diff --git a/arch/um/include/asm/ptrace-generic.h b/arch/um/include/asm/ptrace-generic.h index 4696f24d1492..fefa7631394e 100644 --- a/arch/um/include/asm/ptrace-generic.h +++ b/arch/um/include/asm/ptrace-generic.h @@ -29,6 +29,12 @@ struct pt_regs { #define PTRACE_OLDSETOPTIONS 21 +#ifdef CONFIG_BINFMT_ELF_FDPIC +#define PTRACE_GETFDPIC 31 +#define PTRACE_GETFDPIC_EXEC 0 +#define PTRACE_GETFDPIC_INTERP 1 +#endif + struct task_struct; extern long subarch_ptrace(struct task_struct *child, long request, @@ -44,6 +50,17 @@ extern void clear_flushed_tls(struct task_struct *task); extern int syscall_trace_enter(struct pt_regs *regs); extern void syscall_trace_leave(struct pt_regs *regs); +#ifndef CONFIG_MMU +#include <asm-generic/bug.h> + +static inline const struct user_regset_view *task_user_regset_view( + struct task_struct *task) +{ + WARN_ON_ONCE(true); + return 0; +} +#endif + #endif #endif diff --git a/arch/x86/um/asm/elf.h b/arch/x86/um/asm/elf.h index 6052200fe925..4f87980bc9e9 100644 --- a/arch/x86/um/asm/elf.h +++ b/arch/x86/um/asm/elf.h @@ -8,6 +8,8 @@ #include <asm/user.h> #include <skas.h> +#define ELF_FDPIC_CORE_EFLAGS 0 + #ifdef CONFIG_X86_32 #define R_386_NONE 0 @@ -188,8 +190,11 @@ extern int arch_setup_additional_pages(struct linux_binprm *bprm, extern unsigned long um_vdso_addr; #define AT_SYSINFO_EHDR 33 -#define ARCH_DLINFO NEW_AUX_ENT(AT_SYSINFO_EHDR, um_vdso_addr) - +#define ARCH_DLINFO \ +do { \ + NEW_AUX_ENT(AT_SYSINFO_EHDR, um_vdso_addr); \ + NEW_AUX_ENT(AT_MINSIGSTKSZ, 0); \ +} while (0) #endif typedef unsigned long elf_greg_t; diff --git a/arch/x86/um/asm/module.h b/arch/x86/um/asm/module.h index a3b061d66082..4f7be1481979 100644 --- a/arch/x86/um/asm/module.h +++ b/arch/x86/um/asm/module.h @@ -2,23 +2,6 @@ #ifndef __UM_MODULE_H #define __UM_MODULE_H -/* UML is simple */ -struct mod_arch_specific -{ -}; - -#ifdef CONFIG_X86_32 - -#define Elf_Shdr Elf32_Shdr -#define Elf_Sym Elf32_Sym -#define Elf_Ehdr Elf32_Ehdr - -#else - -#define Elf_Shdr Elf64_Shdr -#define Elf_Sym Elf64_Sym -#define Elf_Ehdr Elf64_Ehdr - -#endif +#include <asm-generic/module.h> #endif diff --git a/fs/Kconfig.binfmt b/fs/Kconfig.binfmt index bd2f530e5740..419ba0282806 100644 --- a/fs/Kconfig.binfmt +++ b/fs/Kconfig.binfmt @@ -58,7 +58,7 @@ config ARCH_USE_GNU_PROPERTY config BINFMT_ELF_FDPIC bool "Kernel support for FDPIC ELF binaries" default y if !BINFMT_ELF - depends on ARM || ((M68K || RISCV || SUPERH || XTENSA) && !MMU) + depends on ARM || ((M68K || RISCV || SUPERH || UML || XTENSA) && !MMU) select ELFCORE help ELF FDPIC binaries are based on ELF, but allow the individual load