kprobes: Convert kprobe_lookup_name() to a function
The macro is now pretty long and ugly on powerpc. In the light of further changes needed here, convert it to a __weak variant to be over-ridden with a nicer looking function. Suggested-by: Masami Hiramatsu <mhiramat@kernel.org> Acked-by: Masami Hiramatsu <mhiramat@kernel.org> Signed-off-by: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
This commit is contained in:

committed by
Michael Ellerman

parent
a460246c70
commit
49e0b4658f
@@ -58,15 +58,6 @@
|
||||
#define KPROBE_TABLE_SIZE (1 << KPROBE_HASH_BITS)
|
||||
|
||||
|
||||
/*
|
||||
* Some oddball architectures like 64bit powerpc have function descriptors
|
||||
* so this must be overridable.
|
||||
*/
|
||||
#ifndef kprobe_lookup_name
|
||||
#define kprobe_lookup_name(name, addr) \
|
||||
addr = ((kprobe_opcode_t *)(kallsyms_lookup_name(name)))
|
||||
#endif
|
||||
|
||||
static int kprobes_initialized;
|
||||
static struct hlist_head kprobe_table[KPROBE_TABLE_SIZE];
|
||||
static struct hlist_head kretprobe_inst_table[KPROBE_TABLE_SIZE];
|
||||
@@ -81,6 +72,11 @@ static struct {
|
||||
raw_spinlock_t lock ____cacheline_aligned_in_smp;
|
||||
} kretprobe_table_locks[KPROBE_TABLE_SIZE];
|
||||
|
||||
kprobe_opcode_t * __weak kprobe_lookup_name(const char *name)
|
||||
{
|
||||
return ((kprobe_opcode_t *)(kallsyms_lookup_name(name)));
|
||||
}
|
||||
|
||||
static raw_spinlock_t *kretprobe_table_lock_ptr(unsigned long hash)
|
||||
{
|
||||
return &(kretprobe_table_locks[hash].lock);
|
||||
@@ -1407,7 +1403,7 @@ static kprobe_opcode_t *kprobe_addr(struct kprobe *p)
|
||||
goto invalid;
|
||||
|
||||
if (p->symbol_name) {
|
||||
kprobe_lookup_name(p->symbol_name, addr);
|
||||
addr = kprobe_lookup_name(p->symbol_name);
|
||||
if (!addr)
|
||||
return ERR_PTR(-ENOENT);
|
||||
}
|
||||
@@ -2199,8 +2195,8 @@ static int __init init_kprobes(void)
|
||||
if (kretprobe_blacklist_size) {
|
||||
/* lookup the function address from its name */
|
||||
for (i = 0; kretprobe_blacklist[i].name != NULL; i++) {
|
||||
kprobe_lookup_name(kretprobe_blacklist[i].name,
|
||||
kretprobe_blacklist[i].addr);
|
||||
kretprobe_blacklist[i].addr =
|
||||
kprobe_lookup_name(kretprobe_blacklist[i].name);
|
||||
if (!kretprobe_blacklist[i].addr)
|
||||
printk("kretprobe: lookup failed: %s\n",
|
||||
kretprobe_blacklist[i].name);
|
||||
|
Reference in New Issue
Block a user