]> www.infradead.org Git - users/mchehab/rasdaemon.git/commitdiff
libtrace: sync with latest changeset
authorMauro Carvalho Chehab <mchehab@redhat.com>
Thu, 2 May 2013 20:10:33 +0000 (17:10 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Thu, 2 May 2013 20:14:35 +0000 (17:14 -0300)
Sync it with the last upstream changeset(07f0eee).

Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
libtrace/event-parse.c
libtrace/event-parse.h
libtrace/kbuffer-parse.c
libtrace/kbuffer.h

index 93c6151a89e38d67222d1d5170775fc2d369b879..b357460ef1819ab43c2f054712ff1154cbd0c166 100644 (file)
@@ -600,10 +600,11 @@ find_printk(struct pevent *pevent, unsigned long long addr)
  * This registers a string by the address it was stored in the kernel.
  * The @fmt passed in is duplicated.
  */
-int pevent_register_print_string(struct pevent *pevent, char *fmt,
+int pevent_register_print_string(struct pevent *pevent, const char *fmt,
                                 unsigned long long addr)
 {
        struct printk_list *item = malloc(sizeof(*item));
+       char *p;
 
        if (!item)
                return -1;
@@ -611,10 +612,21 @@ int pevent_register_print_string(struct pevent *pevent, char *fmt,
        item->next = pevent->printklist;
        item->addr = addr;
 
+       /* Strip off quotes and '\n' from the end */
+       if (fmt[0] == '"')
+               fmt++;
        item->printk = strdup(fmt);
        if (!item->printk)
                goto out_free;
 
+       p = item->printk + strlen(item->printk) - 1;
+       if (*p == '"')
+               *p = 0;
+
+       p -= 2;
+       if (strcmp(p, "\\n") == 0)
+               *p = 0;
+
        pevent->printklist = item;
        pevent->printk_count++;
 
@@ -3451,6 +3463,7 @@ static void print_str_arg(struct trace_seq *s, void *data, int size,
        struct pevent *pevent = event->pevent;
        struct print_flag_sym *flag;
        struct format_field *field;
+       struct printk_map *printk;
        unsigned long long val, fval;
        unsigned long addr;
        char *str;
@@ -3486,7 +3499,12 @@ static void print_str_arg(struct trace_seq *s, void *data, int size,
                if (!(field->flags & FIELD_IS_ARRAY) &&
                    field->size == pevent->long_size) {
                        addr = *(unsigned long *)(data + field->offset);
-                       trace_seq_printf(s, "%lx", addr);
+                       /* Check if it matches a print format */
+                       printk = find_printk(pevent, addr);
+                       if (printk)
+                               trace_seq_puts(s, printk->printk);
+                       else
+                               trace_seq_printf(s, "%lx", addr);
                        break;
                }
                str = malloc(len + 1);
@@ -3734,8 +3752,8 @@ static struct print_arg *make_bprint_args(char *fmt, void *data, int size, struc
        if (asprintf(&arg->atom.atom, "%lld", ip) < 0)
                goto out_free;
 
-       /* skip the first "%pf : " */
-       for (ptr = fmt + 6, bptr = data + field->offset;
+       /* skip the first "%pf: " */
+       for (ptr = fmt + 5, bptr = data + field->offset;
             bptr < data + size && *ptr; ptr++) {
                int ls = 0;
 
@@ -3845,7 +3863,6 @@ get_bprint_format(void *data, int size __maybe_unused,
        struct format_field *field;
        struct printk_map *printk;
        char *format;
-       char *p;
 
        field = pevent->bprint_fmt_field;
 
@@ -3862,25 +3879,13 @@ get_bprint_format(void *data, int size __maybe_unused,
 
        printk = find_printk(pevent, addr);
        if (!printk) {
-               if (asprintf(&format, "%%pf : (NO FORMAT FOUND at %llx)\n", addr) < 0)
+               if (asprintf(&format, "%%pf: (NO FORMAT FOUND at %llx)\n", addr) < 0)
                        return NULL;
                return format;
        }
 
-       p = printk->printk;
-       /* Remove any quotes. */
-       if (*p == '"')
-               p++;
-       if (asprintf(&format, "%s : %s", "%pf", p) < 0)
+       if (asprintf(&format, "%s: %s", "%pf", printk->printk) < 0)
                return NULL;
-       /* remove ending quotes and new line since we will add one too */
-       p = format + strlen(format) - 1;
-       if (*p == '"')
-               *p = 0;
-
-       p -= 2;
-       if (strcmp(p, "\\n") == 0)
-               *p = 0;
 
        return format;
 }
index de31909b113b956e5af26a0b9483f27b970c319c..05e99fae5fcd7b9b70b19fd966d1c4eacd11383b 100644 (file)
@@ -535,7 +535,7 @@ enum trace_flag_type {
 int pevent_register_comm(struct pevent *pevent, const char *comm, int pid);
 int pevent_register_function(struct pevent *pevent, char *name,
                             unsigned long long addr, char *mod);
-int pevent_register_print_string(struct pevent *pevent, char *fmt,
+int pevent_register_print_string(struct pevent *pevent, const char *fmt,
                                 unsigned long long addr);
 int pevent_pid_is_registered(struct pevent *pevent, int pid);
 
index 2d0f3412e28c25e175df2b436f0ef024e789632a..3fe3ba9eba430bb59bb47ec24cc314d1ac26f2c2 100644 (file)
@@ -732,3 +732,14 @@ void kbuffer_set_old_format(struct kbuffer *kbuf)
 
        kbuf->next_event = __old_next_event;
 }
+
+/**
+ * kbuffer_start_of_data - return offset of where data starts on subbuffer
+ * @kbuf:      The kbuffer
+ *
+ * Returns the location on the subbuffer where the data starts.
+ */
+int kbuffer_start_of_data(struct kbuffer *kbuf)
+{
+       return kbuf->start;
+}
index c831f64b17a06f70381abf2a3c5b3f9baa54994d..03dce757553f14b123f7f678b42550722e5c9656 100644 (file)
@@ -63,5 +63,6 @@ int kbuffer_missed_events(struct kbuffer *kbuf);
 int kbuffer_subbuffer_size(struct kbuffer *kbuf);
 
 void kbuffer_set_old_format(struct kbuffer *kbuf);
+int kbuffer_start_of_data(struct kbuffer *kbuf);
 
 #endif /* _K_BUFFER_H */