|
@@ -47,33 +47,33 @@
|
|
|
#include <linux/in6.h>
|
|
|
#include <linux/un.h>
|
|
|
|
|
|
-static void parse_open_flags (va_list *);
|
|
|
-static void parse_open_mode (va_list *);
|
|
|
-static void parse_access_mode (va_list *);
|
|
|
-static void parse_clone_flags (va_list *);
|
|
|
-static void parse_mmap_prot (va_list *);
|
|
|
-static void parse_mmap_flags (va_list *);
|
|
|
-static void parse_exec_args (va_list *);
|
|
|
-static void parse_exec_envp (va_list *);
|
|
|
-static void parse_pipe_fds (va_list *);
|
|
|
-static void parse_signum (va_list *);
|
|
|
-static void parse_sigmask (va_list *);
|
|
|
-static void parse_sigprocmask_how (va_list *);
|
|
|
-static void parse_timespec (va_list *);
|
|
|
-static void parse_sockaddr (va_list *);
|
|
|
-static void parse_domain (va_list *);
|
|
|
-static void parse_socktype (va_list *);
|
|
|
-static void parse_futexop (va_list *);
|
|
|
-static void parse_ioctlop (va_list *);
|
|
|
-static void parse_fcntlop (va_list *);
|
|
|
-static void parse_seek (va_list *);
|
|
|
-static void parse_at_fdcwd (va_list *);
|
|
|
-static void parse_wait_option (va_list *);
|
|
|
+static void parse_open_flags (va_list);
|
|
|
+static void parse_open_mode (va_list);
|
|
|
+static void parse_access_mode (va_list);
|
|
|
+static void parse_clone_flags (va_list);
|
|
|
+static void parse_mmap_prot (va_list);
|
|
|
+static void parse_mmap_flags (va_list);
|
|
|
+static void parse_exec_args (va_list);
|
|
|
+static void parse_exec_envp (va_list);
|
|
|
+static void parse_pipe_fds (va_list);
|
|
|
+static void parse_signum (va_list);
|
|
|
+static void parse_sigmask (va_list);
|
|
|
+static void parse_sigprocmask_how (va_list);
|
|
|
+static void parse_timespec (va_list);
|
|
|
+static void parse_sockaddr (va_list);
|
|
|
+static void parse_domain (va_list);
|
|
|
+static void parse_socktype (va_list);
|
|
|
+static void parse_futexop (va_list);
|
|
|
+static void parse_ioctlop (va_list);
|
|
|
+static void parse_fcntlop (va_list);
|
|
|
+static void parse_seek (va_list);
|
|
|
+static void parse_at_fdcwd (va_list);
|
|
|
+static void parse_wait_option (va_list);
|
|
|
|
|
|
struct parser_table {
|
|
|
int slow;
|
|
|
int stop;
|
|
|
- void (*parser[6]) (va_list *);
|
|
|
+ void (*parser[6]) (va_list);
|
|
|
} syscall_parser_table[LIBOS_SYSCALL_BOUND] = {
|
|
|
{ .slow = 1, .parser = { NULL } }, /* read */
|
|
|
{ .slow = 1, .parser = { NULL } }, /* write */
|
|
@@ -428,10 +428,10 @@ static inline int is_pointer (const char * type)
|
|
|
debug_vprintf(fmt, ap); \
|
|
|
} while (0)
|
|
|
|
|
|
-static inline void parse_string_arg (va_list * ap)
|
|
|
+static inline void parse_string_arg (va_list ap)
|
|
|
{
|
|
|
va_list ap_test_arg;
|
|
|
- va_copy(ap_test_arg, *ap);
|
|
|
+ va_copy(ap_test_arg, ap);
|
|
|
const char* test_arg = va_arg(ap_test_arg, const char*);
|
|
|
if (!test_user_string(test_arg)) {
|
|
|
VPRINTF("\"%s\"", ap);
|
|
@@ -442,19 +442,19 @@ static inline void parse_string_arg (va_list * ap)
|
|
|
va_end(ap_test_arg);
|
|
|
}
|
|
|
|
|
|
-static inline void parse_pointer_arg (va_list * ap)
|
|
|
+static inline void parse_pointer_arg (va_list ap)
|
|
|
{
|
|
|
VPRINTF("%p", ap);
|
|
|
}
|
|
|
|
|
|
-static inline void parse_integer_arg (va_list * ap)
|
|
|
+static inline void parse_integer_arg (va_list ap)
|
|
|
{
|
|
|
VPRINTF("%d", ap);
|
|
|
}
|
|
|
|
|
|
-static inline void parse_syscall_args (va_list * ap)
|
|
|
+static inline void parse_syscall_args (va_list ap)
|
|
|
{
|
|
|
- const char * arg_type = va_arg(*ap, const char *);
|
|
|
+ const char * arg_type = va_arg(ap, const char *);
|
|
|
|
|
|
if (strcmp_static(arg_type, "const char *"))
|
|
|
parse_string_arg(ap);
|
|
@@ -464,23 +464,23 @@ static inline void parse_syscall_args (va_list * ap)
|
|
|
parse_integer_arg(ap);
|
|
|
}
|
|
|
|
|
|
-static inline void skip_syscall_args (va_list * ap)
|
|
|
+static inline void skip_syscall_args (va_list ap)
|
|
|
{
|
|
|
- const char * arg_type = va_arg(*ap, const char *);
|
|
|
+ const char * arg_type = va_arg(ap, const char *);
|
|
|
|
|
|
if (strcmp_static(arg_type, "const char *"))
|
|
|
- va_arg(*ap, const char *);
|
|
|
+ va_arg(ap, const char *);
|
|
|
else if (is_pointer(arg_type))
|
|
|
- va_arg(*ap, void *);
|
|
|
+ va_arg(ap, void *);
|
|
|
else
|
|
|
- va_arg(*ap, int);
|
|
|
+ va_arg(ap, int);
|
|
|
}
|
|
|
|
|
|
void sysparser_printf (const char * fmt, ...)
|
|
|
{
|
|
|
va_list ap;
|
|
|
va_start(ap, fmt);
|
|
|
- VPRINTF(fmt, &ap);
|
|
|
+ VPRINTF(fmt, ap);
|
|
|
va_end(ap);
|
|
|
}
|
|
|
|
|
@@ -509,9 +509,9 @@ void parse_syscall_before (int sysno, const char * name, int nr, ...)
|
|
|
if (parser->parser[i]) {
|
|
|
const char * type = va_arg(ap, const char *);
|
|
|
__UNUSED(type); // type not needed on this path
|
|
|
- (*parser->parser[i])(&ap);
|
|
|
+ (*parser->parser[i])(ap);
|
|
|
} else
|
|
|
- parse_syscall_args(&ap);
|
|
|
+ parse_syscall_args(ap);
|
|
|
}
|
|
|
|
|
|
PUTCH(')');
|
|
@@ -548,7 +548,7 @@ void parse_syscall_after (int sysno, const char * name, int nr, ...)
|
|
|
if (!parser->slow || parser->stop)
|
|
|
for (int i = 0 ; i < nr ; i++) {
|
|
|
if (parser->stop && i < parser->stop) {
|
|
|
- skip_syscall_args(&ap);
|
|
|
+ skip_syscall_args(ap);
|
|
|
continue;
|
|
|
}
|
|
|
|
|
@@ -558,9 +558,9 @@ void parse_syscall_after (int sysno, const char * name, int nr, ...)
|
|
|
if (parser->parser[i]) {
|
|
|
const char * type = va_arg(ap, const char *);
|
|
|
__UNUSED(type); // type not needed on this path
|
|
|
- (*parser->parser[i])(&ap);
|
|
|
+ (*parser->parser[i])(ap);
|
|
|
} else
|
|
|
- parse_syscall_args(&ap);
|
|
|
+ parse_syscall_args(ap);
|
|
|
}
|
|
|
|
|
|
if (is_pointer(ret_type)) {
|
|
@@ -578,9 +578,9 @@ void parse_syscall_after (int sysno, const char * name, int nr, ...)
|
|
|
va_end (ap);
|
|
|
}
|
|
|
|
|
|
-static void parse_open_flags (va_list * ap)
|
|
|
+static void parse_open_flags (va_list ap)
|
|
|
{
|
|
|
- int flags = va_arg(*ap, int);
|
|
|
+ int flags = va_arg(ap, int);
|
|
|
|
|
|
if (flags & O_WRONLY) {
|
|
|
PUTS("O_WRONLY");
|
|
@@ -612,14 +612,14 @@ static void parse_open_flags (va_list * ap)
|
|
|
PRINTF("|%o", flags);
|
|
|
}
|
|
|
|
|
|
-static void parse_open_mode (va_list * ap)
|
|
|
+static void parse_open_mode (va_list ap)
|
|
|
{
|
|
|
VPRINTF("%04o", ap);
|
|
|
}
|
|
|
|
|
|
-static void parse_access_mode (va_list * ap)
|
|
|
+static void parse_access_mode (va_list ap)
|
|
|
{
|
|
|
- int mode = va_arg(*ap, int);
|
|
|
+ int mode = va_arg(ap, int);
|
|
|
|
|
|
PUTS("F_OK");
|
|
|
|
|
@@ -633,9 +633,9 @@ static void parse_access_mode (va_list * ap)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-static void parse_clone_flags (va_list * ap)
|
|
|
+static void parse_clone_flags (va_list ap)
|
|
|
{
|
|
|
- int flags = va_arg(*ap, int);
|
|
|
+ int flags = va_arg(ap, int);
|
|
|
|
|
|
#define FLG(n) { "CLONE_" #n, CLONE_##n, }
|
|
|
const struct {
|
|
@@ -664,9 +664,9 @@ static void parse_clone_flags (va_list * ap)
|
|
|
PRINTF("|0x%x", flags);
|
|
|
}
|
|
|
|
|
|
-static void parse_mmap_prot (va_list * ap)
|
|
|
+static void parse_mmap_prot (va_list ap)
|
|
|
{
|
|
|
- int prot = va_arg(*ap, int);
|
|
|
+ int prot = va_arg(ap, int);
|
|
|
int nflags = 0;
|
|
|
|
|
|
if (prot == PROT_NONE) {
|
|
@@ -694,9 +694,9 @@ static void parse_mmap_prot (va_list * ap)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-static void parse_mmap_flags (va_list * ap)
|
|
|
+static void parse_mmap_flags (va_list ap)
|
|
|
{
|
|
|
- int flags = va_arg(*ap, int);
|
|
|
+ int flags = va_arg(ap, int);
|
|
|
|
|
|
if (flags & MAP_SHARED) {
|
|
|
PUTS("MAP_SHARED");
|
|
@@ -734,9 +734,9 @@ static void parse_mmap_flags (va_list * ap)
|
|
|
PRINTF("|0x%x", flags);
|
|
|
}
|
|
|
|
|
|
-static void parse_exec_args (va_list * ap)
|
|
|
+static void parse_exec_args (va_list ap)
|
|
|
{
|
|
|
- const char ** args = va_arg(*ap, const char **);
|
|
|
+ const char ** args = va_arg(ap, const char **);
|
|
|
|
|
|
PUTS("[");
|
|
|
|
|
@@ -758,9 +758,9 @@ static void parse_exec_args (va_list * ap)
|
|
|
PUTS("]");
|
|
|
}
|
|
|
|
|
|
-static void parse_exec_envp (va_list * ap)
|
|
|
+static void parse_exec_envp (va_list ap)
|
|
|
{
|
|
|
- const char ** envp = va_arg(*ap, const char **);
|
|
|
+ const char ** envp = va_arg(ap, const char **);
|
|
|
|
|
|
if (!envp) {
|
|
|
PUTS("NULL");
|
|
@@ -791,9 +791,9 @@ static void parse_exec_envp (va_list * ap)
|
|
|
PUTS("]");
|
|
|
}
|
|
|
|
|
|
-static void parse_pipe_fds (va_list * ap)
|
|
|
+static void parse_pipe_fds (va_list ap)
|
|
|
{
|
|
|
- int * fds = va_arg(*ap, int *);
|
|
|
+ int * fds = va_arg(ap, int *);
|
|
|
|
|
|
PRINTF("[%d, %d]", fds[0], fds[1]);
|
|
|
}
|
|
@@ -837,9 +837,9 @@ const char *const siglist[NUM_KNOWN_SIGS + 1] =
|
|
|
S(SIGRTMIN),
|
|
|
};
|
|
|
|
|
|
-static void parse_signum (va_list * ap)
|
|
|
+static void parse_signum (va_list ap)
|
|
|
{
|
|
|
- int signum = va_arg(*ap, int);
|
|
|
+ int signum = va_arg(ap, int);
|
|
|
|
|
|
if (signum >= 0 && signum <= NUM_KNOWN_SIGS)
|
|
|
PUTS(signal_name(signum));
|
|
@@ -847,9 +847,9 @@ static void parse_signum (va_list * ap)
|
|
|
PRINTF("[SIG %d]", signum);
|
|
|
}
|
|
|
|
|
|
-static void parse_sigmask (va_list * ap)
|
|
|
+static void parse_sigmask (va_list ap)
|
|
|
{
|
|
|
- __sigset_t * sigset = va_arg(*ap, __sigset_t *);
|
|
|
+ __sigset_t * sigset = va_arg(ap, __sigset_t *);
|
|
|
|
|
|
if (!sigset) {
|
|
|
PUTS("NULL");
|
|
@@ -872,9 +872,9 @@ static void parse_sigmask (va_list * ap)
|
|
|
PUTS("]");
|
|
|
}
|
|
|
|
|
|
-static void parse_sigprocmask_how (va_list * ap)
|
|
|
+static void parse_sigprocmask_how (va_list ap)
|
|
|
{
|
|
|
- int how = va_arg(*ap, int);
|
|
|
+ int how = va_arg(ap, int);
|
|
|
|
|
|
switch (how) {
|
|
|
case SIG_BLOCK:
|
|
@@ -892,9 +892,9 @@ static void parse_sigprocmask_how (va_list * ap)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-static void parse_timespec (va_list * ap)
|
|
|
+static void parse_timespec (va_list ap)
|
|
|
{
|
|
|
- const struct timespec * tv = va_arg(*ap, const struct timespec *);
|
|
|
+ const struct timespec * tv = va_arg(ap, const struct timespec *);
|
|
|
|
|
|
if (!tv) {
|
|
|
PUTS("NULL");
|
|
@@ -909,9 +909,9 @@ static void parse_timespec (va_list * ap)
|
|
|
PRINTF("[%ld,%ld]", tv->tv_sec, tv->tv_nsec);
|
|
|
}
|
|
|
|
|
|
-static void parse_sockaddr (va_list *ap)
|
|
|
+static void parse_sockaddr (va_list ap)
|
|
|
{
|
|
|
- const struct sockaddr *addr = va_arg(*ap, const struct sockaddr *);
|
|
|
+ const struct sockaddr *addr = va_arg(ap, const struct sockaddr *);
|
|
|
|
|
|
if (!addr) {
|
|
|
PUTS("NULL");
|
|
@@ -957,9 +957,9 @@ static void parse_sockaddr (va_list *ap)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-static void parse_domain (va_list * ap)
|
|
|
+static void parse_domain (va_list ap)
|
|
|
{
|
|
|
- int domain = va_arg(*ap, int);
|
|
|
+ int domain = va_arg(ap, int);
|
|
|
|
|
|
#define PF_UNSPEC 0 /* Unspecified. */
|
|
|
#define PF_INET 2 /* IP protocol family. */
|
|
@@ -1012,9 +1012,9 @@ static void parse_domain (va_list * ap)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-static void parse_socktype (va_list * ap)
|
|
|
+static void parse_socktype (va_list ap)
|
|
|
{
|
|
|
- int socktype = va_arg(*ap, int);
|
|
|
+ int socktype = va_arg(ap, int);
|
|
|
|
|
|
if (socktype & SOCK_NONBLOCK) {
|
|
|
socktype &= ~SOCK_NONBLOCK;
|
|
@@ -1057,9 +1057,9 @@ static void parse_socktype (va_list * ap)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-static void parse_futexop (va_list * ap)
|
|
|
+static void parse_futexop (va_list ap)
|
|
|
{
|
|
|
- int op = va_arg(*ap, int);
|
|
|
+ int op = va_arg(ap, int);
|
|
|
|
|
|
#ifdef FUTEX_PRIVATE_FLAG
|
|
|
if (op & FUTEX_PRIVATE_FLAG) {
|
|
@@ -1108,9 +1108,9 @@ static void parse_futexop (va_list * ap)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-static void parse_fcntlop (va_list * ap)
|
|
|
+static void parse_fcntlop (va_list ap)
|
|
|
{
|
|
|
- int op = va_arg(*ap, int);
|
|
|
+ int op = va_arg(ap, int);
|
|
|
|
|
|
switch (op) {
|
|
|
case F_DUPFD:
|
|
@@ -1173,9 +1173,9 @@ static void parse_fcntlop (va_list * ap)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-static void parse_ioctlop (va_list * ap)
|
|
|
+static void parse_ioctlop (va_list ap)
|
|
|
{
|
|
|
- int op = va_arg(*ap, int);
|
|
|
+ int op = va_arg(ap, int);
|
|
|
|
|
|
if (op >= TCGETS && op <= TIOCVHANGUP) {
|
|
|
const char * opnames[] = {
|
|
@@ -1234,9 +1234,9 @@ static void parse_ioctlop (va_list * ap)
|
|
|
PRINTF("OP 0x%04x", op);
|
|
|
}
|
|
|
|
|
|
-static void parse_seek (va_list * ap)
|
|
|
+static void parse_seek (va_list ap)
|
|
|
{
|
|
|
- int seek = va_arg(*ap, int);
|
|
|
+ int seek = va_arg(ap, int);
|
|
|
|
|
|
switch(seek) {
|
|
|
case SEEK_CUR:
|
|
@@ -1254,9 +1254,9 @@ static void parse_seek (va_list * ap)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-static void parse_at_fdcwd (va_list * ap)
|
|
|
+static void parse_at_fdcwd (va_list ap)
|
|
|
{
|
|
|
- int fd = va_arg(*ap, int);
|
|
|
+ int fd = va_arg(ap, int);
|
|
|
|
|
|
switch(fd) {
|
|
|
case AT_FDCWD:
|
|
@@ -1268,9 +1268,9 @@ static void parse_at_fdcwd (va_list * ap)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-static void parse_wait_option (va_list * ap)
|
|
|
+static void parse_wait_option (va_list ap)
|
|
|
{
|
|
|
- int option = va_arg(*ap, int);
|
|
|
+ int option = va_arg(ap, int);
|
|
|
|
|
|
if (option & WNOHANG)
|
|
|
PUTS("WNOHANG");
|