diff options
Diffstat (limited to 'kernel/trace/trace.c')
-rw-r--r-- | kernel/trace/trace.c | 41 |
1 files changed, 22 insertions, 19 deletions
diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c index ff1e9ed9b587..d55ccfc8d674 100644 --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c | |||
@@ -1231,17 +1231,20 @@ static void s_stop(struct seq_file *m, void *p) | |||
1231 | mutex_unlock(&trace_types_lock); | 1231 | mutex_unlock(&trace_types_lock); |
1232 | } | 1232 | } |
1233 | 1233 | ||
1234 | #define KRETPROBE_MSG "[unknown/kretprobe'd]" | ||
1235 | |||
1236 | #ifdef CONFIG_KRETPROBES | 1234 | #ifdef CONFIG_KRETPROBES |
1237 | static inline int kretprobed(unsigned long addr) | 1235 | static inline const char *kretprobed(const char *name) |
1238 | { | 1236 | { |
1239 | return addr == (unsigned long)kretprobe_trampoline; | 1237 | static const char tramp_name[] = "kretprobe_trampoline"; |
1238 | int size = sizeof(tramp_name); | ||
1239 | |||
1240 | if (strncmp(tramp_name, name, size) == 0) | ||
1241 | return "[unknown/kretprobe'd]"; | ||
1242 | return name; | ||
1240 | } | 1243 | } |
1241 | #else | 1244 | #else |
1242 | static inline int kretprobed(unsigned long addr) | 1245 | static inline const char *kretprobed(const char *name) |
1243 | { | 1246 | { |
1244 | return 0; | 1247 | return name; |
1245 | } | 1248 | } |
1246 | #endif /* CONFIG_KRETPROBES */ | 1249 | #endif /* CONFIG_KRETPROBES */ |
1247 | 1250 | ||
@@ -1250,10 +1253,13 @@ seq_print_sym_short(struct trace_seq *s, const char *fmt, unsigned long address) | |||
1250 | { | 1253 | { |
1251 | #ifdef CONFIG_KALLSYMS | 1254 | #ifdef CONFIG_KALLSYMS |
1252 | char str[KSYM_SYMBOL_LEN]; | 1255 | char str[KSYM_SYMBOL_LEN]; |
1256 | const char *name; | ||
1253 | 1257 | ||
1254 | kallsyms_lookup(address, NULL, NULL, NULL, str); | 1258 | kallsyms_lookup(address, NULL, NULL, NULL, str); |
1255 | 1259 | ||
1256 | return trace_seq_printf(s, fmt, str); | 1260 | name = kretprobed(str); |
1261 | |||
1262 | return trace_seq_printf(s, fmt, name); | ||
1257 | #endif | 1263 | #endif |
1258 | return 1; | 1264 | return 1; |
1259 | } | 1265 | } |
@@ -1264,9 +1270,12 @@ seq_print_sym_offset(struct trace_seq *s, const char *fmt, | |||
1264 | { | 1270 | { |
1265 | #ifdef CONFIG_KALLSYMS | 1271 | #ifdef CONFIG_KALLSYMS |
1266 | char str[KSYM_SYMBOL_LEN]; | 1272 | char str[KSYM_SYMBOL_LEN]; |
1273 | const char *name; | ||
1267 | 1274 | ||
1268 | sprint_symbol(str, address); | 1275 | sprint_symbol(str, address); |
1269 | return trace_seq_printf(s, fmt, str); | 1276 | name = kretprobed(str); |
1277 | |||
1278 | return trace_seq_printf(s, fmt, name); | ||
1270 | #endif | 1279 | #endif |
1271 | return 1; | 1280 | return 1; |
1272 | } | 1281 | } |
@@ -1520,10 +1529,7 @@ print_lat_fmt(struct trace_iterator *iter, unsigned int trace_idx, int cpu) | |||
1520 | 1529 | ||
1521 | seq_print_ip_sym(s, field->ip, sym_flags); | 1530 | seq_print_ip_sym(s, field->ip, sym_flags); |
1522 | trace_seq_puts(s, " ("); | 1531 | trace_seq_puts(s, " ("); |
1523 | if (kretprobed(field->parent_ip)) | 1532 | seq_print_ip_sym(s, field->parent_ip, sym_flags); |
1524 | trace_seq_puts(s, KRETPROBE_MSG); | ||
1525 | else | ||
1526 | seq_print_ip_sym(s, field->parent_ip, sym_flags); | ||
1527 | trace_seq_puts(s, ")\n"); | 1533 | trace_seq_puts(s, ")\n"); |
1528 | break; | 1534 | break; |
1529 | } | 1535 | } |
@@ -1639,12 +1645,9 @@ static enum print_line_t print_trace_fmt(struct trace_iterator *iter) | |||
1639 | ret = trace_seq_printf(s, " <-"); | 1645 | ret = trace_seq_printf(s, " <-"); |
1640 | if (!ret) | 1646 | if (!ret) |
1641 | return TRACE_TYPE_PARTIAL_LINE; | 1647 | return TRACE_TYPE_PARTIAL_LINE; |
1642 | if (kretprobed(field->parent_ip)) | 1648 | ret = seq_print_ip_sym(s, |
1643 | ret = trace_seq_puts(s, KRETPROBE_MSG); | 1649 | field->parent_ip, |
1644 | else | 1650 | sym_flags); |
1645 | ret = seq_print_ip_sym(s, | ||
1646 | field->parent_ip, | ||
1647 | sym_flags); | ||
1648 | if (!ret) | 1651 | if (!ret) |
1649 | return TRACE_TYPE_PARTIAL_LINE; | 1652 | return TRACE_TYPE_PARTIAL_LINE; |
1650 | } | 1653 | } |
@@ -1895,7 +1898,7 @@ static enum print_line_t print_bin_fmt(struct trace_iterator *iter) | |||
1895 | return TRACE_TYPE_HANDLED; | 1898 | return TRACE_TYPE_HANDLED; |
1896 | 1899 | ||
1897 | SEQ_PUT_FIELD_RET(s, entry->pid); | 1900 | SEQ_PUT_FIELD_RET(s, entry->pid); |
1898 | SEQ_PUT_FIELD_RET(s, iter->cpu); | 1901 | SEQ_PUT_FIELD_RET(s, entry->cpu); |
1899 | SEQ_PUT_FIELD_RET(s, iter->ts); | 1902 | SEQ_PUT_FIELD_RET(s, iter->ts); |
1900 | 1903 | ||
1901 | switch (entry->type) { | 1904 | switch (entry->type) { |