[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 05/28] linux-user: add support for xtensa FDPIC
From: |
Laurent Vivier |
Subject: |
[PULL 05/28] linux-user: add support for xtensa FDPIC |
Date: |
Wed, 8 Mar 2023 14:28:34 +0100 |
From: Max Filippov <jcmvbkbc@gmail.com>
Define xtensa-specific info_is_fdpic and fill in FDPIC-specific
registers in the xtensa version of init_thread.
Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
Message-Id: <20230205061230.544451-1-jcmvbkbc@gmail.com>
Signed-off-by: Laurent Vivier <laurent@vivier.eu>
---
include/elf.h | 1 +
linux-user/elfload.c | 16 +++++++++++++++-
2 files changed, 16 insertions(+), 1 deletion(-)
diff --git a/include/elf.h b/include/elf.h
index 8bf1e72720d5..e8bfe38a9fbd 100644
--- a/include/elf.h
+++ b/include/elf.h
@@ -1619,6 +1619,7 @@ typedef struct elf64_shdr {
#define ELFOSABI_MODESTO 11 /* Novell Modesto. */
#define ELFOSABI_OPENBSD 12 /* OpenBSD. */
#define ELFOSABI_ARM_FDPIC 65 /* ARM FDPIC */
+#define ELFOSABI_XTENSA_FDPIC 65 /* Xtensa FDPIC */
#define ELFOSABI_ARM 97 /* ARM */
#define ELFOSABI_STANDALONE 255 /* Standalone (embedded) application */
diff --git a/linux-user/elfload.c b/linux-user/elfload.c
index 5928c14dfc97..150d1d450396 100644
--- a/linux-user/elfload.c
+++ b/linux-user/elfload.c
@@ -1748,6 +1748,15 @@ static inline void init_thread(struct target_pt_regs
*regs,
regs->windowstart = 1;
regs->areg[1] = infop->start_stack;
regs->pc = infop->entry;
+ if (info_is_fdpic(infop)) {
+ regs->areg[4] = infop->loadmap_addr;
+ regs->areg[5] = infop->interpreter_loadmap_addr;
+ if (infop->interpreter_loadmap_addr) {
+ regs->areg[6] = infop->interpreter_pt_dynamic_addr;
+ } else {
+ regs->areg[6] = infop->pt_dynamic_addr;
+ }
+ }
}
/* See linux kernel: arch/xtensa/include/asm/elf.h. */
@@ -2207,11 +2216,16 @@ static void zero_bss(abi_ulong elf_bss, abi_ulong
last_bss, int prot)
}
}
-#ifdef TARGET_ARM
+#if defined(TARGET_ARM)
static int elf_is_fdpic(struct elfhdr *exec)
{
return exec->e_ident[EI_OSABI] == ELFOSABI_ARM_FDPIC;
}
+#elif defined(TARGET_XTENSA)
+static int elf_is_fdpic(struct elfhdr *exec)
+{
+ return exec->e_ident[EI_OSABI] == ELFOSABI_XTENSA_FDPIC;
+}
#else
/* Default implementation, always false. */
static int elf_is_fdpic(struct elfhdr *exec)
--
2.39.2
- [PULL 00/28] Linux user for 8.0 patches, Laurent Vivier, 2023/03/08
- [PULL 01/28] linux-user: Fix access to /proc/self/exe, Laurent Vivier, 2023/03/08
- [PULL 07/28] linux-user: Fix brk() to release pages, Laurent Vivier, 2023/03/08
- [PULL 05/28] linux-user: add support for xtensa FDPIC,
Laurent Vivier <=
- [PULL 08/28] linux-user: Provide print_raw_param64() for 64-bit values, Laurent Vivier, 2023/03/08
- [PULL 09/28] linux-user: Add strace for prlimit64() syscall, Laurent Vivier, 2023/03/08
- [PULL 06/28] linux-user: fill out task state in /proc/self/stat, Laurent Vivier, 2023/03/08
- [PULL 03/28] linux-user: add target to host netlink conversions, Laurent Vivier, 2023/03/08
- [PULL 02/28] linux-user: fix timerfd read endianness conversion, Laurent Vivier, 2023/03/08
- [PULL 04/28] linux-user: Fix unaligned memory access in prlimit64 syscall, Laurent Vivier, 2023/03/08
- [PULL 13/28] linux-user: Emulate CLONE_PIDFD flag in clone(), Laurent Vivier, 2023/03/08
- [PULL 14/28] linux-user/sparc: Tidy syscall trap, Laurent Vivier, 2023/03/08
- [PULL 17/28] linux-user/sparc: Tidy window spill/fill traps, Laurent Vivier, 2023/03/08
- [PULL 18/28] linux-user/sparc: Fix sparc64_{get, set}_context traps, Laurent Vivier, 2023/03/08