diff options
| author | Peter Maydell <peter.maydell@linaro.org> | 2017-01-25 13:30:23 +0000 |
|---|---|---|
| committer | Peter Maydell <peter.maydell@linaro.org> | 2017-01-25 13:30:23 +0000 |
| commit | ae5045ae5b2bbd8ce1335d1b05f9ecacca83a6cf (patch) | |
| tree | 93369341e12120f48c7c7a550fb969578dc5268d /linux-user/elfload.c | |
| parent | ffb5a69c31b3c2a79ad5b4b9a8e47da83eef6115 (diff) | |
| parent | e671711c9a8c1de540f035095e18458bc03968de (diff) | |
| download | focaccia-qemu-ae5045ae5b2bbd8ce1335d1b05f9ecacca83a6cf.tar.gz focaccia-qemu-ae5045ae5b2bbd8ce1335d1b05f9ecacca83a6cf.zip | |
Merge remote-tracking branch 'remotes/rth/tags/pull-nios-20170124' into staging
nios2 target support # gpg: Signature made Tue 24 Jan 2017 21:11:47 GMT # gpg: using RSA key 0xAD1270CC4DD0279B # gpg: Good signature from "Richard Henderson <rth7680@gmail.com>" # gpg: aka "Richard Henderson <rth@redhat.com>" # gpg: aka "Richard Henderson <rth@twiddle.net>" # Primary key fingerprint: 9CB1 8DDA F8E8 49AD 2AFC 16A4 AD12 70CC 4DD0 279B * remotes/rth/tags/pull-nios-20170124: nios2: Add support for Nios-II R1 nios2: Add Altera 10M50 GHRD emulation nios2: Add periodic timer emulation nios2: Add IIC interrupt controller emulation nios2: Add usermode binaries emulation nios2: Add disas entries nios2: Add architecture emulation support Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Diffstat (limited to 'linux-user/elfload.c')
| -rw-r--r-- | linux-user/elfload.c | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/linux-user/elfload.c b/linux-user/elfload.c index 51794bbb45..c66cbbe84b 100644 --- a/linux-user/elfload.c +++ b/linux-user/elfload.c @@ -967,6 +967,63 @@ static void elf_core_copy_regs(target_elf_gregset_t *regs, const CPUMBState *env #endif /* TARGET_MICROBLAZE */ +#ifdef TARGET_NIOS2 + +#define ELF_START_MMAP 0x80000000 + +#define elf_check_arch(x) ((x) == EM_ALTERA_NIOS2) + +#define ELF_CLASS ELFCLASS32 +#define ELF_ARCH EM_ALTERA_NIOS2 + +static void init_thread(struct target_pt_regs *regs, struct image_info *infop) +{ + regs->ea = infop->entry; + regs->sp = infop->start_stack; + regs->estatus = 0x3; +} + +#define ELF_EXEC_PAGESIZE 4096 + +#define USE_ELF_CORE_DUMP +#define ELF_NREG 49 +typedef target_elf_greg_t target_elf_gregset_t[ELF_NREG]; + +/* See linux kernel: arch/mips/kernel/process.c:elf_dump_regs. */ +static void elf_core_copy_regs(target_elf_gregset_t *regs, + const CPUNios2State *env) +{ + int i; + + (*regs)[0] = -1; + for (i = 1; i < 8; i++) /* r0-r7 */ + (*regs)[i] = tswapreg(env->regs[i + 7]); + + for (i = 8; i < 16; i++) /* r8-r15 */ + (*regs)[i] = tswapreg(env->regs[i - 8]); + + for (i = 16; i < 24; i++) /* r16-r23 */ + (*regs)[i] = tswapreg(env->regs[i + 7]); + (*regs)[24] = -1; /* R_ET */ + (*regs)[25] = -1; /* R_BT */ + (*regs)[26] = tswapreg(env->regs[R_GP]); + (*regs)[27] = tswapreg(env->regs[R_SP]); + (*regs)[28] = tswapreg(env->regs[R_FP]); + (*regs)[29] = tswapreg(env->regs[R_EA]); + (*regs)[30] = -1; /* R_SSTATUS */ + (*regs)[31] = tswapreg(env->regs[R_RA]); + + (*regs)[32] = tswapreg(env->regs[R_PC]); + + (*regs)[33] = -1; /* R_STATUS */ + (*regs)[34] = tswapreg(env->regs[CR_ESTATUS]); + + for (i = 35; i < 49; i++) /* ... */ + (*regs)[i] = -1; +} + +#endif /* TARGET_NIOS2 */ + #ifdef TARGET_OPENRISC #define ELF_START_MMAP 0x08000000 |