| .. | .. |
|---|
| 54 | 54 | * If dest is NULL, don't store result and return required dynamic data size. |
|---|
| 55 | 55 | */ |
|---|
| 56 | 56 | static int |
|---|
| 57 | | -process_fetch_insn(struct fetch_insn *code, struct pt_regs *regs, |
|---|
| 57 | +process_fetch_insn(struct fetch_insn *code, void *rec, |
|---|
| 58 | 58 | void *dest, void *base); |
|---|
| 59 | 59 | static nokprobe_inline int fetch_store_strlen(unsigned long addr); |
|---|
| 60 | 60 | static nokprobe_inline int |
|---|
| .. | .. |
|---|
| 143 | 143 | array: |
|---|
| 144 | 144 | /* the last stage: Loop on array */ |
|---|
| 145 | 145 | if (code->op == FETCH_OP_LP_ARRAY) { |
|---|
| 146 | + if (ret < 0) |
|---|
| 147 | + ret = 0; |
|---|
| 146 | 148 | total += ret; |
|---|
| 147 | 149 | if (++i < code->param) { |
|---|
| 148 | 150 | code = s3; |
|---|
| .. | .. |
|---|
| 188 | 190 | |
|---|
| 189 | 191 | /* Store the value of each argument */ |
|---|
| 190 | 192 | static nokprobe_inline void |
|---|
| 191 | | -store_trace_args(void *data, struct trace_probe *tp, struct pt_regs *regs, |
|---|
| 193 | +store_trace_args(void *data, struct trace_probe *tp, void *rec, |
|---|
| 192 | 194 | int header_size, int maxlen) |
|---|
| 193 | 195 | { |
|---|
| 194 | 196 | struct probe_arg *arg; |
|---|
| .. | .. |
|---|
| 203 | 205 | /* Point the dynamic data area if needed */ |
|---|
| 204 | 206 | if (unlikely(arg->dynamic)) |
|---|
| 205 | 207 | *dl = make_data_loc(maxlen, dyndata - base); |
|---|
| 206 | | - ret = process_fetch_insn(arg->code, regs, dl, base); |
|---|
| 207 | | - if (unlikely(ret < 0 && arg->dynamic)) { |
|---|
| 208 | | - *dl = make_data_loc(0, dyndata - base); |
|---|
| 209 | | - } else { |
|---|
| 210 | | - dyndata += ret; |
|---|
| 211 | | - maxlen -= ret; |
|---|
| 208 | + ret = process_fetch_insn(arg->code, rec, dl, base); |
|---|
| 209 | + if (arg->dynamic) { |
|---|
| 210 | + if (unlikely(ret < 0)) { |
|---|
| 211 | + *dl = make_data_loc(0, dyndata - base); |
|---|
| 212 | + } else { |
|---|
| 213 | + dyndata += ret; |
|---|
| 214 | + maxlen -= ret; |
|---|
| 215 | + } |
|---|
| 212 | 216 | } |
|---|
| 213 | 217 | } |
|---|
| 214 | 218 | } |
|---|