diff options
Diffstat (limited to 'emulators/qemu-devel/files/patch-z7-bsd-user-tls1-cognet')
| -rw-r--r-- | emulators/qemu-devel/files/patch-z7-bsd-user-tls1-cognet | 171 |
1 files changed, 0 insertions, 171 deletions
diff --git a/emulators/qemu-devel/files/patch-z7-bsd-user-tls1-cognet b/emulators/qemu-devel/files/patch-z7-bsd-user-tls1-cognet deleted file mode 100644 index f3aac00b4908..000000000000 --- a/emulators/qemu-devel/files/patch-z7-bsd-user-tls1-cognet +++ /dev/null @@ -1,171 +0,0 @@ ---- oldqemu-1.3.0/bsd-user/syscall.c 2012-12-13 23:51:09.000000000 +0100 -+++ qemu-1.3.0/bsd-user/syscall.c 2012-12-13 23:46:55.000000000 +0100 -@@ -258,6 +258,16 @@ static abi_long do_freebsd_sysarch(void - #ifdef TARGET_ARM - static abi_long do_freebsd_sysarch(void *env, int op, abi_ulong parms) - { -+ abi_ulong val; -+ -+ switch (op) { -+ case TARGET_FREEBSD_ARM_SET_TP: -+ if (get_user(val, parms, abi_ulong)) -+ return -TARGET_EINVAL; -+ cpu_set_tls(env, val); -+ return 0; -+ } -+ - return -TARGET_EINVAL; - } - #endif ---- oldqemu-1.3.0/bsd-user/elfload.c 2012-12-13 23:51:09.000000000 +0100 -+++ qemu-1.3.0/bsd-user/elfload.c 2012-12-13 23:50:14.000000000 +0100 -@@ -948,10 +948,8 @@ static abi_ulong create_elf_tables(abi_u - * Force 16 byte _final_ alignment here for generality. - */ - sp = sp &~ (abi_ulong)15; --#ifdef __FreeBSD__ -- size = 0; --#else - size = (DLINFO_ITEMS + 1) * 2; -+#ifndef __FreeBSD__ - if (k_platform) - size += 2; - #ifdef DLINFO_ARCH_ITEMS -@@ -964,7 +962,6 @@ static abi_ulong create_elf_tables(abi_u - if (size & 15) - sp -= 16 - (size & 15); - --#ifndef __FreeBSD__ - /* This is correct because Linux defines - * elf_addr_t as Elf32_Off / Elf64_Off - */ -@@ -989,8 +986,10 @@ static abi_ulong create_elf_tables(abi_u - NEW_AUX_ENT(AT_EGID, (abi_ulong) getegid()); - NEW_AUX_ENT(AT_HWCAP, (abi_ulong) ELF_HWCAP); - NEW_AUX_ENT(AT_CLKTCK, (abi_ulong) sysconf(_SC_CLK_TCK)); -+#ifndef __FreeBSD__ - if (k_platform) - NEW_AUX_ENT(AT_PLATFORM, u_platform); -+#endif - #ifdef ARCH_DLINFO - /* - * ARCH_DLINFO must come last so platform specific code can enforce -@@ -999,7 +998,6 @@ static abi_ulong create_elf_tables(abi_u - ARCH_DLINFO; - #endif - #undef NEW_AUX_ENT --#endif /* ! __FreeBSD__ */ - - sp = loader_build_argptr(envc, argc, sp, p, !ibcs); - return sp; ---- oldqemu-1.3.0/bsd-user/main.c 2012-12-13 23:51:09.000000000 +0100 -+++ qemu-1.3.0/bsd-user/main.c 2012-12-13 23:01:30.000000000 +0100 -@@ -392,6 +392,84 @@ void cpu_loop(CPUX86State *env) - #ifdef TARGET_ARM - // #define DEBUG_ARM - -+static int do_strex(CPUARMState *env) -+{ -+ uint32_t val; -+ int size; -+ int rc = 1; -+ int segv = 0; -+ uint32_t addr; -+ start_exclusive(); -+ addr = env->exclusive_addr; -+ if (addr != env->exclusive_test) { -+ goto fail; -+ } -+ size = env->exclusive_info & 0xf; -+ switch (size) { -+ case 0: -+ segv = get_user_u8(val, addr); -+ break; -+ case 1: -+ segv = get_user_u16(val, addr); -+ break; -+ case 2: -+ case 3: -+ segv = get_user_u32(val, addr); -+ break; -+ default: -+ abort(); -+ } -+ if (segv) { -+ env->cp15.c6_data = addr; -+ goto done; -+ } -+ if (val != env->exclusive_val) { -+ goto fail; -+ } -+ if (size == 3) { -+ segv = get_user_u32(val, addr + 4); -+ if (segv) { -+ env->cp15.c6_data = addr + 4; -+ goto done; -+ } -+ if (val != env->exclusive_high) { -+ goto fail; -+ } -+ } -+ val = env->regs[(env->exclusive_info >> 8) & 0xf]; -+ switch (size) { -+ case 0: -+ segv = put_user_u8(val, addr); -+ break; -+ case 1: -+ segv = put_user_u16(val, addr); -+ break; -+ case 2: -+ case 3: -+ segv = put_user_u32(val, addr); -+ break; -+ } -+ if (segv) { -+ env->cp15.c6_data = addr; -+ goto done; -+ } -+ if (size == 3) { -+ val = env->regs[(env->exclusive_info >> 12) & 0xf]; -+ segv = put_user_u32(val, addr + 4); -+ if (segv) { -+ env->cp15.c6_data = addr + 4; -+ goto done; -+ } -+ } -+ rc = 0; -+fail: -+ env->regs[15] += 4; -+ env->regs[(env->exclusive_info >> 4) & 0xf] = rc; -+done: -+ end_exclusive(); -+ return segv; -+} -+ - void cpu_loop(CPUARMState *env) - { - int trapnr; -@@ -622,6 +700,7 @@ void cpu_loop(CPUARMState *env) - if (do_kernel_trap(env)) - goto error; - break; -+#endif - case EXCP_STREX: - if (do_strex(env)) { - addr = env->cp15.c6_data; -@@ -629,7 +708,6 @@ void cpu_loop(CPUARMState *env) - } - break; - error: --#endif - default: - fprintf(stderr, "qemu: unhandled CPU exception 0x%x - aborting\n", - trapnr); ---- oldqemu-1.3.0/bsd-user/arm/syscall.h 2012-12-13 23:51:09.000000000 +0100 -+++ qemu-1.3.0/bsd-user/arm/syscall.h 2012-12-13 23:45:22.000000000 +0100 -@@ -21,3 +21,5 @@ struct target_pt_regs { - #define ARM_r0 uregs[0] - - #define ARM_SYSCALL_BASE 0 /* XXX: FreeBSD only */ -+ -+#define TARGET_FREEBSD_ARM_SET_TP 2 |
