diff options
author | Alex Shi <alex.shi@linaro.org> | 2017-07-18 12:05:46 +0800 |
---|---|---|
committer | Alex Shi <alex.shi@linaro.org> | 2017-07-18 12:05:46 +0800 |
commit | 5289d9c979092878f2bf741d8b365ef7565fb6db (patch) | |
tree | 845756bb908fddedb3d88515fe0b8d7ad04fc567 /kernel/trace/trace_kprobe.c | |
parent | 91e52df3ad8b9c84c4f6f050e0f14127894dd8ce (diff) | |
parent | 9e0499d7d30c6a91eb381e604c31519af88737d7 (diff) |
Merge tag 'v4.4.77' into linux-linaro-lsk-v4.4lsk-v4.4-17.07
This is the 4.4.77 stable release
Diffstat (limited to 'kernel/trace/trace_kprobe.c')
-rw-r--r-- | kernel/trace/trace_kprobe.c | 21 |
1 files changed, 8 insertions, 13 deletions
diff --git a/kernel/trace/trace_kprobe.c b/kernel/trace/trace_kprobe.c index 12ea4ea619ee..e9092a0247bf 100644 --- a/kernel/trace/trace_kprobe.c +++ b/kernel/trace/trace_kprobe.c @@ -659,30 +659,25 @@ static int create_trace_kprobe(int argc, char **argv) pr_info("Probe point is not specified.\n"); return -EINVAL; } - if (isdigit(argv[1][0])) { - if (is_return) { - pr_info("Return probe point must be a symbol.\n"); - return -EINVAL; - } - /* an address specified */ - ret = kstrtoul(&argv[1][0], 0, (unsigned long *)&addr); - if (ret) { - pr_info("Failed to parse address.\n"); - return ret; - } - } else { + + /* try to parse an address. if that fails, try to read the + * input as a symbol. */ + if (kstrtoul(argv[1], 0, (unsigned long *)&addr)) { /* a symbol specified */ symbol = argv[1]; /* TODO: support .init module functions */ ret = traceprobe_split_symbol_offset(symbol, &offset); if (ret) { - pr_info("Failed to parse symbol.\n"); + pr_info("Failed to parse either an address or a symbol.\n"); return ret; } if (offset && is_return) { pr_info("Return probe must be used without offset.\n"); return -EINVAL; } + } else if (is_return) { + pr_info("Return probe point must be a symbol.\n"); + return -EINVAL; } argc -= 2; argv += 2; |