Android-specific prctl
enh
enh at google.com
Sat Jul 25 04:17:59 UTC 2015
Android kernels have an extra prctl that lets us set a name for an
anonymous VMA, which is useful for debugging. at the moment strace
shows it like this:
prctl(0x53564d41 /* PR_??? */, 0, 0x7f7ab0e000, 0x2000, 0x7f7aaf76d0) = 0
prctl(0x53564d41 /* PR_??? */, 0, 0x7f7ab0d000, 0x1000, 0x7f7aaf76e8) = 0
with this patch:
diff --git a/prctl.c b/prctl.c
index 4a6bd25..e43569c 100644
--- a/prctl.c
+++ b/prctl.c
@@ -94,6 +94,22 @@ prctl_enter(struct tcb *tcp)
printstr(tcp, tcp->u_arg[1], TASK_COMM_LEN);
break;
+#define PR_SET_VMA 0x53564d41
+#define PR_SET_VMA_ANON_NAME 0
+ case PR_SET_VMA:
+ if (tcp->u_arg[1] == PR_SET_VMA_ANON_NAME) {
+ tprintf(", %lu", tcp->u_arg[1]);
+ tprintf(", %#lx", tcp->u_arg[2]);
+ tprintf(", %lu, ", tcp->u_arg[3]);
+ printstr(tcp, tcp->u_arg[4], -1);
+ } else {
+ // There are no other sub-options now, but there
+ // might be in future...
+ for (i = 1; i < tcp->s_ent->nargs; i++)
+ tprintf(", %#lx", tcp->u_arg[i]);
+ }
+ break;
+
case PR_SET_MM:
tprints(", ");
printxval(pr_set_mm, tcp->u_arg[1], "PR_SET_MM_???");
we get this instead:
prctl(0x53564d41 /* PR_??? */, 0, 0x7f7ffe0000, 8192, "thread signal stack") = 0
prctl(0x53564d41 /* PR_??? */, 0, 0x7f7ffdf000, 4096, "thread signal
stack guard page") = 0
obviously i could change the xlat prctl_options.in file to add
PR_SET_VMA, but this isn't in upstream kernels so that seems wrong.
i can easily keep the patch above and/or the one that touches the xlat
file in our tree, but i thought i'd ask what -- if anything -- of this
you'd be interested in having in upstream strace.
--
Elliott Hughes - http://who/enh - http://jessies.org/~enh/
Android native code/tools questions? Mail me/drop by/add me as a reviewer.
More information about the Strace-devel
mailing list