On 13 July 2013 11:28, Laurent Vivier <[email protected]> wrote:
> Le 12/07/2013 22:12, Peter Maydell a écrit :
>> --- a/linux-user/syscall.c
>> +++ b/linux-user/syscall.c
>> @@ -8558,6 +8558,11 @@ 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;
>> + }
>
> Seems a "break" is missing here ?
Yes.
>> #else
>> goto unimplemented_nowarn;
>> #endif
>> @@ -8566,6 +8571,11 @@ 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;
>> + ts->tp_value = arg1;
>
> perhaps "ret = ts->tp_value;" ?
Yes, silly cut-n-paste mistake. As I say I couldn't
test m68k.
Also I notice that both this and the existing i386
case are missing the 'break' and will fall through
to the next syscall.
thanks
-- PMM