[PATCH] linux-user/strace: show TID instead of PID

J. Neuschäfer posted 1 patch 1 month ago
linux-user/strace.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
[PATCH] linux-user/strace: show TID instead of PID
Posted by J. Neuschäfer 1 month ago
This aligns with strace, and is very useful when tracing multi-threaded
programs. The result is the same in single-threaded programs.

gettid() requires the _GNU_SOURCE feature test macro, so it might be
unavailable in rare cases. I don't expect it to be a problem though,
because it's implemented by both glibc and musl.

Signed-off-by: J. Neuschäfer <j.neuschaefer@gmx.net>
---
 linux-user/strace.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/linux-user/strace.c b/linux-user/strace.c
index c3eb3a2706a93fdcaf693b3413b13921a3c97e8e..93e8c73de8a4a307e6e0df5555bee4c769e41e64 100644
--- a/linux-user/strace.c
+++ b/linux-user/strace.c
@@ -4337,7 +4337,7 @@ print_syscall(CPUArchState *cpu_env, int num,
     if (!f) {
         return;
     }
-    fprintf(f, "%d ", getpid());
+    fprintf(f, "%d ", gettid());

     for (i = 0; i < nsyscalls; i++) {
         if (scnames[i].nr == num) {

---
base-commit: 6f625ce2f21d6a1243065d236298277c56f972d5
change-id: 20241024-strace-a52bd8e3d305

Best regards,
--
J. Neuschäfer <j.neuschaefer@gmx.net>
Re: [PATCH] linux-user/strace: show TID instead of PID
Posted by Richard Henderson 1 week, 5 days ago
On 10/23/24 16:47, J. Neuschäfer wrote:
> This aligns with strace, and is very useful when tracing multi-threaded
> programs. The result is the same in single-threaded programs.

See also "-D log.%d -d tid -strace" which will split the output into per-tid files.

> 
> gettid() requires the _GNU_SOURCE feature test macro, so it might be
> unavailable in rare cases. I don't expect it to be a problem though,
> because it's implemented by both glibc and musl.
> 
> Signed-off-by: J. Neuschäfer <j.neuschaefer@gmx.net>
> ---
>   linux-user/strace.c | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/linux-user/strace.c b/linux-user/strace.c
> index c3eb3a2706a93fdcaf693b3413b13921a3c97e8e..93e8c73de8a4a307e6e0df5555bee4c769e41e64 100644
> --- a/linux-user/strace.c
> +++ b/linux-user/strace.c
> @@ -4337,7 +4337,7 @@ print_syscall(CPUArchState *cpu_env, int num,
>       if (!f) {
>           return;
>       }
> -    fprintf(f, "%d ", getpid());
> +    fprintf(f, "%d ", gettid());

Probably better as qemu_get_thread_id(), but otherwise

Reviewed-by: Richard Henderson <richard.henderson@linaro.org>


r~

Re: [PATCH] linux-user/strace: show TID instead of PID
Posted by Richard Henderson 1 week, 5 days ago
On 11/11/24 06:59, Richard Henderson wrote:
> On 10/23/24 16:47, J. Neuschäfer wrote:
>> This aligns with strace, and is very useful when tracing multi-threaded
>> programs. The result is the same in single-threaded programs.
> 
> See also "-D log.%d -d tid -strace" which will split the output into per-tid files.
> 
>>
>> gettid() requires the _GNU_SOURCE feature test macro, so it might be
>> unavailable in rare cases. I don't expect it to be a problem though,
>> because it's implemented by both glibc and musl.
>>
>> Signed-off-by: J. Neuschäfer <j.neuschaefer@gmx.net>
>> ---
>>   linux-user/strace.c | 2 +-
>>   1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/linux-user/strace.c b/linux-user/strace.c
>> index c3eb3a2706a93fdcaf693b3413b13921a3c97e8e..93e8c73de8a4a307e6e0df5555bee4c769e41e64 
>> 100644
>> --- a/linux-user/strace.c
>> +++ b/linux-user/strace.c
>> @@ -4337,7 +4337,7 @@ print_syscall(CPUArchState *cpu_env, int num,
>>       if (!f) {
>>           return;
>>       }
>> -    fprintf(f, "%d ", getpid());
>> +    fprintf(f, "%d ", gettid());
> 
> Probably better as qemu_get_thread_id(), but otherwise

Or, without the syscall,

   get_task_state(env_cpu(env))->ts_tid


r~

Re: [PATCH] linux-user/strace: show TID instead of PID
Posted by Richard Henderson 2 days, 20 hours ago
On 11/11/24 09:02, Richard Henderson wrote:
> On 11/11/24 06:59, Richard Henderson wrote:
>> On 10/23/24 16:47, J. Neuschäfer wrote:
>>> This aligns with strace, and is very useful when tracing multi-threaded
>>> programs. The result is the same in single-threaded programs.
>>
>> See also "-D log.%d -d tid -strace" which will split the output into per-tid files.
>>
>>>
>>> gettid() requires the _GNU_SOURCE feature test macro, so it might be
>>> unavailable in rare cases. I don't expect it to be a problem though,
>>> because it's implemented by both glibc and musl.
>>>
>>> Signed-off-by: J. Neuschäfer <j.neuschaefer@gmx.net>
>>> ---
>>>   linux-user/strace.c | 2 +-
>>>   1 file changed, 1 insertion(+), 1 deletion(-)
>>>
>>> diff --git a/linux-user/strace.c b/linux-user/strace.c
>>> index 
>>> c3eb3a2706a93fdcaf693b3413b13921a3c97e8e..93e8c73de8a4a307e6e0df5555bee4c769e41e64 100644
>>> --- a/linux-user/strace.c
>>> +++ b/linux-user/strace.c
>>> @@ -4337,7 +4337,7 @@ print_syscall(CPUArchState *cpu_env, int num,
>>>       if (!f) {
>>>           return;
>>>       }
>>> -    fprintf(f, "%d ", getpid());
>>> +    fprintf(f, "%d ", gettid());
>>
>> Probably better as qemu_get_thread_id(), but otherwise
> 
> Or, without the syscall,
> 
>    get_task_state(env_cpu(env))->ts_tid

Queued with this change.


r~

Re: [PATCH] linux-user/strace: show TID instead of PID
Posted by J. Neuschäfer 1 week, 6 days ago
On Thu, Oct 24, 2024 at 01:47:31AM +0200, J. Neuschäfer wrote:
> This aligns with strace, and is very useful when tracing multi-threaded
> programs. The result is the same in single-threaded programs.
>
> gettid() requires the _GNU_SOURCE feature test macro, so it might be
> unavailable in rare cases. I don't expect it to be a problem though,
> because it's implemented by both glibc and musl.
>
> Signed-off-by: J. Neuschäfer <j.neuschaefer@gmx.net>
> ---

Ping!  Any opinions on this patch?

Best regards,
J. Neuschäfer

>  linux-user/strace.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/linux-user/strace.c b/linux-user/strace.c
> index c3eb3a2706a93fdcaf693b3413b13921a3c97e8e..93e8c73de8a4a307e6e0df5555bee4c769e41e64 100644
> --- a/linux-user/strace.c
> +++ b/linux-user/strace.c
> @@ -4337,7 +4337,7 @@ print_syscall(CPUArchState *cpu_env, int num,
>      if (!f) {
>          return;
>      }
> -    fprintf(f, "%d ", getpid());
> +    fprintf(f, "%d ", gettid());
>
>      for (i = 0; i < nsyscalls; i++) {
>          if (scnames[i].nr == num) {
>
> ---
> base-commit: 6f625ce2f21d6a1243065d236298277c56f972d5
> change-id: 20241024-strace-a52bd8e3d305
>
> Best regards,
> --
> J. Neuschäfer <j.neuschaefer@gmx.net>
>
>