On 10/5/24 10:57, Richard Henderson wrote:
On 10/1/24 12:32, Ilya Leoshkevich wrote:
Borrow the code for formatting the most frequent WIFEXITED() and
WIFSIGNALED() special cases from from the strace's printstatus().

Output examples:

     474729 wait4(-1,0x7f00767ff0a0,0,(nil)) = 474733 (wstatus={WIFEXITED(s) && WEXITSTATUS(s) == 1})      475833 wait4(-1,0x7f7de61ff0a0,0,(nil)) = 475837 (wstatus={WIFSIGNALED(s) && WTERMSIG(s) == SIGKILL})      1168 waitpid(1171,0x7f44eea00340,0) = 1171 (wstatus={WIFSIGNALED(s) && WTERMSIG(s) == SIGKILL})

Signed-off-by: Ilya Leoshkevich <i...@linux.ibm.com>
---
  linux-user/strace.c    | 61 ++++++++++++++++++++++++++++++++++++++++++
  linux-user/strace.list |  6 +++--
  2 files changed, 65 insertions(+), 2 deletions(-)

diff --git a/linux-user/strace.c b/linux-user/strace.c
index b4d1098170e..d5d1f18304d 100644
--- a/linux-user/strace.c
+++ b/linux-user/strace.c
@@ -4168,6 +4168,67 @@ print_ioctl(CPUArchState *cpu_env, const struct 
syscallname *name,
  }
  #endif
+#if defined(TARGET_NR_wait4) || defined(TARGET_NR_waitpid)
+static void print_wstatus(int wstatus)
+{
+    if (WIFSIGNALED(wstatus)) {
+        qemu_log("{WIFSIGNALED(s) && WTERMSIG(s) == ");
+        print_signal(WTERMSIG(wstatus), 1);
+        if (WCOREDUMP(wstatus)) {
+            qemu_log(" && WCOREDUMP(s)");
+        }
+        qemu_log("}");
+    } else if (WIFEXITED(wstatus)) {
+        qemu_log("{WIFEXITED(s) && WEXITSTATUS(s) == %d}",
+                 WEXITSTATUS(wstatus));
+    } else {
+        print_number(wstatus, 1);
+    }
+}
+
+static void print_ret_wstatus(abi_long ret, abi_long wstatus_addr)
+{
+    if (!print_syscall_err(ret)) {
+        qemu_log(TARGET_ABI_FMT_ld " (wstatus=", ret);
+        if (wstatus_addr == 0) {
+            qemu_log("NULL");

I think you could merge the == 0 check into the outer IF, and avoid printing the returned wstatus entirely.

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

Adjusted and queued.

r~

Reply via email to