From: Dmitry V. Levin Date: Tue, 15 Sep 2015 21:51:15 +0000 (+0000) Subject: Simplify use of mpers printers X-Git-Tag: v4.11~201 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=e2fb0bb2cfdf3a8c9374dd9dea5848f212fbfec3;p=strace Simplify use of mpers printers * 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. --- diff --git a/Makefile.am b/Makefile.am index 9e19b353..29d8fa76 100644 --- a/Makefile.am +++ b/Makefile.am @@ -87,8 +87,9 @@ strace_SOURCES = \ mknod.c \ mount.c \ mpers_type.h \ - mq.c \ + mq.c \ mtd.c \ + native_defs.h \ net.c \ open.c \ or1k_atomic.c \ @@ -686,6 +687,9 @@ m%_defs.h: $(srcdir_mpers_source_files) 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) @@ -701,9 +705,11 @@ printers.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) diff --git a/README-mpers b/README-mpers index 725a2b6e..8ae418df 100644 --- a/README-mpers +++ b/README-mpers @@ -8,5 +8,7 @@ be included conditionally; (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). diff --git a/defs.h b/defs.h index cad250a4..5531bbc4 100644 --- a/defs.h +++ b/defs.h @@ -779,11 +779,8 @@ extern unsigned num_quals; #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 /* diff --git a/ipc_msg.c b/ipc_msg.c index 3ec04eb3..55747cbb 100644 --- a/ipc_msg.c +++ b/ipc_msg.c @@ -54,7 +54,7 @@ static void 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_???"); } @@ -75,7 +75,7 @@ static void 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); } diff --git a/mpers_type.h b/mpers_type.h index 4ffd2bfd..a9d94e11 100644 --- a/mpers_type.h +++ b/mpers_type.h @@ -11,5 +11,5 @@ #else # define MPERS_PREFIX # define DEF_MPERS_TYPE(args) "empty.h" -# define MPERS_DEFS "empty.h" +# define MPERS_DEFS "native_defs.h" #endif diff --git a/mq.c b/mq.c index 2d745732..59a093a0 100644 --- a/mq.c +++ b/mq.c @@ -38,7 +38,7 @@ SYS_FUNC(mq_open) 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; } @@ -75,9 +75,9 @@ SYS_FUNC(mq_getsetattr) { 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; } diff --git a/native_defs.h b/native_defs.h new file mode 100644 index 00000000..cdc735e0 --- /dev/null +++ b/native_defs.h @@ -0,0 +1,4 @@ +#undef MPERS_PRINTER_NAME +#define MPERS_PRINTER_NAME(printer_name) printer_name + +#include "native_printer_decls.h" diff --git a/process.c b/process.c index a0144b8f..86291842 100644 --- a/process.c +++ b/process.c @@ -105,7 +105,7 @@ SYS_FUNC(ptrace) 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: @@ -131,7 +131,7 @@ SYS_FUNC(ptrace) 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: diff --git a/resource.c b/resource.c index be44aa92..c68f0456 100644 --- a/resource.c +++ b/resource.c @@ -162,7 +162,7 @@ SYS_FUNC(getrusage) tprints(", "); } else - MPERS_PRINTER_NAME(printrusage)(tcp, tcp->u_arg[1]); + printrusage(tcp, tcp->u_arg[1]); return 0; } diff --git a/signal.c b/signal.c index 978926fb..1df3fe5b 100644 --- a/signal.c +++ b/signal.c @@ -633,7 +633,7 @@ print_sigqueueinfo(struct tcb *tcp, int sig, unsigned long uinfo) { printsignal(sig); tprints(", "); - MPERS_PRINTER_NAME(printsiginfo_at)(tcp, uinfo); + printsiginfo_at(tcp, uinfo); } SYS_FUNC(rt_sigqueueinfo) @@ -666,7 +666,7 @@ SYS_FUNC(rt_sigtimedwait) } 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 { diff --git a/syscall.c b/syscall.c index 00060c9b..b59388b3 100644 --- a/syscall.c +++ b/syscall.c @@ -32,6 +32,7 @@ */ #include "defs.h" +#include "native_defs.h" #include /* for struct iovec */ diff --git a/utimes.c b/utimes.c index f8ef9540..22b21a55 100644 --- a/utimes.c +++ b/utimes.c @@ -4,7 +4,7 @@ SYS_FUNC(utimes) { 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; } @@ -14,7 +14,7 @@ SYS_FUNC(futimesat) 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; } @@ -24,7 +24,7 @@ SYS_FUNC(utimensat) 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_???"); diff --git a/wait.c b/wait.c index 07cc3614..2e495dbf 100644 --- a/wait.c +++ b/wait.c @@ -114,7 +114,7 @@ printwaitn(struct tcb *tcp, int n, int bitness) 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]); @@ -149,14 +149,14 @@ SYS_FUNC(waitid) 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;