diff options
author | Andrew Morton <akpm@osdl.org> | 2004-05-14 20:19:25 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2004-05-14 20:19:25 -0700 |
commit | 53d202028111ae48b54d8b88e9f71a8d4630b668 (patch) | |
tree | d44b7e4a752f53c729a06b669997f371ed9990b1 /kernel | |
parent | bfb288f1177db455dca1387fd3b97e3b9b94b09c (diff) | |
download | history-53d202028111ae48b54d8b88e9f71a8d4630b668.tar.gz |
[PATCH] Include Aliases in kallsyms
From: Rusty Russell <rusty@rustcorp.com.au>
Kallsyms discards symbols with the same address, but these are sometimes
useful. Skip this minor optimization and make kallsyms_lookup deal with
aliases
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/kallsyms.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/kernel/kallsyms.c b/kernel/kallsyms.c index 2fb55848fb2fd2..a13931cff54a92 100644 --- a/kernel/kallsyms.c +++ b/kernel/kallsyms.c @@ -88,14 +88,20 @@ const char *kallsyms_lookup(unsigned long addr, name += strlen(name) + 1; } - /* Base symbol size on next symbol. */ - if (best + 1 < kallsyms_num_syms) - symbol_end = kallsyms_addresses[best + 1]; - else if (is_kernel_inittext(addr)) + /* At worst, symbol ends at end of section. */ + if (is_kernel_inittext(addr)) symbol_end = (unsigned long)_einittext; else symbol_end = (unsigned long)_etext; + /* Search for next non-aliased symbol */ + for (i = best+1; i < kallsyms_num_syms; i++) { + if (kallsyms_addresses[i] > kallsyms_addresses[best]) { + symbol_end = kallsyms_addresses[i]; + break; + } + } + *symbolsize = symbol_end - kallsyms_addresses[best]; *modname = NULL; *offset = addr - kallsyms_addresses[best]; |