On Sun, Jun 04, 2017 at 01:59:16AM +0300, Victor Krapivensky wrote:
> This change removes the trace_syscall function. Now, the code that uses
> syscall.c trace functions is expected to check whether it is a syscall
> entry or exit (with entering(tcp)/exiting(tcp)) itself, and then make an
> appropriate sequence of function calls.
> 
> * defs.h: Change comment on TCB_INSYSCALL, remove the prototype of
> trace_syscall, add prototypes for the new functions.
> * strace.c (trace_syscall): A static replacement for old trace_syscall.
> * syscall.c (trace_syscall): Remove.
> (trace_syscall_entering): Split into...
> (syscall_entering_decode, syscall_entering_trace,
> syscall_entering_finish): ...new functions.
> (trace_syscall_exiting): Split into...
> (syscall_exiting_prepare, syscall_exiting_trace): ...new functions.
[...]
> @@ -2459,6 +2459,26 @@ next_event(int *pstatus, siginfo_t *si)
>       }
>  }
>  
> +static inline int
> +trace_syscall(struct tcb *tcp, unsigned int *sig)
> +{
> +     if (entering(tcp)) {
> +             int res = syscall_entering_decode(tcp);
> +             switch (res) {
> +             case 0:
> +                     return 0;
> +             case 1:
> +                     res = syscall_entering_trace(tcp, sig);
> +             }
> +             syscall_entering_finish(tcp, res);
> +             return res;
> +     } else {
> +             struct timeval tv = {};
> +             syscall_exiting_prepare(tcp, &tv);
> +             return syscall_exiting_trace(tcp, tv);
> +     }
> +}

Looks like this change doesn't change anything, which is good. :)

Why "static inline"?  Is it important whether the function is actually
inlined or not?  If not, no need to insist on inlining.

Why syscall_entering_decode was given this name?  It does get_scno,
get_syscall_args, decode_mips_subcall, decode_socket_subcall,
decode_ipc_subcall - in other words, it fetches syscall number
and arguments.

This split is not the only one possible, what was the rationale for this
one?  For example, get_scno and get_syscall_args are not invoked by
syscall_entering_trace, but get_regs and get_syscall_result are invoked by
syscall_exiting_trace - why?


-- 
ldv

Attachment: signature.asc
Description: PGP signature

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Strace-devel mailing list
Strace-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/strace-devel

Reply via email to