linux-user: Enable NPTL for m68k

For m68k, per-thread data is a purely kernel construct with no
CPU level support. Implement it via a field in the TaskState structure,
used by cpu_set_tls() and the set_thread_area/get_thread_area
syscalls. This allows us to enable compilation with NPTL.

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by:  Laurent Vivier <laurent@vivier.eu>
Signed-off-by: Riku Voipio <riku.voipio@linaro.org>
This commit is contained in:
Peter Maydell 2013-07-16 18:44:55 +01:00 committed by Riku Voipio
parent f5147c93d0
commit 1ccd9374af
4 changed files with 18 additions and 2 deletions

1
configure vendored
View File

@ -4210,7 +4210,6 @@ case "$target_name" in
m68k)
bflt="yes"
gdb_xml_files="cf-core.xml cf-fp.xml"
target_nptl="no"
;;
microblaze|microblazeel)
TARGET_ARCH=microblaze

View File

@ -29,6 +29,10 @@ static inline void cpu_clone_regs(CPUM68KState *env, target_ulong newsp)
env->dregs[0] = 0;
}
/* TODO: need to implement cpu_set_tls() */
static inline void cpu_set_tls(CPUM68KState *env, target_ulong newtls)
{
TaskState *ts = env->opaque;
ts->tp_value = newtls;
}
#endif

View File

@ -121,6 +121,7 @@ typedef struct TaskState {
#endif
#ifdef TARGET_M68K
int sim_syscalls;
abi_ulong tp_value;
#endif
#if defined(TARGET_ARM) || defined(TARGET_M68K) || defined(TARGET_UNICORE32)
/* Extra fields for semihosted binaries. */

View File

@ -8558,6 +8558,12 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
#elif defined(TARGET_I386) && defined(TARGET_ABI32)
ret = do_set_thread_area(cpu_env, arg1);
break;
#elif defined(TARGET_M68K)
{
TaskState *ts = ((CPUArchState *)cpu_env)->opaque;
ts->tp_value = arg1;
break;
}
#else
goto unimplemented_nowarn;
#endif
@ -8566,6 +8572,12 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
case TARGET_NR_get_thread_area:
#if defined(TARGET_I386) && defined(TARGET_ABI32)
ret = do_get_thread_area(cpu_env, arg1);
#elif defined(TARGET_M68K)
{
TaskState *ts = ((CPUArchState *)cpu_env)->opaque;
ret = ts->tp_value;
break;
}
#else
goto unimplemented_nowarn;
#endif