Commit ffb45122766db220d0bf3d01848d575fbbcb6430
Committed by
Linus Torvalds
1 parent
ea07890a68
Exists in
master
and in
20 other branches
Simplify kallsyms_lookup()
Several kallsyms_lookup() pass dummy arguments but only need, say, module's name. Make kallsyms_lookup() accept NULLs where possible. Also, makes picture clearer about what interfaces are needed for all symbol resolving business. Signed-off-by: Alexey Dobriyan <adobriyan@sw.ru> Cc: Rusty Russell <rusty@rustcorp.com.au> Acked-by: Ingo Molnar <mingo@elte.hu> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Showing 10 changed files with 20 additions and 28 deletions Side-by-side Diff
arch/parisc/kernel/unwind.c
... | ... | @@ -216,11 +216,8 @@ |
216 | 216 | /* Handle some frequent special cases.... */ |
217 | 217 | { |
218 | 218 | char symname[KSYM_NAME_LEN+1]; |
219 | - char *modname; | |
220 | - unsigned long symsize, offset; | |
221 | 219 | |
222 | - kallsyms_lookup(info->ip, &symsize, &offset, | |
223 | - &modname, symname); | |
220 | + kallsyms_lookup(info->ip, NULL, NULL, NULL, symname); | |
224 | 221 | |
225 | 222 | dbg("info->ip = 0x%lx, name = %s\n", info->ip, symname); |
226 | 223 |
arch/powerpc/xmon/xmon.c
... | ... | @@ -1217,7 +1217,6 @@ |
1217 | 1217 | { |
1218 | 1218 | unsigned long size, offset; |
1219 | 1219 | const char *name; |
1220 | - char *modname; | |
1221 | 1220 | |
1222 | 1221 | *startp = *endp = 0; |
1223 | 1222 | if (pc == 0) |
... | ... | @@ -1225,7 +1224,7 @@ |
1225 | 1224 | if (setjmp(bus_error_jmp) == 0) { |
1226 | 1225 | catch_memory_errors = 1; |
1227 | 1226 | sync(); |
1228 | - name = kallsyms_lookup(pc, &size, &offset, &modname, tmpstr); | |
1227 | + name = kallsyms_lookup(pc, &size, &offset, NULL, tmpstr); | |
1229 | 1228 | if (name != NULL) { |
1230 | 1229 | *startp = pc - offset; |
1231 | 1230 | *endp = pc - offset + size; |
arch/sh64/kernel/unwind.c
... | ... | @@ -46,15 +46,15 @@ |
46 | 46 | struct pt_regs *regs) |
47 | 47 | { |
48 | 48 | const char *sym; |
49 | - char *modname, namebuf[128]; | |
50 | - unsigned long offset, size; | |
49 | + char namebuf[128]; | |
50 | + unsigned long offset; | |
51 | 51 | unsigned long prologue = 0; |
52 | 52 | unsigned long fp_displacement = 0; |
53 | 53 | unsigned long fp_prev = 0; |
54 | 54 | unsigned long offset_r14 = 0, offset_r18 = 0; |
55 | 55 | int i, found_prologue_end = 0; |
56 | 56 | |
57 | - sym = kallsyms_lookup(pc, &size, &offset, &modname, namebuf); | |
57 | + sym = kallsyms_lookup(pc, NULL, &offset, NULL, namebuf); | |
58 | 58 | if (!sym) |
59 | 59 | return -EINVAL; |
60 | 60 |
fs/proc/base.c
... | ... | @@ -278,14 +278,13 @@ |
278 | 278 | */ |
279 | 279 | static int proc_pid_wchan(struct task_struct *task, char *buffer) |
280 | 280 | { |
281 | - char *modname; | |
282 | 281 | const char *sym_name; |
283 | - unsigned long wchan, size, offset; | |
282 | + unsigned long wchan; | |
284 | 283 | char namebuf[KSYM_NAME_LEN+1]; |
285 | 284 | |
286 | 285 | wchan = get_wchan(task); |
287 | 286 | |
288 | - sym_name = kallsyms_lookup(wchan, &size, &offset, &modname, namebuf); | |
287 | + sym_name = kallsyms_lookup(wchan, NULL, NULL, NULL, namebuf); | |
289 | 288 | if (sym_name) |
290 | 289 | return sprintf(buffer, "%s", sym_name); |
291 | 290 | return sprintf(buffer, "%lu", wchan); |
kernel/kallsyms.c
... | ... | @@ -214,8 +214,10 @@ |
214 | 214 | symbol_end = (unsigned long)_etext; |
215 | 215 | } |
216 | 216 | |
217 | - *symbolsize = symbol_end - symbol_start; | |
218 | - *offset = addr - symbol_start; | |
217 | + if (symbolsize) | |
218 | + *symbolsize = symbol_end - symbol_start; | |
219 | + if (offset) | |
220 | + *offset = addr - symbol_start; | |
219 | 221 | |
220 | 222 | return low; |
221 | 223 | } |
kernel/kprobes.c
... | ... | @@ -868,13 +868,13 @@ |
868 | 868 | struct kprobe *p, *kp; |
869 | 869 | const char *sym = NULL; |
870 | 870 | unsigned int i = *(loff_t *) v; |
871 | - unsigned long size, offset = 0; | |
871 | + unsigned long offset = 0; | |
872 | 872 | char *modname, namebuf[128]; |
873 | 873 | |
874 | 874 | head = &kprobe_table[i]; |
875 | 875 | preempt_disable(); |
876 | 876 | hlist_for_each_entry_rcu(p, node, head, hlist) { |
877 | - sym = kallsyms_lookup((unsigned long)p->addr, &size, | |
877 | + sym = kallsyms_lookup((unsigned long)p->addr, NULL, | |
878 | 878 | &offset, &modname, namebuf); |
879 | 879 | if (p->pre_handler == aggr_pre_handler) { |
880 | 880 | list_for_each_entry_rcu(kp, &p->list, list) |
kernel/lockdep.c
... | ... | @@ -340,10 +340,7 @@ |
340 | 340 | |
341 | 341 | const char * __get_key_name(struct lockdep_subclass_key *key, char *str) |
342 | 342 | { |
343 | - unsigned long offs, size; | |
344 | - char *modname; | |
345 | - | |
346 | - return kallsyms_lookup((unsigned long)key, &size, &offs, &modname, str); | |
343 | + return kallsyms_lookup((unsigned long)key, NULL, NULL, NULL, str); | |
347 | 344 | } |
348 | 345 | |
349 | 346 | void |
kernel/module.c
... | ... | @@ -2098,8 +2098,10 @@ |
2098 | 2098 | if (!best) |
2099 | 2099 | return NULL; |
2100 | 2100 | |
2101 | - *size = nextval - mod->symtab[best].st_value; | |
2102 | - *offset = addr - mod->symtab[best].st_value; | |
2101 | + if (size) | |
2102 | + *size = nextval - mod->symtab[best].st_value; | |
2103 | + if (offset) | |
2104 | + *offset = addr - mod->symtab[best].st_value; | |
2103 | 2105 | return mod->strtab + mod->symtab[best].st_name; |
2104 | 2106 | } |
2105 | 2107 |
kernel/time/timer_list.c
... | ... | @@ -40,11 +40,9 @@ |
40 | 40 | { |
41 | 41 | unsigned long addr = (unsigned long)sym; |
42 | 42 | char namebuf[KSYM_NAME_LEN+1]; |
43 | - unsigned long size, offset; | |
44 | 43 | const char *sym_name; |
45 | - char *modname; | |
46 | 44 | |
47 | - sym_name = kallsyms_lookup(addr, &size, &offset, &modname, namebuf); | |
45 | + sym_name = kallsyms_lookup(addr, NULL, NULL, NULL, namebuf); | |
48 | 46 | if (sym_name) |
49 | 47 | SEQ_printf(m, "%s", sym_name); |
50 | 48 | else |
kernel/time/timer_stats.c
... | ... | @@ -258,11 +258,9 @@ |
258 | 258 | static void print_name_offset(struct seq_file *m, unsigned long addr) |
259 | 259 | { |
260 | 260 | char namebuf[KSYM_NAME_LEN+1]; |
261 | - unsigned long size, offset; | |
262 | 261 | const char *sym_name; |
263 | - char *modname; | |
264 | 262 | |
265 | - sym_name = kallsyms_lookup(addr, &size, &offset, &modname, namebuf); | |
263 | + sym_name = kallsyms_lookup(addr, NULL, NULL, NULL, namebuf); | |
266 | 264 | if (sym_name) |
267 | 265 | seq_printf(m, "%s", sym_name); |
268 | 266 | else |