Revision 6f5b89a0
b/linux-user/main.c | ||
---|---|---|
1297 | 1297 |
MIPS_SYS(sys_add_key , 5) |
1298 | 1298 |
MIPS_SYS(sys_request_key , 4) |
1299 | 1299 |
MIPS_SYS(sys_keyctl , 5) |
1300 |
MIPS_SYS(sys_set_thread_area, 1) |
|
1300 | 1301 |
}; |
1301 | 1302 |
|
1302 | 1303 |
#undef MIPS_SYS |
b/linux-user/mips/syscall_nr.h | ||
---|---|---|
285 | 285 |
#define TARGET_NR_add_key (TARGET_NR_Linux + 280) |
286 | 286 |
#define TARGET_NR_request_key (TARGET_NR_Linux + 281) |
287 | 287 |
#define TARGET_NR_keyctl (TARGET_NR_Linux + 282) |
288 |
|
|
288 |
#define TARGET_NR_set_thread_area (TARGET_NR_Linux + 283) |
b/linux-user/syscall.c | ||
---|---|---|
165 | 165 |
#ifdef __NR_exit_group |
166 | 166 |
_syscall1(int,exit_group,int,error_code) |
167 | 167 |
#endif |
168 |
#if defined(TARGET_NR_set_tid_address) && defined(__NR_set_tid_address) |
|
169 |
_syscall1(int,set_tid_address,int *,tidptr) |
|
170 |
#endif |
|
168 | 171 |
|
169 | 172 |
extern int personality(int); |
170 | 173 |
extern int flock(int, int); |
... | ... | |
3968 | 3971 |
#endif |
3969 | 3972 |
#ifdef TARGET_NR_set_thread_area |
3970 | 3973 |
case TARGET_NR_set_thread_area: |
3974 |
#ifdef TARGET_MIPS |
|
3975 |
((CPUMIPSState *) cpu_env)->tls_value = arg1; |
|
3976 |
ret = 0; |
|
3977 |
break; |
|
3978 |
#else |
|
3979 |
goto unimplemented_nowarn; |
|
3980 |
#endif |
|
3981 |
#endif |
|
3982 |
#ifdef TARGET_NR_get_thread_area |
|
3971 | 3983 |
case TARGET_NR_get_thread_area: |
3972 | 3984 |
goto unimplemented_nowarn; |
3973 | 3985 |
#endif |
... | ... | |
3975 | 3987 |
case TARGET_NR_getdomainname: |
3976 | 3988 |
goto unimplemented_nowarn; |
3977 | 3989 |
#endif |
3990 |
|
|
3991 |
#if defined(TARGET_NR_set_tid_address) && defined(__NR_set_tid_address) |
|
3992 |
case TARGET_NR_set_tid_address: |
|
3993 |
ret = get_errno(set_tid_address((int *) arg1)); |
|
3994 |
break; |
|
3995 |
#endif |
|
3996 |
|
|
3978 | 3997 |
default: |
3979 | 3998 |
unimplemented: |
3980 | 3999 |
gemu_log("qemu: Unsupported syscall: %d\n", num); |
3981 |
#if defined(TARGET_NR_setxattr) || defined(TARGET_NR_set_thread_area) || defined(TARGET_NR_getdomainname)
|
|
4000 |
#if defined(TARGET_NR_setxattr) || defined(TARGET_NR_get_thread_area) || defined(TARGET_NR_getdomainname)
|
|
3982 | 4001 |
unimplemented_nowarn: |
3983 | 4002 |
#endif |
3984 | 4003 |
ret = -ENOSYS; |
b/target-mips/cpu.h | ||
---|---|---|
268 | 268 |
int SYNCI_Step; /* Address step size for SYNCI */ |
269 | 269 |
int CCRes; /* Cycle count resolution/divisor */ |
270 | 270 |
|
271 |
#if defined(CONFIG_USER_ONLY) |
|
272 |
target_ulong tls_value; |
|
273 |
#endif |
|
274 |
|
|
271 | 275 |
CPU_COMMON |
272 | 276 |
|
273 | 277 |
int ram_size; |
b/target-mips/op.c | ||
---|---|---|
2021 | 2021 |
#endif |
2022 | 2022 |
|
2023 | 2023 |
/* Specials */ |
2024 |
#if defined (CONFIG_USER_ONLY) |
|
2025 |
void op_tls_value (void) |
|
2026 |
{ |
|
2027 |
T0 = env->tls_value; |
|
2028 |
} |
|
2029 |
#endif |
|
2030 |
|
|
2024 | 2031 |
void op_pmon (void) |
2025 | 2032 |
{ |
2026 | 2033 |
CALL_FROM_TB1(do_pmon, PARAM1); |
b/target-mips/translate.c | ||
---|---|---|
4728 | 4728 |
case 3: |
4729 | 4729 |
gen_op_rdhwr_ccres(); |
4730 | 4730 |
break; |
4731 |
#if defined (CONFIG_USER_ONLY) |
|
4732 |
case 29: |
|
4733 |
gen_op_tls_value (); |
|
4734 |
GEN_STORE_TN_REG(rt, T0); |
|
4735 |
break; |
|
4736 |
#endif |
|
4731 | 4737 |
default: /* Invalid */ |
4732 | 4738 |
MIPS_INVAL("rdhwr"); |
4733 | 4739 |
generate_exception(ctx, EXCP_RI); |
Also available in: Unified diff