On Tue, 19 May 2026 13:28:30 -0400
Steven Rostedt <[email protected]> wrote:

> On Tue, 19 May 2026 13:01:44 -0400
> Steven Rostedt <[email protected]> wrote:
> 
> > @@ -636,11 +694,12 @@ static int parse_btf_arg(char *varname,
> >     struct fetch_insn *code = *pcode;
> >     const struct btf_param *params;
> >     const struct btf_type *type;
> > +   struct btf *btf = ctx_btf(ctx);
> >     char *field = NULL;
> >     int i, is_ptr, ret;
> >     u32 tid;
> >  
> > -   if (WARN_ON_ONCE(!ctx->funcname))
> > +   if (WARN_ON_ONCE(!ctx->funcname && !(ctx->flags & TPARG_FL_TYPECAST)))
> >             return -EINVAL;
> >  
> >     is_ptr = split_next_field(varname, &field, ctx);
> > @@ -653,6 +712,14 @@ static int parse_btf_arg(char *varname,
> >             return -EOPNOTSUPP;
> >     }
> >  
> > +   if (ctx->flags & TPARG_FL_TEVENT) {
> > +           int ret;
> > +
> > +           ret = parse_trace_event(varname, code, ctx);
> > +           if (ret < 0)
> > +                   return ret;

Actually, since typecasting is currently only for eprobes, I'm going to
shuffle the code around a bit to only have the TYPECAST affect TEVENT,
and do the jump to found_type from here.

-- Steve


> > +   }
> > +
> >     if (ctx->flags & TPARG_FL_RETURN && !strcmp(varname, "$retval")) {
> >             code->op = FETCH_OP_RETVAL;
> >             /* Check whether the function return type is not void */
> > @@ -672,7 +739,7 @@ static int parse_btf_arg(char *varname,
> >             return 0;
> >     }
> >  
> > -   if (!ctx->btf) {
> > +   if (!btf) {
> >             ret = query_btf_context(ctx);  
> 
> Oops, need a:
> 
>               btf = ctx->btf;
> 
> here!
> 
> -- Steve
> 
> >             if (ret < 0 || ctx->nr_params == 0) {
> >                     trace_probe_log_err(ctx->offset, NO_BTF_ENTRY);  


Reply via email to