[PATCH/RFC v1 1/2] [GSoC] Stop condition based on number of syscalls

Ice Gambit icegambit91 at gmail.com
Wed Feb 15 15:54:35 UTC 2023


Hi,

You're right, nflag and syscall_limit can both be static variables.
I'll submit a patch with these changes. Thanks for the feedback.

Regards,
Sahil

On Wed, Feb 15, 2023 at 4:34 AM Masatake YAMATO <yamato at redhat.com> wrote:
>
> > Add option to detach strace after capturing a specified
> > number of syscalls.
> >
> > * src/strace.c: Implementation of -l/--syscall-limit option
> >
> > Signed-off-by: Sahil Siddiq <icegambit91 at gmail.com>
> > ---
> >  src/strace.c | 17 ++++++++++++++++-
> >  1 file changed, 16 insertions(+), 1 deletion(-)
> >
> > diff --git a/src/strace.c b/src/strace.c
> > index 4e710db80..bdfa705cf 100644
> > --- a/src/strace.c
> > +++ b/src/strace.c
> > @@ -84,6 +84,7 @@ int Tflag_scale = 1000;
> >  int Tflag_width = 6;
> >  bool iflag;
> >  bool nflag;
> > +int syscall_limit = -1;
>
> If you don't have a plan to refer to this variable in .c files other than strace.c,
> you can add static modifier.
>
> It seems that my comment is applicable to nflag.
>
> Masatake YAMATO
>
> >  bool count_wallclock;
> >  static int tflag_scale = 1000000000;
> >  static unsigned tflag_width = 0;
> > @@ -461,6 +462,10 @@ Statistics:\n\
> >    -w, --summary-wall-clock\n\
> >                   summarise syscall latency (default is system time)\n\
> >  \n\
> > +Stop condition:\n\
> > +  -l LIMIT, --syscall-limit=LIMIT\n\
> > +                 Detach tracer after tracing LIMIT syscalls\n\
> > +\n\
> >  Tampering:\n\
> >    -e inject=SET[:error=ERRNO|:retval=VALUE][:signal=SIG][:syscall=SYSCALL]\n\
> >              [:delay_enter=DELAY][:delay_exit=DELAY]\n\
> > @@ -2245,7 +2250,7 @@ init(int argc, char *argv[])
> >  #endif
> >
> >       static const char optstring[] =
> > -             "+a:Ab:cCdDe:E:fFhiI:kno:O:p:P:qrs:S:tTu:U:vVwxX:yYzZ";
> > +             "+a:Ab:cCdDe:E:fFhiI:kl:no:O:p:P:qrs:S:tTu:U:vVwxX:yYzZ";
> >
> >       enum {
> >               GETOPT_SECCOMP = 0x100,
> > @@ -2291,6 +2296,7 @@ init(int argc, char *argv[])
> >               { "instruction-pointer", no_argument,      0, 'i' },
> >               { "interruptible",      required_argument, 0, 'I' },
> >               { "stack-traces",       no_argument,       0, 'k' },
> > +             { "syscall-limit",      required_argument, 0, 'l' },
> >               { "syscall-number",     no_argument,       0, 'n' },
> >               { "output",             required_argument, 0, 'o' },
> >               { "summary-syscall-overhead", required_argument, 0, 'O' },
> > @@ -2432,6 +2438,11 @@ init(int argc, char *argv[])
> >                                         "build of strace");
> >  #endif
> >                       break;
> > +             case 'l':
> > +                     syscall_limit = string_to_uint(optarg);
> > +                     if (syscall_limit <= 0)
> > +                             error_opt_arg(c, lopt, optarg);
> > +                     break;
> >               case 'n':
> >                       nflag = 1;
> >                       break;
> > @@ -3646,6 +3657,8 @@ trace_syscall(struct tcb *tcp, unsigned int *sig)
> >               int res = syscall_exiting_decode(tcp, &ts);
> >               if (res != 0) {
> >                       res = syscall_exiting_trace(tcp, &ts, res);
> > +                     if (syscall_limit != -1)
> > +                             syscall_limit--;
> >               }
> >               syscall_exiting_finish(tcp);
> >               return res;
> > @@ -3716,6 +3729,8 @@ dispatch_event(const struct tcb_wait_data *wd)
> >                        */
> >                       return true;
> >               }
> > +             if (syscall_limit == 0)
> > +                     return false;
> >               if (has_seccomp_filter(current_tcp)) {
> >                       /*
> >                        * Syscall and seccomp stops can happen in different
> > --
> > 2.39.1
> >
> > --
> > Strace-devel mailing list
> > Strace-devel at lists.strace.io
> > https://lists.strace.io/mailman/listinfo/strace-devel
> >
>


More information about the Strace-devel mailing list