[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v5 17/21] linux-user: Add AArch64 support
From: |
Peter Maydell |
Subject: |
[Qemu-devel] [PATCH v5 17/21] linux-user: Add AArch64 support |
Date: |
Mon, 1 Jul 2013 18:35:16 +0100 |
From: Alexander Graf <address@hidden>
This patch adds support for AArch64 in all the small corners of
linux-user and beyond.
Signed-off-by: Alexander Graf <address@hidden>
Signed-off-by: John Rigby <address@hidden>
Message-id: address@hidden
[PMM:
* removed some unnecessary #defines from syscall.h
* catch attempts to use a 32 bit only cpu with aarch64-linux-user
* termios stuff moved into its own patch
]
Signed-off-by: Peter Maydell <address@hidden>
---
linux-user/aarch64/syscall.h | 8 ++++++++
linux-user/elfload.c | 15 +++++++++++++--
linux-user/main.c | 16 ++++++++++++++++
3 files changed, 37 insertions(+), 2 deletions(-)
create mode 100644 linux-user/aarch64/syscall.h
diff --git a/linux-user/aarch64/syscall.h b/linux-user/aarch64/syscall.h
new file mode 100644
index 0000000..e863640
--- /dev/null
+++ b/linux-user/aarch64/syscall.h
@@ -0,0 +1,8 @@
+struct target_pt_regs {
+ uint64_t regs[31];
+ uint64_t sp;
+ uint64_t pc;
+ uint64_t pstate;
+};
+
+#define UNAME_MACHINE "aarch64"
diff --git a/linux-user/elfload.c b/linux-user/elfload.c
index ddef23e..9d8631d 100644
--- a/linux-user/elfload.c
+++ b/linux-user/elfload.c
@@ -267,16 +267,26 @@ static void elf_core_copy_regs(target_elf_gregset_t
*regs, const CPUX86State *en
#define ELF_START_MMAP 0x80000000
-#define elf_check_arch(x) ( (x) == EM_ARM )
+#define elf_check_arch(x) ((x) == ELF_MACHINE)
+#define ELF_ARCH ELF_MACHINE
+
+#ifdef TARGET_AARCH64
+#define ELF_CLASS ELFCLASS64
+#else
#define ELF_CLASS ELFCLASS32
-#define ELF_ARCH EM_ARM
+#endif
static inline void init_thread(struct target_pt_regs *regs,
struct image_info *infop)
{
abi_long stack = infop->start_stack;
memset(regs, 0, sizeof(*regs));
+
+#ifdef TARGET_AARCH64
+ regs->pc = infop->entry & ~0x3ULL;
+ regs->sp = stack;
+#else
regs->ARM_cpsr = 0x10;
if (infop->entry & 1)
regs->ARM_cpsr |= CPSR_T;
@@ -290,6 +300,7 @@ static inline void init_thread(struct target_pt_regs *regs,
/* For uClinux PIC binaries. */
/* XXX: Linux does this only on ARM with no MMU (do we care ?) */
regs->ARM_r10 = infop->start_data;
+#endif
}
#define ELF_NREG 18
diff --git a/linux-user/main.c b/linux-user/main.c
index 8aba817..e76e987 100644
--- a/linux-user/main.c
+++ b/linux-user/main.c
@@ -3965,6 +3965,22 @@ int main(int argc, char **argv, char **envp)
cpu_x86_load_seg(env, R_FS, 0);
cpu_x86_load_seg(env, R_GS, 0);
#endif
+#elif defined(TARGET_AARCH64)
+ {
+ int i;
+
+ if (!(arm_feature(env, ARM_FEATURE_AARCH64))) {
+ fprintf(stderr,
+ "The selected ARM CPU does not support 64 bit mode\n");
+ exit(1);
+ }
+
+ for (i = 0; i < 31; i++) {
+ env->xregs[i] = regs->regs[i];
+ }
+ env->pc = regs->pc;
+ env->xregs[31] = regs->sp;
+ }
#elif defined(TARGET_ARM)
{
int i;
--
1.7.9.5
- [Qemu-devel] [PATCH v5 00/21] AArch64 preparation patchset, Peter Maydell, 2013/07/01
- [Qemu-devel] [PATCH v5 05/21] target-arm: Pass DisasContext* to gen_set_pc_im(), Peter Maydell, 2013/07/01
- [Qemu-devel] [PATCH v5 15/21] target-arm: Implement cpu_set_tls() and cpu_clone_regs() for AArch64, Peter Maydell, 2013/07/01
- [Qemu-devel] [PATCH v5 17/21] linux-user: Add AArch64 support,
Peter Maydell <=
- [Qemu-devel] [PATCH v5 09/21] linux-user: Don't treat AArch64 cpu names specially, Peter Maydell, 2013/07/01
- [Qemu-devel] [PATCH v5 11/21] linux-user: Add syscall number definitions for AArch64, Peter Maydell, 2013/07/01
- [Qemu-devel] [PATCH v5 07/21] target-arm: Add AArch64 translation stub, Peter Maydell, 2013/07/01
- [Qemu-devel] [PATCH v5 08/21] gdbstub: Add AArch64 support, Peter Maydell, 2013/07/01
- [Qemu-devel] [PATCH v5 06/21] target-arm: Prepare translation for AArch64 code, Peter Maydell, 2013/07/01
- [Qemu-devel] [PATCH v5 20/21] default-configs: Add config for aarch64-linux-user, Peter Maydell, 2013/07/01
- [Qemu-devel] [PATCH v5 18/21] linux-user: AArch64 requires at least 3.8.0, Peter Maydell, 2013/07/01
- [Qemu-devel] [PATCH v5 10/21] linux-user: Add cpu loop for AArch64, Peter Maydell, 2013/07/01
- [Qemu-devel] [PATCH v5 13/21] linux-user: Add signal handling for AArch64, Peter Maydell, 2013/07/01
- [Qemu-devel] [PATCH v5 14/21] linux-user: Make sure NWFPE code is 32 bit ARM only, Peter Maydell, 2013/07/01