--- /dev/null
+#include "defs.h"
+
+static void
+printargv(struct tcb *tcp, long addr)
+{
+ union {
+ unsigned int p32;
+ unsigned long p64;
+ char data[sizeof(long)];
+ } cp;
+ const char *sep;
+ unsigned int n = 0;
+ unsigned wordsize = current_wordsize;
+
+ cp.p64 = 1;
+ for (sep = ""; !abbrev(tcp) || n < max_strlen / 2; sep = ", ", ++n) {
+ if (umoven(tcp, addr, wordsize, cp.data) < 0) {
+ tprintf("%#lx", addr);
+ return;
+ }
+ if (wordsize == 4)
+ cp.p64 = cp.p32;
+ if (cp.p64 == 0)
+ break;
+ tprints(sep);
+ printstr(tcp, cp.p64, -1);
+ addr += wordsize;
+ }
+ if (cp.p64)
+ tprintf("%s...", sep);
+}
+
+static void
+printargc(const char *fmt, struct tcb *tcp, long addr)
+{
+ int count;
+ char *cp;
+
+ for (count = 0; umove(tcp, addr, &cp) >= 0 && cp != NULL; count++) {
+ addr += sizeof(char *);
+ }
+ tprintf(fmt, count, count == 1 ? "" : "s");
+}
+
+int
+sys_execve(struct tcb *tcp)
+{
+ if (entering(tcp)) {
+ printpath(tcp, tcp->u_arg[0]);
+ if (!verbose(tcp))
+ tprintf(", %#lx", tcp->u_arg[1]);
+ else {
+ tprints(", [");
+ printargv(tcp, tcp->u_arg[1]);
+ tprints("]");
+ }
+ if (!verbose(tcp))
+ tprintf(", %#lx", tcp->u_arg[2]);
+ else if (abbrev(tcp))
+ printargc(", [/* %d var%s */]", tcp, tcp->u_arg[2]);
+ else {
+ tprints(", [");
+ printargv(tcp, tcp->u_arg[2]);
+ tprints("]");
+ }
+ }
+ return 0;
+}
+
+#if defined(SPARC) || defined(SPARC64)
+int
+sys_execv(struct tcb *tcp)
+{
+ if (entering(tcp)) {
+ printpath(tcp, tcp->u_arg[0]);
+ if (!verbose(tcp))
+ tprintf(", %#lx", tcp->u_arg[1]);
+ else {
+ tprints(", [");
+ printargv(tcp, tcp->u_arg[1]);
+ tprints("]");
+ }
+ }
+ return 0;
+}
+#endif /* SPARC || SPARC64 */
return 0;
}
-static void
-printargv(struct tcb *tcp, long addr)
-{
- union {
- unsigned int p32;
- unsigned long p64;
- char data[sizeof(long)];
- } cp;
- const char *sep;
- unsigned int n = 0;
- unsigned wordsize = current_wordsize;
-
- cp.p64 = 1;
- for (sep = ""; !abbrev(tcp) || n < max_strlen / 2; sep = ", ", ++n) {
- if (umoven(tcp, addr, wordsize, cp.data) < 0) {
- tprintf("%#lx", addr);
- return;
- }
- if (wordsize == 4)
- cp.p64 = cp.p32;
- if (cp.p64 == 0)
- break;
- tprints(sep);
- printstr(tcp, cp.p64, -1);
- addr += wordsize;
- }
- if (cp.p64)
- tprintf("%s...", sep);
-}
-
-static void
-printargc(const char *fmt, struct tcb *tcp, long addr)
-{
- int count;
- char *cp;
-
- for (count = 0; umove(tcp, addr, &cp) >= 0 && cp != NULL; count++) {
- addr += sizeof(char *);
- }
- tprintf(fmt, count, count == 1 ? "" : "s");
-}
-
-#if defined(SPARC) || defined(SPARC64)
-int
-sys_execv(struct tcb *tcp)
-{
- if (entering(tcp)) {
- printpath(tcp, tcp->u_arg[0]);
- if (!verbose(tcp))
- tprintf(", %#lx", tcp->u_arg[1]);
- else {
- tprints(", [");
- printargv(tcp, tcp->u_arg[1]);
- tprints("]");
- }
- }
- return 0;
-}
-#endif
-
-int
-sys_execve(struct tcb *tcp)
-{
- if (entering(tcp)) {
- printpath(tcp, tcp->u_arg[0]);
- if (!verbose(tcp))
- tprintf(", %#lx", tcp->u_arg[1]);
- else {
- tprints(", [");
- printargv(tcp, tcp->u_arg[1]);
- tprints("]");
- }
- if (!verbose(tcp))
- tprintf(", %#lx", tcp->u_arg[2]);
- else if (abbrev(tcp))
- printargc(", [/* %d var%s */]", tcp, tcp->u_arg[2]);
- else {
- tprints(", [");
- printargv(tcp, tcp->u_arg[2]);
- tprints("]");
- }
- }
- return 0;
-}
-
#include "xlat/ptrace_cmds.h"
#include "xlat/ptrace_setoptions_flags.h"
#include "xlat/nt_descriptor_types.h"