CRIS linux-user (existing)
PATCH 1/1 CRIS linux-user (existing)
This adds CRIS user emulation support to existing linux-user files in qemu.
Signature · 8 lines
Edgar E. Iglesias Axis Communications AB linux-user/elfload.c | 20 ++++++++++++ linux-user/main.c | 75 +++++++++++++++++++++++++++++++++++++++++++++ linux-user/syscall.c | 8 +++- linux-user/syscall_defs.h | 6 ++-- 4 files changed, 104 insertions(+), 5 deletions(-)
linux-user/elfload.c +20 -0
@@ -333,6 +333,26 @@ static inline void init_thread(struct target_pt_regs *regs, struct image_info *i#endif +#ifdef TARGET_CRIS + +#define ELF_START_MMAP 0x80000000 + +#define elf_check_arch (x) ( (x) == EM_CRIS ) + +#define ELF_CLASS ELFCLASS32 +#define ELF_DATA ELFDATA2LSB +#define ELF_ARCH EM_CRIS + +static inline void init_thread (struct target_pt_regs *regs,struct image_info *infop) +{ + regs->erp = infop->entry; +} + +#define USE_ELF_CORE_DUMP +#define ELF_EXEC_PAGESIZE 8192 + +#endif +#ifdef TARGET_M68K #define ELF_START_MMAP 0x80000000
linux-user/main.c +75 -0
87 lines not on this page · raw message
linux-user/syscall.c +6 -2
@@ -74,7 +74,7 @@//#define DEBUG #if defined(TARGET_I386 ) || defined(TARGET_ARM ) || defined(TARGET_SPARC ) \ - || defined(TARGET_M68K ) || defined(TARGET_SH4 ) + || defined(TARGET_M68K ) || defined(TARGET_SH4 ) || defined(TARGET_CRIS )/* 16 bit uid wrappers emulation */ #define USE_UID16 #endif
@@ -2286,6 +2286,10 @@ int do_fork(CPUState *env, unsigned int flags, target_ulong newsp)for (i =7 ; i <30 ; i++) new_env->ir[i] = 0; } +#elif defined(TARGET_CRIS) +if (!newsp) + newsp = env->regs[14 ]; + new_env->regs[14 ] = newsp;#else #error unsupported target CPU#endif
@@ -3502,7 +3506,7 @@ target_long do_syscall(void *cpu_env, int num, target_long arg1,#endif #ifdef TARGET_NR_mmap case TARGET_NR_mmap: -#if defined(TARGET_I386) || defined(TARGET_ARM) || defined(TARGET_M68K) +#if defined(TARGET_I386) || defined(TARGET_ARM) || defined(TARGET_M68K) || defined(TARGET_CRIS) { target_ulong *v; target_ulong v1, v2, v3, v4, v5, v6;
linux-user/syscall_defs.h +3 -3
@@ -49,7 +49,7 @@#define TARGET_IOC_TYPEBITS 8#if defined(TARGET_I386 ) || defined(TARGET_ARM ) || defined(TARGET_SH4 ) \ - || defined(TARGET_M68K ) || defined(TARGET_ALPHA ) + || defined(TARGET_M68K ) || defined(TARGET_ALPHA ) || defined(TARGET_CRIS )#define TARGET_IOC_SIZEBITS 14#define TARGET_IOC_DIRBITS 2
@@ -289,7 +289,7 @@ struct target_sigaction;int do_sigaction (int sig,const struct target_sigaction *act,struct target_sigaction *oact); -#if defined(TARGET_I386 ) || defined(TARGET_ARM ) || defined(TARGET_SPARC ) || defined(TARGET_PPC ) || defined(TARGET_MIPS ) || defined (TARGET_SH4 ) || defined(TARGET_M68K ) || defined(TARGET_ALPHA ) +#if defined(TARGET_I386 ) || defined(TARGET_ARM ) || defined(TARGET_SPARC ) || defined(TARGET_PPC ) || defined(TARGET_MIPS ) || defined (TARGET_SH4 ) || defined(TARGET_M68K ) || defined(TARGET_ALPHA ) || defined(TARGET_CRIS )#if defined(TARGET_SPARC )#define TARGET_SA_NOCLDSTOP 8u
@@ -884,7 +884,7 @@ struct target_winsize {#define TARGET_MAP_NONBLOCK 0x10000/* do not block on IO */ #endif -#if defined(TARGET_I386) || defined(TARGET_ARM) +#if defined(TARGET_I386) || defined(TARGET_ARM) || defined(TARGET_CRIS) struct target_stat { unsigned short st_dev; unsigned short __pad1;