aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/trace/trace.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/trace/trace.c')
-rw-r--r--kernel/trace/trace.c41
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
1237static inline int kretprobed(unsigned long addr) 1235static 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
1242static inline int kretprobed(unsigned long addr) 1245static 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) {