100% agree. Will work on a test case soon (maybe next week).

On Tue, Jun 6, 2017 at 9:01 PM, Brenden Blanco <bbla...@gmail.com> wrote:
> Also, I would suggest that after that fix, we also update the test to
> include actually testing for proper values. Probably you can send the values
> over the perf ring buffer and assert at the end that all of the values are
> collected properly.
>
> On Tue, Jun 6, 2017 at 8:59 PM, Brenden Blanco <bbla...@gmail.com> wrote:
>>
>> Yonghong, can you send a PR for your branch?
>>
>> On Tue, Jun 6, 2017 at 12:20 AM, Y Song via iovisor-dev
>> <iovisor-dev@lists.iovisor.org> wrote:
>>>
>>> Hi, Tetsuo,
>>>
>>> You are right. The bug is actually introduced by my last patch. I just
>>> focused one aspect of issue and inadvertently introduced another
>>> *blocker* bug.
>>>
>>> I just pushed a patch. Thanks a lot for reporting the issue and
>>> testing out the fix.
>>>
>>> Yonghong
>>>
>>> On Mon, Jun 5, 2017 at 5:25 PM, Tetsuo Handa
>>> <penguin-ker...@i-love.sakura.ne.jp> wrote:
>>> > Hello.
>>> >
>>> > I changed the hook as below and confirmed that cp == NULL at
>>> > bpf_probe_read().
>>> > That is, it is bpf_usdt_readarg() which got broken.
>>> >
>>> > ----------
>>> > int do_start(struct pt_regs *ctx) {
>>> >     char *cp = NULL;
>>> >     bpf_usdt_readarg(1, ctx, &cp);
>>> >     struct { char query[QUERY_MAX]; } data = { };
>>> >     if (cp != NULL)
>>> >         bpf_probe_read(&data.query, sizeof(data.query), (void *) cp);
>>> >     else
>>> >         data.query[0] = '!';
>>> >     events.perf_submit(ctx, &data, sizeof(data));
>>> >     return 0;
>>> > };
>>> > ----------
>>> >
>>> > If I do
>>> >
>>> > -    std::string cptr = tfm::format("*((volatile %s *)dest)", ctype);
>>> > +    std::string cptr = tfm::format("*((%s *)dest)", ctype);
>>> >
>>> > (i.e. drop only "volatile " part) in that commit like below
>>> >
>>> > ----------
>>> > diff --git a/src/cc/usdt.cc b/src/cc/usdt.cc
>>> > --- a/src/cc/usdt.cc
>>> > +++ b/src/cc/usdt.cc
>>> > @@ -152,7 +152,7 @@ bool Probe::usdt_getarg(std::ostream &stream) {
>>> >
>>> >    for (size_t arg_n = 0; arg_n < arg_count; ++arg_n) {
>>> >      std::string ctype = largest_arg_type(arg_n);
>>> > -    std::string cptr("dest");
>>> > +    std::string cptr = tfm::format("*((%s *)dest)", ctype);
>>> >
>>> >      tfm::format(stream,
>>> >                  "static __always_inline int _bpf_readarg_%s_%d("
>>> > ----------
>>> >
>>> > USDT probe works again as well as build warning shown below goes away.
>>> >
>>> > ----------
>>> > /virtual/main.c:4:8: warning: incompatible integer to pointer
>>> > conversion assigning to 'void *' from 'volatile uint64_t' (aka 'volatile
>>> > unsigned long long') [-Wint-conversion]
>>> >   dest = *(volatile uint64_t *)&ctx->bx;
>>> >        ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>>> > ----------
>>> _______________________________________________
>>> iovisor-dev mailing list
>>> iovisor-dev@lists.iovisor.org
>>> https://lists.iovisor.org/mailman/listinfo/iovisor-dev
>>
>>
>
_______________________________________________
iovisor-dev mailing list
iovisor-dev@lists.iovisor.org
https://lists.iovisor.org/mailman/listinfo/iovisor-dev

Reply via email to