.. | .. |
---|
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 | } |
---|