On Mon, Oct 20, 2008 at 11:33 AM, P. Remek <[EMAIL PROTECTED]> wrote:
> Hi,
>
> I am using pid provider and I have noticed that return probe is not fired when
> leaving function with variable number of arguments using va_start and va_stop.
> Having such code:
>
> log() {
>      va_start(ap, fmt);
>      log_vwrite(l, fmt, ap);
>      va_end(ap);
> }
>
> I get such output from dtrace:
>
> -> log
>  -> log_vwrite
>  <- log
>
>
> Is this a dtrace problem or is there some general problem why it can't work
> when using variable argument lists?

I've tested this, and I'm not seeing the same problem you are.  For
example, using this program (compiled using 'cc foo.c' using Sun
Studio 12):

------------------------------------------------------------------------
#include <stdio.h>
#include <stdarg.h>

void
bar(int n_args, va_list ap)
{
        int argnum = 0;
        int sum = 0;

        while (argnum < n_args) {
                sum += va_arg(ap, int);
                argnum++;
        }

        printf("Sum = %d\n", sum);
}

void
foo(int n_args, ...)
{
        va_list ap;

        va_start(ap, n_args);
        bar(n_args, ap);
        va_end(ap);
}

int
main()
{
        foo(5, 1, 2, 3, 4, 5);
}
------------------------------------------------------------------------

I get the following result:

------------------------------------------------------------------------
# dtrace -F -c ./a.out -n 'pid$target:a.out::entry,pid$target:a.out::return'
dtrace: description 'pid$target:a.out::entry,pid$target:a.out::return'
matched 8 probes
Sum = 15
CPU FUNCTION
  0  -> _start
  0  <- _start
  0  <- _start
  0  <- _start
  0  <- _start
  0  -> main
  0    -> foo
  0      -> bar
  0      <- bar
  0    <- foo
  0  <- main
  0  <- _start
dtrace: pid 866 has exited

#
------------------------------------------------------------------------

Do you have any more information?  Are you using any interesting
compiler options?  What architecture are you compiling on?  (I tested
this on SPARC.)

Chad
_______________________________________________
dtrace-discuss mailing list
dtrace-discuss@opensolaris.org

Reply via email to