diff options
author | Adam B. Jerome <abj@novell.com> | 2006-12-06 23:35:30 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.osdl.org> | 2006-12-07 11:39:31 -0500 |
commit | 07354a00901d103085e4376b7df0aad264c1836a (patch) | |
tree | 2eb8a3dec1957f0ad3423e591de5276367182070 /kernel/kallsyms.c | |
parent | 960cc398a7a2acfe455b2ec33c64dc6018c83aab (diff) |
[PATCH] /proc/kallsyms reports lower-case types for some non-exported symbols
This patch addresses incorrect symbol type information reported through
/proc/kallsyms. A lowercase character should designate the symbol as local
(or non-exported). An uppercase character should designate the symbol as
global (or external).
Without this patch, some non-exported symbols are incorrectly assigned an
upper-case designation in /proc/kallsyms. This patch corrects this
condition by converting non-exported symbols types to lower case when
appropriate and eliminates the superfluous upcase_if_global function
Signed-off-by: Adam B. Jerome <abj@novell.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'kernel/kallsyms.c')
-rw-r--r-- | kernel/kallsyms.c | 13 |
1 files changed, 5 insertions, 8 deletions
diff --git a/kernel/kallsyms.c b/kernel/kallsyms.c index eeac3e313b2b..54befe36ee0b 100644 --- a/kernel/kallsyms.c +++ b/kernel/kallsyms.c | |||
@@ -20,6 +20,7 @@ | |||
20 | #include <linux/proc_fs.h> | 20 | #include <linux/proc_fs.h> |
21 | #include <linux/sched.h> /* for cond_resched */ | 21 | #include <linux/sched.h> /* for cond_resched */ |
22 | #include <linux/mm.h> | 22 | #include <linux/mm.h> |
23 | #include <linux/ctype.h> | ||
23 | 24 | ||
24 | #include <asm/sections.h> | 25 | #include <asm/sections.h> |
25 | 26 | ||
@@ -301,13 +302,6 @@ struct kallsym_iter | |||
301 | char name[KSYM_NAME_LEN+1]; | 302 | char name[KSYM_NAME_LEN+1]; |
302 | }; | 303 | }; |
303 | 304 | ||
304 | /* Only label it "global" if it is exported. */ | ||
305 | static void upcase_if_global(struct kallsym_iter *iter) | ||
306 | { | ||
307 | if (is_exported(iter->name, iter->owner)) | ||
308 | iter->type += 'A' - 'a'; | ||
309 | } | ||
310 | |||
311 | static int get_ksymbol_mod(struct kallsym_iter *iter) | 305 | static int get_ksymbol_mod(struct kallsym_iter *iter) |
312 | { | 306 | { |
313 | iter->owner = module_get_kallsym(iter->pos - kallsyms_num_syms, | 307 | iter->owner = module_get_kallsym(iter->pos - kallsyms_num_syms, |
@@ -316,7 +310,10 @@ static int get_ksymbol_mod(struct kallsym_iter *iter) | |||
316 | if (iter->owner == NULL) | 310 | if (iter->owner == NULL) |
317 | return 0; | 311 | return 0; |
318 | 312 | ||
319 | upcase_if_global(iter); | 313 | /* Label it "global" if it is exported, "local" if not exported. */ |
314 | iter->type = is_exported(iter->name, iter->owner) | ||
315 | ? toupper(iter->type) : tolower(iter->type); | ||
316 | |||
320 | return 1; | 317 | return 1; |
321 | } | 318 | } |
322 | 319 | ||