Message ID | YpH+2sw1PCRqx/te@p100 (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [v3] linux-user: Adjust child_tidptr on set_tid_address() syscall | expand |
Le 28/05/2022 à 12:52, Helge Deller a écrit : > Keep track of the new child tidptr given by a set_tid_address() syscall. > > Do not call the host set_tid_address() syscall because we are emulating > the behaviour of writing to child_tidptr in the exit() path. > > Signed-off-by: Helge Deller<deller@gmx.de> > Reviewed-by: Richard Henderson <richard.henderson@linaro.org> > > -- > v3: > - Respin of the patch because the v2 version was mungled in-between the > mail of the v1 version. Now it's possible to get correct patch with b4 > - Rephrased commit message > - Added Richard's Reviewed-by > v2: > - was mungled in v1 mail thread > > diff --git a/linux-user/syscall.c b/linux-user/syscall.c > index f55cdebee5..1166e9f014 100644 > --- a/linux-user/syscall.c > +++ b/linux-user/syscall.c > @@ -320,9 +320,6 @@ _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 > #if defined(__NR_futex) > _syscall6(int,sys_futex,int *,uaddr,int,op,int,val, > const struct timespec *,timeout,int *,uaddr2,int,val3) > @@ -12200,9 +12197,14 @@ static abi_long do_syscall1(CPUArchState *cpu_env, int num, abi_long arg1, > } > #endif > > -#if defined(TARGET_NR_set_tid_address) && defined(__NR_set_tid_address) > +#if defined(TARGET_NR_set_tid_address) > case TARGET_NR_set_tid_address: > - return get_errno(set_tid_address((int *)g2h(cpu, arg1))); > + { > + TaskState *ts = cpu->opaque; > + ts->child_tidptr = arg1; > + /* do not call host set_tid_address() syscall, instead return tid() */ > + return get_errno(sys_gettid()); > + } > #endif > > case TARGET_NR_tkill: > Reviewed-by: Laurent Vivier <laurent@vivier.eu>
Le 28/05/2022 à 12:52, Helge Deller a écrit : > Keep track of the new child tidptr given by a set_tid_address() syscall. > > Do not call the host set_tid_address() syscall because we are emulating > the behaviour of writing to child_tidptr in the exit() path. > > Signed-off-by: Helge Deller<deller@gmx.de> > Reviewed-by: Richard Henderson <richard.henderson@linaro.org> > > -- > v3: > - Respin of the patch because the v2 version was mungled in-between the > mail of the v1 version. Now it's possible to get correct patch with b4 > - Rephrased commit message > - Added Richard's Reviewed-by > v2: > - was mungled in v1 mail thread > > diff --git a/linux-user/syscall.c b/linux-user/syscall.c > index f55cdebee5..1166e9f014 100644 > --- a/linux-user/syscall.c > +++ b/linux-user/syscall.c > @@ -320,9 +320,6 @@ _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 > #if defined(__NR_futex) > _syscall6(int,sys_futex,int *,uaddr,int,op,int,val, > const struct timespec *,timeout,int *,uaddr2,int,val3) > @@ -12200,9 +12197,14 @@ static abi_long do_syscall1(CPUArchState *cpu_env, int num, abi_long arg1, > } > #endif > > -#if defined(TARGET_NR_set_tid_address) && defined(__NR_set_tid_address) > +#if defined(TARGET_NR_set_tid_address) > case TARGET_NR_set_tid_address: > - return get_errno(set_tid_address((int *)g2h(cpu, arg1))); > + { > + TaskState *ts = cpu->opaque; > + ts->child_tidptr = arg1; > + /* do not call host set_tid_address() syscall, instead return tid() */ > + return get_errno(sys_gettid()); > + } > #endif > > case TARGET_NR_tkill: > Applied to my linux-user-for-7.1 branch. Thanks, Laurent
diff --git a/linux-user/syscall.c b/linux-user/syscall.c index f55cdebee5..1166e9f014 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -320,9 +320,6 @@ _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 #if defined(__NR_futex) _syscall6(int,sys_futex,int *,uaddr,int,op,int,val, const struct timespec *,timeout,int *,uaddr2,int,val3) @@ -12200,9 +12197,14 @@ static abi_long do_syscall1(CPUArchState *cpu_env, int num, abi_long arg1, } #endif -#if defined(TARGET_NR_set_tid_address) && defined(__NR_set_tid_address) +#if defined(TARGET_NR_set_tid_address) case TARGET_NR_set_tid_address: - return get_errno(set_tid_address((int *)g2h(cpu, arg1))); + { + TaskState *ts = cpu->opaque; + ts->child_tidptr = arg1; + /* do not call host set_tid_address() syscall, instead return tid() */ + return get_errno(sys_gettid()); + } #endif case TARGET_NR_tkill: