forked from Minki/linux
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>
This commit is contained in:
parent
ea07890a68
commit
ffb4512276
@ -216,11 +216,8 @@ static void unwind_frame_regs(struct unwind_frame_info *info)
|
|||||||
/* Handle some frequent special cases.... */
|
/* Handle some frequent special cases.... */
|
||||||
{
|
{
|
||||||
char symname[KSYM_NAME_LEN+1];
|
char symname[KSYM_NAME_LEN+1];
|
||||||
char *modname;
|
|
||||||
unsigned long symsize, offset;
|
|
||||||
|
|
||||||
kallsyms_lookup(info->ip, &symsize, &offset,
|
kallsyms_lookup(info->ip, NULL, NULL, NULL, symname);
|
||||||
&modname, symname);
|
|
||||||
|
|
||||||
dbg("info->ip = 0x%lx, name = %s\n", info->ip, symname);
|
dbg("info->ip = 0x%lx, name = %s\n", info->ip, symname);
|
||||||
|
|
||||||
|
@ -1217,7 +1217,6 @@ static void get_function_bounds(unsigned long pc, unsigned long *startp,
|
|||||||
{
|
{
|
||||||
unsigned long size, offset;
|
unsigned long size, offset;
|
||||||
const char *name;
|
const char *name;
|
||||||
char *modname;
|
|
||||||
|
|
||||||
*startp = *endp = 0;
|
*startp = *endp = 0;
|
||||||
if (pc == 0)
|
if (pc == 0)
|
||||||
@ -1225,7 +1224,7 @@ static void get_function_bounds(unsigned long pc, unsigned long *startp,
|
|||||||
if (setjmp(bus_error_jmp) == 0) {
|
if (setjmp(bus_error_jmp) == 0) {
|
||||||
catch_memory_errors = 1;
|
catch_memory_errors = 1;
|
||||||
sync();
|
sync();
|
||||||
name = kallsyms_lookup(pc, &size, &offset, &modname, tmpstr);
|
name = kallsyms_lookup(pc, &size, &offset, NULL, tmpstr);
|
||||||
if (name != NULL) {
|
if (name != NULL) {
|
||||||
*startp = pc - offset;
|
*startp = pc - offset;
|
||||||
*endp = pc - offset + size;
|
*endp = pc - offset + size;
|
||||||
|
@ -46,15 +46,15 @@ static int lookup_prev_stack_frame(unsigned long fp, unsigned long pc,
|
|||||||
struct pt_regs *regs)
|
struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
const char *sym;
|
const char *sym;
|
||||||
char *modname, namebuf[128];
|
char namebuf[128];
|
||||||
unsigned long offset, size;
|
unsigned long offset;
|
||||||
unsigned long prologue = 0;
|
unsigned long prologue = 0;
|
||||||
unsigned long fp_displacement = 0;
|
unsigned long fp_displacement = 0;
|
||||||
unsigned long fp_prev = 0;
|
unsigned long fp_prev = 0;
|
||||||
unsigned long offset_r14 = 0, offset_r18 = 0;
|
unsigned long offset_r14 = 0, offset_r18 = 0;
|
||||||
int i, found_prologue_end = 0;
|
int i, found_prologue_end = 0;
|
||||||
|
|
||||||
sym = kallsyms_lookup(pc, &size, &offset, &modname, namebuf);
|
sym = kallsyms_lookup(pc, NULL, &offset, NULL, namebuf);
|
||||||
if (!sym)
|
if (!sym)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
|
@ -278,14 +278,13 @@ static int proc_pid_auxv(struct task_struct *task, char *buffer)
|
|||||||
*/
|
*/
|
||||||
static int proc_pid_wchan(struct task_struct *task, char *buffer)
|
static int proc_pid_wchan(struct task_struct *task, char *buffer)
|
||||||
{
|
{
|
||||||
char *modname;
|
|
||||||
const char *sym_name;
|
const char *sym_name;
|
||||||
unsigned long wchan, size, offset;
|
unsigned long wchan;
|
||||||
char namebuf[KSYM_NAME_LEN+1];
|
char namebuf[KSYM_NAME_LEN+1];
|
||||||
|
|
||||||
wchan = get_wchan(task);
|
wchan = get_wchan(task);
|
||||||
|
|
||||||
sym_name = kallsyms_lookup(wchan, &size, &offset, &modname, namebuf);
|
sym_name = kallsyms_lookup(wchan, NULL, NULL, NULL, namebuf);
|
||||||
if (sym_name)
|
if (sym_name)
|
||||||
return sprintf(buffer, "%s", sym_name);
|
return sprintf(buffer, "%s", sym_name);
|
||||||
return sprintf(buffer, "%lu", wchan);
|
return sprintf(buffer, "%lu", wchan);
|
||||||
|
@ -214,8 +214,10 @@ static unsigned long get_symbol_pos(unsigned long addr,
|
|||||||
symbol_end = (unsigned long)_etext;
|
symbol_end = (unsigned long)_etext;
|
||||||
}
|
}
|
||||||
|
|
||||||
*symbolsize = symbol_end - symbol_start;
|
if (symbolsize)
|
||||||
*offset = addr - symbol_start;
|
*symbolsize = symbol_end - symbol_start;
|
||||||
|
if (offset)
|
||||||
|
*offset = addr - symbol_start;
|
||||||
|
|
||||||
return low;
|
return low;
|
||||||
}
|
}
|
||||||
|
@ -868,13 +868,13 @@ static int __kprobes show_kprobe_addr(struct seq_file *pi, void *v)
|
|||||||
struct kprobe *p, *kp;
|
struct kprobe *p, *kp;
|
||||||
const char *sym = NULL;
|
const char *sym = NULL;
|
||||||
unsigned int i = *(loff_t *) v;
|
unsigned int i = *(loff_t *) v;
|
||||||
unsigned long size, offset = 0;
|
unsigned long offset = 0;
|
||||||
char *modname, namebuf[128];
|
char *modname, namebuf[128];
|
||||||
|
|
||||||
head = &kprobe_table[i];
|
head = &kprobe_table[i];
|
||||||
preempt_disable();
|
preempt_disable();
|
||||||
hlist_for_each_entry_rcu(p, node, head, hlist) {
|
hlist_for_each_entry_rcu(p, node, head, hlist) {
|
||||||
sym = kallsyms_lookup((unsigned long)p->addr, &size,
|
sym = kallsyms_lookup((unsigned long)p->addr, NULL,
|
||||||
&offset, &modname, namebuf);
|
&offset, &modname, namebuf);
|
||||||
if (p->pre_handler == aggr_pre_handler) {
|
if (p->pre_handler == aggr_pre_handler) {
|
||||||
list_for_each_entry_rcu(kp, &p->list, list)
|
list_for_each_entry_rcu(kp, &p->list, list)
|
||||||
|
@ -340,10 +340,7 @@ static const char *usage_str[] =
|
|||||||
|
|
||||||
const char * __get_key_name(struct lockdep_subclass_key *key, char *str)
|
const char * __get_key_name(struct lockdep_subclass_key *key, char *str)
|
||||||
{
|
{
|
||||||
unsigned long offs, size;
|
return kallsyms_lookup((unsigned long)key, NULL, NULL, NULL, str);
|
||||||
char *modname;
|
|
||||||
|
|
||||||
return kallsyms_lookup((unsigned long)key, &size, &offs, &modname, str);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -2098,8 +2098,10 @@ static const char *get_ksymbol(struct module *mod,
|
|||||||
if (!best)
|
if (!best)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
*size = nextval - mod->symtab[best].st_value;
|
if (size)
|
||||||
*offset = addr - mod->symtab[best].st_value;
|
*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 mod->strtab + mod->symtab[best].st_name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -40,11 +40,9 @@ static void print_name_offset(struct seq_file *m, void *sym)
|
|||||||
{
|
{
|
||||||
unsigned long addr = (unsigned long)sym;
|
unsigned long addr = (unsigned long)sym;
|
||||||
char namebuf[KSYM_NAME_LEN+1];
|
char namebuf[KSYM_NAME_LEN+1];
|
||||||
unsigned long size, offset;
|
|
||||||
const char *sym_name;
|
const char *sym_name;
|
||||||
char *modname;
|
|
||||||
|
|
||||||
sym_name = kallsyms_lookup(addr, &size, &offset, &modname, namebuf);
|
sym_name = kallsyms_lookup(addr, NULL, NULL, NULL, namebuf);
|
||||||
if (sym_name)
|
if (sym_name)
|
||||||
SEQ_printf(m, "%s", sym_name);
|
SEQ_printf(m, "%s", sym_name);
|
||||||
else
|
else
|
||||||
|
@ -258,11 +258,9 @@ void timer_stats_update_stats(void *timer, pid_t pid, void *startf,
|
|||||||
static void print_name_offset(struct seq_file *m, unsigned long addr)
|
static void print_name_offset(struct seq_file *m, unsigned long addr)
|
||||||
{
|
{
|
||||||
char namebuf[KSYM_NAME_LEN+1];
|
char namebuf[KSYM_NAME_LEN+1];
|
||||||
unsigned long size, offset;
|
|
||||||
const char *sym_name;
|
const char *sym_name;
|
||||||
char *modname;
|
|
||||||
|
|
||||||
sym_name = kallsyms_lookup(addr, &size, &offset, &modname, namebuf);
|
sym_name = kallsyms_lookup(addr, NULL, NULL, NULL, namebuf);
|
||||||
if (sym_name)
|
if (sym_name)
|
||||||
seq_printf(m, "%s", sym_name);
|
seq_printf(m, "%s", sym_name);
|
||||||
else
|
else
|
||||||
|
Loading…
Reference in New Issue
Block a user