diff options
author | ths | 2007-03-02 21:48:00 +0100 |
---|---|---|
committer | ths | 2007-03-02 21:48:00 +0100 |
commit | 6f5b89a07c90ebaa7caf744927f977d78d366326 (patch) | |
tree | bea887cff59c2d381131d70d3057bb14e882ed6e /linux-user/syscall.c | |
parent | Fix wrong interrupt number for the second serial interface. (diff) | |
download | qemu-6f5b89a07c90ebaa7caf744927f977d78d366326.tar.gz qemu-6f5b89a07c90ebaa7caf744927f977d78d366326.tar.xz qemu-6f5b89a07c90ebaa7caf744927f977d78d366326.zip |
MIPS Userland TLS register emulation, by Daniel Jacobowitz.
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2465 c046a42c-6fe2-441c-8c8c-71466251a162
Diffstat (limited to 'linux-user/syscall.c')
-rw-r--r-- | linux-user/syscall.c | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/linux-user/syscall.c b/linux-user/syscall.c index 76b36524a1..acd098d87c 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -165,6 +165,9 @@ _syscall3(int,sys_syslog,int,type,char*,bufp,int,len) #ifdef __NR_exit_group _syscall1(int,exit_group,int,error_code) #endif +#if defined(TARGET_NR_set_tid_address) && defined(__NR_set_tid_address) +_syscall1(int,set_tid_address,int *,tidptr) +#endif extern int personality(int); extern int flock(int, int); @@ -3968,6 +3971,15 @@ long do_syscall(void *cpu_env, int num, long arg1, long arg2, long arg3, #endif #ifdef TARGET_NR_set_thread_area case TARGET_NR_set_thread_area: +#ifdef TARGET_MIPS + ((CPUMIPSState *) cpu_env)->tls_value = arg1; + ret = 0; + break; +#else + goto unimplemented_nowarn; +#endif +#endif +#ifdef TARGET_NR_get_thread_area case TARGET_NR_get_thread_area: goto unimplemented_nowarn; #endif @@ -3975,10 +3987,17 @@ long do_syscall(void *cpu_env, int num, long arg1, long arg2, long arg3, case TARGET_NR_getdomainname: goto unimplemented_nowarn; #endif + +#if defined(TARGET_NR_set_tid_address) && defined(__NR_set_tid_address) + case TARGET_NR_set_tid_address: + ret = get_errno(set_tid_address((int *) arg1)); + break; +#endif + default: unimplemented: gemu_log("qemu: Unsupported syscall: %d\n", num); -#if defined(TARGET_NR_setxattr) || defined(TARGET_NR_set_thread_area) || defined(TARGET_NR_getdomainname) +#if defined(TARGET_NR_setxattr) || defined(TARGET_NR_get_thread_area) || defined(TARGET_NR_getdomainname) unimplemented_nowarn: #endif ret = -ENOSYS; |