|
@@ -177,6 +177,50 @@ ftrace_print_hex_seq(struct trace_seq *p, const unsigned char *buf, int buf_len)
|
|
}
|
|
}
|
|
EXPORT_SYMBOL(ftrace_print_hex_seq);
|
|
EXPORT_SYMBOL(ftrace_print_hex_seq);
|
|
|
|
|
|
|
|
+const char *
|
|
|
|
+ftrace_print_array_seq(struct trace_seq *p, const void *buf, int buf_len,
|
|
|
|
+ size_t el_size)
|
|
|
|
+{
|
|
|
|
+ const char *ret = trace_seq_buffer_ptr(p);
|
|
|
|
+ const char *prefix = "";
|
|
|
|
+ void *ptr = (void *)buf;
|
|
|
|
+
|
|
|
|
+ trace_seq_putc(p, '{');
|
|
|
|
+
|
|
|
|
+ while (ptr < buf + buf_len) {
|
|
|
|
+ switch (el_size) {
|
|
|
|
+ case 1:
|
|
|
|
+ trace_seq_printf(p, "%s0x%x", prefix,
|
|
|
|
+ *(u8 *)ptr);
|
|
|
|
+ break;
|
|
|
|
+ case 2:
|
|
|
|
+ trace_seq_printf(p, "%s0x%x", prefix,
|
|
|
|
+ *(u16 *)ptr);
|
|
|
|
+ break;
|
|
|
|
+ case 4:
|
|
|
|
+ trace_seq_printf(p, "%s0x%x", prefix,
|
|
|
|
+ *(u32 *)ptr);
|
|
|
|
+ break;
|
|
|
|
+ case 8:
|
|
|
|
+ trace_seq_printf(p, "%s0x%llx", prefix,
|
|
|
|
+ *(u64 *)ptr);
|
|
|
|
+ break;
|
|
|
|
+ default:
|
|
|
|
+ trace_seq_printf(p, "BAD SIZE:%zu 0x%x", el_size,
|
|
|
|
+ *(u8 *)ptr);
|
|
|
|
+ el_size = 1;
|
|
|
|
+ }
|
|
|
|
+ prefix = ",";
|
|
|
|
+ ptr += el_size;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ trace_seq_putc(p, '}');
|
|
|
|
+ trace_seq_putc(p, 0);
|
|
|
|
+
|
|
|
|
+ return ret;
|
|
|
|
+}
|
|
|
|
+EXPORT_SYMBOL(ftrace_print_array_seq);
|
|
|
|
+
|
|
int ftrace_raw_output_prep(struct trace_iterator *iter,
|
|
int ftrace_raw_output_prep(struct trace_iterator *iter,
|
|
struct trace_event *trace_event)
|
|
struct trace_event *trace_event)
|
|
{
|
|
{
|