]> git.kernelconcepts.de Git - karo-tx-linux.git/blob - tools/lib/symbol/kallsyms.c
sched: Don't scan all-offline ->cpus_allowed twice if !CONFIG_CPUSETS
[karo-tx-linux.git] / tools / lib / symbol / kallsyms.c
1 #include "symbol/kallsyms.h"
2 #include <stdio.h>
3 #include <stdlib.h>
4
5 int kallsyms__parse(const char *filename, void *arg,
6                     int (*process_symbol)(void *arg, const char *name,
7                                           char type, u64 start))
8 {
9         char *line = NULL;
10         size_t n;
11         int err = -1;
12         FILE *file = fopen(filename, "r");
13
14         if (file == NULL)
15                 goto out_failure;
16
17         err = 0;
18
19         while (!feof(file)) {
20                 u64 start;
21                 int line_len, len;
22                 char symbol_type;
23                 char *symbol_name;
24
25                 line_len = getline(&line, &n, file);
26                 if (line_len < 0 || !line)
27                         break;
28
29                 line[--line_len] = '\0'; /* \n */
30
31                 len = hex2u64(line, &start);
32
33                 len++;
34                 if (len + 2 >= line_len)
35                         continue;
36
37                 symbol_type = line[len];
38                 len += 2;
39                 symbol_name = line + len;
40                 len = line_len - len;
41
42                 if (len >= KSYM_NAME_LEN) {
43                         err = -1;
44                         break;
45                 }
46
47                 err = process_symbol(arg, symbol_name, symbol_type, start);
48                 if (err)
49                         break;
50         }
51
52         free(line);
53         fclose(file);
54         return err;
55
56 out_failure:
57         return -1;
58 }