diff options
Diffstat (limited to 'kernel/trace/trace_uprobe.c')
| -rw-r--r-- | kernel/trace/trace_uprobe.c | 22 | 
1 files changed, 21 insertions, 1 deletions
diff --git a/kernel/trace/trace_uprobe.c b/kernel/trace/trace_uprobe.c index aa1ea7b36fa8..d2f6d0be3503 100644 --- a/kernel/trace/trace_uprobe.c +++ b/kernel/trace/trace_uprobe.c @@ -601,7 +601,22 @@ static int probes_seq_show(struct seq_file *m, void *v)  	seq_printf(m, "%c:%s/%s", c, tu->tp.call.class->system,  			trace_event_name(&tu->tp.call)); -	seq_printf(m, " %s:0x%p", tu->filename, (void *)tu->offset); +	seq_printf(m, " %s:", tu->filename); + +	/* Don't print "0x  (null)" when offset is 0 */ +	if (tu->offset) { +		seq_printf(m, "0x%p", (void *)tu->offset); +	} else { +		switch (sizeof(void *)) { +		case 4: +			seq_printf(m, "0x00000000"); +			break; +		case 8: +		default: +			seq_printf(m, "0x0000000000000000"); +			break; +		} +	}  	for (i = 0; i < tu->tp.nr_args; i++)  		seq_printf(m, " %s=%s", tu->tp.args[i].name, tu->tp.args[i].comm); @@ -1095,11 +1110,15 @@ static void __uprobe_perf_func(struct trace_uprobe *tu,  {  	struct trace_event_call *call = &tu->tp.call;  	struct uprobe_trace_entry_head *entry; +	struct bpf_prog *prog = call->prog;  	struct hlist_head *head;  	void *data;  	int size, esize;  	int rctx; +	if (prog && !trace_call_bpf(prog, regs)) +		return; +  	esize = SIZEOF_TRACE_ENTRY(is_ret_probe(tu));  	size = esize + tu->tp.size + dsize; @@ -1289,6 +1308,7 @@ static int register_uprobe_event(struct trace_uprobe *tu)  		return -ENODEV;  	} +	call->flags = TRACE_EVENT_FL_UPROBE;  	call->class->reg = trace_uprobe_register;  	call->data = tu;  	ret = trace_add_event_call(call);  |