| // SPDX-License-Identifier: GPL-2.0 |
| #include "symbol/kallsyms.h" |
| u8 kallsyms2elf_type(char type) |
| return (type == 't' || type == 'w') ? STT_FUNC : STT_OBJECT; |
| bool kallsyms__is_function(char symbol_type) |
| symbol_type = toupper(symbol_type); |
| return symbol_type == 'T' || symbol_type == 'W'; |
| int kallsyms__parse(const char *filename, void *arg, |
| int (*process_symbol)(void *arg, const char *name, |
| FILE *file = fopen(filename, "r"); |
| line_len = getline(&line, &n, file); |
| if (line_len < 0 || !line) |
| line[--line_len] = '\0'; /* \n */ |
| len = hex2u64(line, &start); |
| /* Skip the line if we failed to parse the address. */ |
| symbol_name = line + len; |
| if (len >= KSYM_NAME_LEN) { |
| err = process_symbol(arg, symbol_name, symbol_type, start); |