| From 2e7bac536106236104e9e339531ff0fcdb7b8147 Mon Sep 17 00:00:00 2001 |
| From: Rusty Russell <rusty@rustcorp.com.au> |
| Date: Wed, 3 Feb 2016 16:55:26 +1030 |
| Subject: module: wrapper for symbol name. |
| |
| From: Rusty Russell <rusty@rustcorp.com.au> |
| |
| commit 2e7bac536106236104e9e339531ff0fcdb7b8147 upstream. |
| |
| This trivial wrapper adds clarity and makes the following patch |
| smaller. |
| |
| Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| kernel/module.c | 26 +++++++++++++++----------- |
| 1 file changed, 15 insertions(+), 11 deletions(-) |
| |
| --- a/kernel/module.c |
| +++ b/kernel/module.c |
| @@ -3381,6 +3381,11 @@ static inline int is_arm_mapping_symbol( |
| && (str[2] == '\0' || str[2] == '.'); |
| } |
| |
| +static const char *symname(struct module *mod, unsigned int symnum) |
| +{ |
| + return mod->strtab + mod->symtab[symnum].st_name; |
| +} |
| + |
| static const char *get_ksymbol(struct module *mod, |
| unsigned long addr, |
| unsigned long *size, |
| @@ -3403,15 +3408,15 @@ static const char *get_ksymbol(struct mo |
| |
| /* We ignore unnamed symbols: they're uninformative |
| * and inserted at a whim. */ |
| + if (*symname(mod, i) == '\0' |
| + || is_arm_mapping_symbol(symname(mod, i))) |
| + continue; |
| + |
| if (mod->symtab[i].st_value <= addr |
| - && mod->symtab[i].st_value > mod->symtab[best].st_value |
| - && *(mod->strtab + mod->symtab[i].st_name) != '\0' |
| - && !is_arm_mapping_symbol(mod->strtab + mod->symtab[i].st_name)) |
| + && mod->symtab[i].st_value > mod->symtab[best].st_value) |
| best = i; |
| if (mod->symtab[i].st_value > addr |
| - && mod->symtab[i].st_value < nextval |
| - && *(mod->strtab + mod->symtab[i].st_name) != '\0' |
| - && !is_arm_mapping_symbol(mod->strtab + mod->symtab[i].st_name)) |
| + && mod->symtab[i].st_value < nextval) |
| nextval = mod->symtab[i].st_value; |
| } |
| |
| @@ -3422,7 +3427,7 @@ static const char *get_ksymbol(struct mo |
| *size = nextval - mod->symtab[best].st_value; |
| if (offset) |
| *offset = addr - mod->symtab[best].st_value; |
| - return mod->strtab + mod->symtab[best].st_name; |
| + return symname(mod, best); |
| } |
| |
| /* For kallsyms to ask for address resolution. NULL means not found. Careful |
| @@ -3523,8 +3528,7 @@ int module_get_kallsym(unsigned int symn |
| if (symnum < mod->num_symtab) { |
| *value = mod->symtab[symnum].st_value; |
| *type = mod->symtab[symnum].st_info; |
| - strlcpy(name, mod->strtab + mod->symtab[symnum].st_name, |
| - KSYM_NAME_LEN); |
| + strlcpy(name, symname(mod, symnum), KSYM_NAME_LEN); |
| strlcpy(module_name, mod->name, MODULE_NAME_LEN); |
| *exported = is_exported(name, *value, mod); |
| preempt_enable(); |
| @@ -3541,7 +3545,7 @@ static unsigned long mod_find_symname(st |
| unsigned int i; |
| |
| for (i = 0; i < mod->num_symtab; i++) |
| - if (strcmp(name, mod->strtab+mod->symtab[i].st_name) == 0 && |
| + if (strcmp(name, symname(mod, i)) == 0 && |
| mod->symtab[i].st_info != 'U') |
| return mod->symtab[i].st_value; |
| return 0; |
| @@ -3583,7 +3587,7 @@ int module_kallsyms_on_each_symbol(int ( |
| if (mod->state == MODULE_STATE_UNFORMED) |
| continue; |
| for (i = 0; i < mod->num_symtab; i++) { |
| - ret = fn(data, mod->strtab + mod->symtab[i].st_name, |
| + ret = fn(data, symname(mod, i), |
| mod, mod->symtab[i].st_value); |
| if (ret != 0) |
| return ret; |