diff mbox series

linux-user/strace: show TID instead of PID

Message ID 20241024-strace-v1-1-56c4161431cd@gmx.net (mailing list archive)
State New
Headers show
Series linux-user/strace: show TID instead of PID | expand

Commit Message

J. Neuschäfer Oct. 23, 2024, 11:47 p.m. UTC
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(-)


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

Best regards,
--
J. Neuschäfer <j.neuschaefer@gmx.net>

Comments

J. Neuschäfer Nov. 10, 2024, 2:10 p.m. UTC | #1
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>
>
>
Richard Henderson Nov. 11, 2024, 2:59 p.m. UTC | #2
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~
Richard Henderson Nov. 11, 2024, 3:02 p.m. UTC | #3
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~
diff mbox series

Patch

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) {