Commit e2302539 authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'xtensa-20221010' of https://github.com/jcmvbkbc/linux-xtensa

Pull xtensa updates from Max Filippov:

 - add support for FDPIC and static PIE executable formats for noMMU

* tag 'xtensa-20221010' of https://github.com/jcmvbkbc/linux-xtensa:
  xtensa: add FDPIC and static PIE support for noMMU
  xtensa: clean up ELF_PLAT_INIT macro
parents 34fdd22c e3ddb8bb
...@@ -93,6 +93,10 @@ typedef elf_fpreg_t elf_fpregset_t[ELF_NFPREG]; ...@@ -93,6 +93,10 @@ typedef elf_fpreg_t elf_fpregset_t[ELF_NFPREG];
#define elf_check_arch(x) ( ( (x)->e_machine == EM_XTENSA ) || \ #define elf_check_arch(x) ( ( (x)->e_machine == EM_XTENSA ) || \
( (x)->e_machine == EM_XTENSA_OLD ) ) ( (x)->e_machine == EM_XTENSA_OLD ) )
#define ELFOSABI_XTENSA_FDPIC 65
#define elf_check_fdpic(x) ((x)->e_ident[EI_OSABI] == ELFOSABI_XTENSA_FDPIC)
#define ELF_FDPIC_CORE_EFLAGS 0
/* /*
* These are used to set parameters in the core dumps. * These are used to set parameters in the core dumps.
*/ */
...@@ -153,10 +157,22 @@ typedef elf_fpreg_t elf_fpregset_t[ELF_NFPREG]; ...@@ -153,10 +157,22 @@ typedef elf_fpreg_t elf_fpregset_t[ELF_NFPREG];
*/ */
#define ELF_PLAT_INIT(_r, load_addr) \ #define ELF_PLAT_INIT(_r, load_addr) \
do { _r->areg[0]=0; /*_r->areg[1]=0;*/ _r->areg[2]=0; _r->areg[3]=0; \ do { \
_r->areg[4]=0; _r->areg[5]=0; _r->areg[6]=0; _r->areg[7]=0; \ (_r)->areg[0] = 0; /*(_r)->areg[1] = 0;*/ \
_r->areg[8]=0; _r->areg[9]=0; _r->areg[10]=0; _r->areg[11]=0; \ (_r)->areg[2] = 0; (_r)->areg[3] = 0; \
_r->areg[12]=0; _r->areg[13]=0; _r->areg[14]=0; _r->areg[15]=0; \ (_r)->areg[4] = 0; (_r)->areg[5] = 0; \
(_r)->areg[6] = 0; (_r)->areg[7] = 0; \
(_r)->areg[8] = 0; (_r)->areg[9] = 0; \
(_r)->areg[10] = 0; (_r)->areg[11] = 0; \
(_r)->areg[12] = 0; (_r)->areg[13] = 0; \
(_r)->areg[14] = 0; (_r)->areg[15] = 0; \
} while (0)
#define ELF_FDPIC_PLAT_INIT(_r, _exec_map_addr, _interp_map_addr, dynamic_addr) \
do { \
(_r)->areg[4] = _exec_map_addr; \
(_r)->areg[5] = _interp_map_addr; \
(_r)->areg[6] = dynamic_addr; \
} while (0) } while (0)
typedef struct { typedef struct {
......
...@@ -205,9 +205,12 @@ struct thread_struct { ...@@ -205,9 +205,12 @@ struct thread_struct {
#define start_thread(regs, new_pc, new_sp) \ #define start_thread(regs, new_pc, new_sp) \
do { \ do { \
unsigned long syscall = (regs)->syscall; \ unsigned long syscall = (regs)->syscall; \
unsigned long current_aregs[16]; \
memcpy(current_aregs, (regs)->areg, sizeof(current_aregs)); \
memset((regs), 0, sizeof(*(regs))); \ memset((regs), 0, sizeof(*(regs))); \
(regs)->pc = (new_pc); \ (regs)->pc = (new_pc); \
(regs)->ps = USER_PS_VALUE; \ (regs)->ps = USER_PS_VALUE; \
memcpy((regs)->areg, current_aregs, sizeof(current_aregs)); \
(regs)->areg[1] = (new_sp); \ (regs)->areg[1] = (new_sp); \
(regs)->areg[0] = 0; \ (regs)->areg[0] = 0; \
(regs)->wmask = 1; \ (regs)->wmask = 1; \
......
...@@ -37,6 +37,10 @@ ...@@ -37,6 +37,10 @@
#define PTRACE_SETXTREGS 19 #define PTRACE_SETXTREGS 19
#define PTRACE_GETHBPREGS 20 #define PTRACE_GETHBPREGS 20
#define PTRACE_SETHBPREGS 21 #define PTRACE_SETHBPREGS 21
#define PTRACE_GETFDPIC 22
#define PTRACE_GETFDPIC_EXEC 0
#define PTRACE_GETFDPIC_INTERP 1
#ifndef __ASSEMBLY__ #ifndef __ASSEMBLY__
......
...@@ -58,7 +58,7 @@ config ARCH_USE_GNU_PROPERTY ...@@ -58,7 +58,7 @@ config ARCH_USE_GNU_PROPERTY
config BINFMT_ELF_FDPIC config BINFMT_ELF_FDPIC
bool "Kernel support for FDPIC ELF binaries" bool "Kernel support for FDPIC ELF binaries"
default y if !BINFMT_ELF default y if !BINFMT_ELF
depends on ARM || ((M68K || SUPERH) && !MMU) depends on ARM || ((M68K || SUPERH || XTENSA) && !MMU)
select ELFCORE select ELFCORE
help help
ELF FDPIC binaries are based on ELF, but allow the individual load ELF FDPIC binaries are based on ELF, but allow the individual load
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment