* native_defs.h: New file.
* syscall.c: Include it.
* mpers_type.h [!IN_MPERS] (MPERS_DEFS): Change to "native_defs.h".
* defs.h (MPERS_PRINTER_NAME): Remove.
[SUPPORTED_PERSONALITIES > 1] (MPERS_PRINTER_NAME, printers): Move ...
* Makefile.am (printers.h): ... here.
Add macro definitions for mpers printers.
(m%_defs.h): Add redefinition of MPERS_PRINTER_NAME and inclusion
of "$(mpers_PREFIX)printer_decls.h".
(strace_SOURCES): Add native_defs.h.
* README-mpers: Update instructions for using mpers printers.
* ipc_msg.c (tprint_msgsnd, tprint_msgrcv): Call tprint_msgbuf directly.
* mq.c (sys_mq_open, mq_getsetattr): Call printmqattr directly.
* process.c (sys_ptrace): Call printsiginfo_at directly.
* signal.c (print_sigqueueinfo, sys_rt_sigtimedwait): Likewise.
* resource.c (sys_getrusage): Call printrusage directly.
* utimes.c (sys_utimensat): Call print_timespec_utime_pair directly.
(sys_utimes, sys_futimesat): Call print_timeval_pair directly.
* wait.c (printwaitn): Call printrusage directly.
(sys_waitid): Call printrusage and printsiginfo_at directly.
mknod.c \
mount.c \
mpers_type.h \
- mq.c \
+ mq.c \
mtd.c \
+ native_defs.h \
net.c \
open.c \
or1k_atomic.c \
for f in $^; do \
sed -n 's/^#include DEF_MPERS_TYPE(\([^)]\+\))/#ifdef MPERS_$(mpers_PREFIX)\1\n# define \1 MPERS_$(mpers_PREFIX)\1\n#endif/p' $$f || exit; \
done > $@-t
+ echo '#undef MPERS_PRINTER_NAME' >> $@-t
+ echo '#define MPERS_PRINTER_NAME(printer_name) printer_name' >> $@-t
+ echo '#include "$(mpers_PREFIX)printer_decls.h"' >> $@-t
mv $@-t $@
m%_funcs.h: $(srcdir_mpers_source_files)
echo '/* Generated by Makefile from $^; do not edit. */' > $@-t
echo 'typedef struct {' >> $@-t
for f in $^; do \
- sed -n 's/^MPERS_PRINTER_DECL(\([^,]\+\),[[:space:]]*\([^)]\+\))\(.*\)/ \1 (*\2) \3;/p' $$f || exit; \
+ sed -n 's/^MPERS_PRINTER_DECL(\([^,]\+\),[[:space:]]*\([^)]\+\))\(.*\)/ \1 (*\2) \3;\n#define \2 MPERS_PRINTER_NAME(\2)\n/p' $$f || exit; \
done >> $@-t
echo '} struct_printers;' >> $@-t
+ echo 'extern const struct_printers *printers;' >> $@-t
+ echo '#define MPERS_PRINTER_NAME(printer_name) printers->printer_name' >> $@-t
mv $@-t $@
%_printer_decls.h: $(srcdir_mpers_source_files)
(containing definitions of these types or other behaviour-affecting
defines);
* printers should be defined
-as MPERS_PRINTER_DECL(return type, function name)(args) and called
-as MPERS_PRINTER_NAME(function name)(args).
+as MPERS_PRINTER_DECL(return_type, function_name)(args),
+inside files that include MPERS_DEFS these printers should be called
+as MPERS_FUNC_NAME(function_name)(args), in other files
+they should be called just as function_name(args).
#if SUPPORTED_PERSONALITIES > 1
# include "printers.h"
-extern const struct_printers *printers;
-# define MPERS_PRINTER_NAME(printer_name) printers->printer_name
#else
# include "native_printer_decls.h"
-# define MPERS_PRINTER_NAME(printer_name) printer_name
#endif
/*
tprint_msgsnd(struct tcb *tcp, const long addr, const unsigned long count,
const unsigned long flags)
{
- MPERS_PRINTER_NAME(tprint_msgbuf)(tcp, addr, count);
+ tprint_msgbuf(tcp, addr, count);
printflags(ipc_msg_flags, flags, "MSG_???");
}
tprint_msgrcv(struct tcb *tcp, const long addr, const unsigned long count,
const long msgtyp)
{
- MPERS_PRINTER_NAME(tprint_msgbuf)(tcp, addr, count);
+ tprint_msgbuf(tcp, addr, count);
tprintf("%ld, ", msgtyp);
}
#else
# define MPERS_PREFIX
# define DEF_MPERS_TYPE(args) "empty.h"
-# define MPERS_DEFS "empty.h"
+# define MPERS_DEFS "native_defs.h"
#endif
if (tcp->u_arg[1] & O_CREAT) {
/* mode */
tprintf(", %#lo, ", tcp->u_arg[2]);
- MPERS_PRINTER_NAME(printmqattr)(tcp, tcp->u_arg[3]);
+ printmqattr(tcp, tcp->u_arg[3]);
}
return RVAL_DECODED;
}
{
if (entering(tcp)) {
tprintf("%ld, ", tcp->u_arg[0]);
- MPERS_PRINTER_NAME(printmqattr)(tcp, tcp->u_arg[1]);
+ printmqattr(tcp, tcp->u_arg[1]);
tprints(", ");
} else
- MPERS_PRINTER_NAME(printmqattr)(tcp, tcp->u_arg[2]);
+ printmqattr(tcp, tcp->u_arg[2]);
return 0;
}
--- /dev/null
+#undef MPERS_PRINTER_NAME
+#define MPERS_PRINTER_NAME(printer_name) printer_name
+
+#include "native_printer_decls.h"
printflags(ptrace_setoptions_flags, tcp->u_arg[3], "PTRACE_O_???");
break;
case PTRACE_SETSIGINFO: {
- MPERS_PRINTER_NAME(printsiginfo_at)(tcp, tcp->u_arg[3]);
+ printsiginfo_at(tcp, tcp->u_arg[3]);
break;
}
case PTRACE_SETREGSET:
break;
#endif
case PTRACE_GETSIGINFO: {
- MPERS_PRINTER_NAME(printsiginfo_at)(tcp, tcp->u_arg[3]);
+ printsiginfo_at(tcp, tcp->u_arg[3]);
break;
}
case PTRACE_GETREGSET:
tprints(", ");
}
else
- MPERS_PRINTER_NAME(printrusage)(tcp, tcp->u_arg[1]);
+ printrusage(tcp, tcp->u_arg[1]);
return 0;
}
{
printsignal(sig);
tprints(", ");
- MPERS_PRINTER_NAME(printsiginfo_at)(tcp, uinfo);
+ printsiginfo_at(tcp, uinfo);
}
SYS_FUNC(rt_sigqueueinfo)
}
else if (tcp->u_arg[1] != 0) {
/* syscall exit, and u_arg[1] wasn't NULL */
- MPERS_PRINTER_NAME(printsiginfo_at)(tcp, tcp->u_arg[1]);
+ printsiginfo_at(tcp, tcp->u_arg[1]);
tprints(", ");
}
else {
*/
#include "defs.h"
+#include "native_defs.h"
#include <sys/param.h>
/* for struct iovec */
{
printpath(tcp, tcp->u_arg[0]);
tprints(", ");
- MPERS_PRINTER_NAME(print_timeval_pair)(tcp, tcp->u_arg[1]);
+ print_timeval_pair(tcp, tcp->u_arg[1]);
return RVAL_DECODED;
}
print_dirfd(tcp, tcp->u_arg[0]);
printpath(tcp, tcp->u_arg[1]);
tprints(", ");
- MPERS_PRINTER_NAME(print_timeval_pair)(tcp, tcp->u_arg[2]);
+ print_timeval_pair(tcp, tcp->u_arg[2]);
return RVAL_DECODED;
}
print_dirfd(tcp, tcp->u_arg[0]);
printpath(tcp, tcp->u_arg[1]);
tprints(", ");
- MPERS_PRINTER_NAME(print_timespec_utime_pair)(tcp, tcp->u_arg[2]);
+ print_timespec_utime_pair(tcp, tcp->u_arg[2]);
tprints(", ");
printflags(at_flags, tcp->u_arg[3], "AT_???");
printrusage32(tcp, tcp->u_arg[3]);
else
#endif
- MPERS_PRINTER_NAME(printrusage)(tcp, tcp->u_arg[3]);
+ printrusage(tcp, tcp->u_arg[3]);
}
else
printaddr(tcp->u_arg[3]);
tprintf(", %ld, ", tcp->u_arg[1]);
} else {
/* siginfo */
- MPERS_PRINTER_NAME(printsiginfo_at)(tcp, tcp->u_arg[2]);
+ printsiginfo_at(tcp, tcp->u_arg[2]);
/* options */
tprints(", ");
printflags(wait4_options, tcp->u_arg[3], "W???");
if (tcp->s_ent->nargs > 4) {
/* usage */
tprints(", ");
- MPERS_PRINTER_NAME(printrusage)(tcp, tcp->u_arg[4]);
+ printrusage(tcp, tcp->u_arg[4]);
}
}
return 0;