[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH] linux-user: Implement starttime field in self stat emulation
From: |
Cameron Esfahani |
Subject: |
[PATCH] linux-user: Implement starttime field in self stat emulation |
Date: |
Mon, 24 Jan 2022 18:47:12 -0800 |
Instead of always returning 0, return actual starttime.
Signed-off-by: Cameron Esfahani <dirty@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)
- [PATCH] linux-user: Implement starttime field in self stat emulation,
Cameron Esfahani <=