Instead of always returning 0, return actual starttime. Signed-off-by: Cameron Esfahani <di...@apple.com> --- linux-user/syscall.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+)
diff --git a/linux-user/syscall.c b/linux-user/syscall.c index 5950222a77..59265ab986 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -8107,6 +8107,34 @@ static int open_self_stat(void *cpu_env, int fd) } else if (i == 3) { /* ppid */ g_string_printf(buf, FMT_pid " ", getppid()); + } else if (i == 21) { + /* starttime */ + FILE *fp = NULL; + char *line = NULL; + char *skipped_comm = NULL; + size_t n = 0; + unsigned long long starttime = 0; + + fp = fopen("/proc/self/stat", "r"); + if (fp) { + if (getdelim(&line, &n, '\0', fp) != -1) { + /* Find end of comm field */ + skipped_comm = strrchr(line, ')'); + if (skipped_comm != NULL) { + /* Skip over parenthesis and space */ + skipped_comm += 2; + /* Scan starttime (field 20 after pid and comm) */ + (void) sscanf(skipped_comm, "%*c %*d %*d %*d %*d %*d " + "%*u %*u %*u %*u %*u %*u %*u %*d " + "%*d %*d %*d %*d %*d %llu", + &starttime); + } + free(line); + } + fclose(fp); + } + + g_string_printf(buf, "%llu ", starttime); } else if (i == 27) { /* stack bottom */ g_string_printf(buf, TARGET_ABI_FMT_ld " ", ts->info->start_stack); -- 2.32.0 (Apple Git-131)