void parse_proc_kallsyms(struct pevent *pevent, char *file, unsigned int size __maybe_unused) { unsigned long long addr; char *func; char *line; char *next = NULL; char *addr_str; char *mod; char *fmt = NULL; line = strtok_r(file, "\n", &next); while (line) { mod = NULL; addr_str = strtok_r(line, " ", &fmt); addr = strtoull(addr_str, NULL, 16); /* skip character */ strtok_r(NULL, " ", &fmt); func = strtok_r(NULL, "\t", &fmt); mod = strtok_r(NULL, "]", &fmt); /* truncate the extra '[' */ if (mod) mod = mod + 1; pevent_register_function(pevent, func, addr, mod); line = strtok_r(NULL, "\n", &next); } }
void parse_proc_kallsyms(struct pevent *pevent, char *file, unsigned int size __unused) { unsigned long long addr; char *func; char *line; char *next = NULL; char *addr_str; char *mod; char ch; line = strtok_r(file, "\n", &next); while (line) { mod = NULL; sscanf(line, "%as %c %as\t[%as", (float *)(void *)&addr_str, /* workaround gcc warning */ &ch, (float *)(void *)&func, (float *)(void *)&mod); addr = strtoull(addr_str, NULL, 16); free(addr_str); /* truncate the extra ']' */ if (mod) mod[strlen(mod) - 1] = 0; pevent_register_function(pevent, func, addr, mod); free(func); free(mod); line = strtok_r(NULL, "\n", &next); } }
void parse_proc_kallsyms(struct pevent *pevent, char *file, unsigned int size __maybe_unused) { unsigned long long addr; char *func; char *line; char *next = NULL; char *addr_str; char *mod; char ch; line = strtok_r(file, "\n", &next); while (line) { mod = NULL; errno = 0; sscanf(line, "%ms %c %ms\t[%ms", &addr_str, &ch, &func, &mod); if (errno) { free(addr_str); free(func); free(mod); perror("sscanf"); return; } addr = strtoull(addr_str, NULL, 16); free(addr_str); /* truncate the extra ']' */ if (mod) mod[strlen(mod) - 1] = 0; /* * Hacks for * - arm arch that adds a lot of bogus '$a' functions * - x86-64 that reports per-cpu variable offsets as absolute */ if (func[0] != '$' && ch != 'A') pevent_register_function(pevent, func, addr, mod); free(func); free(mod); line = strtok_r(NULL, "\n", &next); } }