summaryrefslogtreecommitdiffstats
path: root/tools/guest-diag/ioctl_trace.c
diff options
context:
space:
mode:
Diffstat (limited to 'tools/guest-diag/ioctl_trace.c')
-rw-r--r--tools/guest-diag/ioctl_trace.c35
1 files changed, 25 insertions, 10 deletions
diff --git a/tools/guest-diag/ioctl_trace.c b/tools/guest-diag/ioctl_trace.c
index fd1802a..04fea05 100644
--- a/tools/guest-diag/ioctl_trace.c
+++ b/tools/guest-diag/ioctl_trace.c
@@ -38,17 +38,29 @@ static int read_child(pid_t pid, unsigned long addr, void *buf, size_t len)
return 0;
}
-static void dump_alloc(pid_t pid, unsigned long arg)
+static void dump_alloc(pid_t pid, unsigned long arg, unsigned int size)
{
unsigned int v[12];
+ unsigned int st;
if (read_child(pid, arg, v, sizeof(v)))
return;
- /* NVOS21_PARAMETERS: hRoot, hObjectParent, hObjectNew, hClass,
- * pAllocParms, pRightsRequested, paramsSize, flags, status */
+ /* NVOS21_PARAMETERS (0x20): ... paramsSize@0x14, status@0x10
+ * NVOS64_PARAMETERS (0x30): ... status@0x28 */
+ st = (size == 0x30) ? v[10] : v[4];
fprintf(stderr,
- "[iot] alloc root=0x%x parent=0x%x new=0x%x class=0x%x params=%u flags=0x%x\n",
- v[0], v[1], v[2], v[3], v[6], v[7]);
+ "[iot] alloc root=0x%x parent=0x%x new=0x%x class=0x%x st=0x%x\n",
+ v[0], v[1], v[2], v[3], st);
+}
+
+static void dump_free(pid_t pid, unsigned long arg)
+{
+ unsigned int v[4];
+
+ if (read_child(pid, arg, v, sizeof(v)))
+ return;
+ /* NVOS00_PARAMETERS: hRoot, hObjectParent, hObjectOld, status */
+ fprintf(stderr, "[iot] free old=0x%x st=0x%x\n", v[2], v[3]);
}
static void dump_control(pid_t pid, unsigned long arg)
@@ -59,12 +71,13 @@ static void dump_control(pid_t pid, unsigned long arg)
if (read_child(pid, arg, v, sizeof(v)))
return;
- /* NVOS54_PARAMETERS: hClient, hObject, cmd, flags, params, paramsSize, ... */
+ /* NVOS54_PARAMETERS: hClient, hObject, cmd, flags, params, paramsSize,
+ * status@0x1c */
cmd = v[2];
memcpy(&pParams, &v[4], sizeof(pParams));
fprintf(stderr,
- "[iot] control client=0x%x object=0x%x cmd=0x%x params=0x%llx size=%u\n",
- v[0], v[1], cmd, pParams, v[5]);
+ "[iot] control client=0x%x object=0x%x cmd=0x%x params=0x%llx size=%u st=0x%x\n",
+ v[0], v[1], cmd, pParams, v[5], v[7]);
}
int main(int argc, char **argv)
@@ -148,8 +161,10 @@ int main(int argc, char **argv)
fprintf(stderr,
"[iot] req=0x%llx arg=0x%llx ret=0x%llx\n",
req, a2, ret);
- if (req == 0xc030462bULL)
- dump_alloc(pid, a2);
+ if ((req & 0xff) == 0x2b)
+ dump_alloc(pid, a2, (req >> 16) & 0x3fff);
+ else if ((req & 0xff) == 0x29)
+ dump_free(pid, a2);
else if ((req & 0xff) == 0x2a)
dump_control(pid, a2);
}