Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

perf tools: Stop reading the kallsyms data from perf.data

As it is not used anymore, since 'perf script' switched to asking
libtraceevent to use tools/perf's symbol resolution routines.

Acked-by: David Ahern <dsahern@gmail.com>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Borislav Petkov <bp@suse.de>
Cc: David Ahern <dsahern@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Stephane Eranian <eranian@google.com>
Cc: Steven Rostedt <rostedt@goodmis.org>
Link: http://lkml.kernel.org/n/tip-4ilhofz4b7o8yokvutjt9yzz@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>

+13 -45
-30
tools/perf/util/trace-event-parse.c
··· 135 135 return event_format__fprintf(event, cpu, data, size, stdout); 136 136 } 137 137 138 - void parse_proc_kallsyms(struct pevent *pevent, 139 - char *file, unsigned int size __maybe_unused) 140 - { 141 - unsigned long long addr; 142 - char *func; 143 - char *line; 144 - char *next = NULL; 145 - char *addr_str; 146 - char *mod; 147 - char *fmt = NULL; 148 - 149 - line = strtok_r(file, "\n", &next); 150 - while (line) { 151 - mod = NULL; 152 - addr_str = strtok_r(line, " ", &fmt); 153 - addr = strtoull(addr_str, NULL, 16); 154 - /* skip character */ 155 - strtok_r(NULL, " ", &fmt); 156 - func = strtok_r(NULL, "\t", &fmt); 157 - mod = strtok_r(NULL, "]", &fmt); 158 - /* truncate the extra '[' */ 159 - if (mod) 160 - mod = mod + 1; 161 - 162 - pevent_register_function(pevent, func, addr, mod); 163 - 164 - line = strtok_r(NULL, "\n", &next); 165 - } 166 - } 167 - 168 138 void parse_ftrace_printk(struct pevent *pevent, 169 139 char *file, unsigned int size __maybe_unused) 170 140 {
+13 -15
tools/perf/util/trace-event-read.c
··· 162 162 static int read_proc_kallsyms(struct pevent *pevent) 163 163 { 164 164 unsigned int size; 165 - char *buf; 166 165 167 166 size = read4(pevent); 168 167 if (!size) 169 168 return 0; 170 - 171 - buf = malloc(size + 1); 172 - if (buf == NULL) 173 - return -1; 174 - 175 - if (do_read(buf, size) < 0) { 176 - free(buf); 177 - return -1; 178 - } 179 - buf[size] = '\0'; 180 - 181 - parse_proc_kallsyms(pevent, buf, size); 182 - 183 - free(buf); 169 + /* 170 + * Just skip it, now that we configure libtraceevent to use the 171 + * tools/perf/ symbol resolver. 172 + * 173 + * We need to skip it so that we can continue parsing old perf.data 174 + * files, that contains this /proc/kallsyms payload. 175 + * 176 + * Newer perf.data files will have just the 4-bytes zeros "kallsyms 177 + * payload", so that older tools can continue reading it and interpret 178 + * it as "no kallsyms payload is present". 179 + */ 180 + lseek(input_fd, size, SEEK_CUR); 181 + trace_data_size += size; 184 182 return 0; 185 183 } 186 184