aboutsummaryrefslogtreecommitdiffstats
path: root/kernel
diff options
context:
space:
mode:
authorAndrew Morton <akpm@osdl.org>2004-05-14 20:19:25 -0700
committerLinus Torvalds <torvalds@ppc970.osdl.org>2004-05-14 20:19:25 -0700
commit53d202028111ae48b54d8b88e9f71a8d4630b668 (patch)
treed44b7e4a752f53c729a06b669997f371ed9990b1 /kernel
parentbfb288f1177db455dca1387fd3b97e3b9b94b09c (diff)
downloadhistory-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.c14
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];