aboutsummaryrefslogtreecommitdiffstats
path: root/include/asm-powerpc/kprobes.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/asm-powerpc/kprobes.h')
-rw-r--r--include/asm-powerpc/kprobes.h15
1 files changed, 11 insertions, 4 deletions
diff --git a/include/asm-powerpc/kprobes.h b/include/asm-powerpc/kprobes.h
index 1ef54be6abfa..2dafa376a63f 100644
--- a/include/asm-powerpc/kprobes.h
+++ b/include/asm-powerpc/kprobes.h
@@ -47,16 +47,23 @@ typedef unsigned int kprobe_opcode_t;
47/* 47/*
48 * 64bit powerpc uses function descriptors. 48 * 64bit powerpc uses function descriptors.
49 * Handle cases where: 49 * Handle cases where:
50 * - User passes a <.symbol> 50 * - User passes a <.symbol> or <module:.symbol>
51 * - User passes a <symbol> 51 * - User passes a <symbol> or <module:symbol>
52 * - User passes a non-existant symbol, kallsyms_lookup_name 52 * - User passes a non-existant symbol, kallsyms_lookup_name
53 * returns 0. Don't deref the NULL pointer in that case 53 * returns 0. Don't deref the NULL pointer in that case
54 */ 54 */
55#define kprobe_lookup_name(name, addr) \ 55#define kprobe_lookup_name(name, addr) \
56{ \ 56{ \
57 addr = (kprobe_opcode_t *)kallsyms_lookup_name(name); \ 57 addr = (kprobe_opcode_t *)kallsyms_lookup_name(name); \
58 if (!(name[0] == '.') && addr) \ 58 if (addr) { \
59 addr = *(kprobe_opcode_t **)addr; \ 59 char *colon; \
60 if ((colon = strchr(name, ':')) != NULL) { \
61 colon++; \
62 if (*colon != '\0' && *colon != '.') \
63 addr = *(kprobe_opcode_t **)addr; \
64 } else if (name[0] != '.') \
65 addr = *(kprobe_opcode_t **)addr; \
66 } \
60} 67}
61 68
62#define JPROBE_ENTRY(pentry) (kprobe_opcode_t *)((func_descr_t *)pentry) 69#define JPROBE_ENTRY(pentry) (kprobe_opcode_t *)((func_descr_t *)pentry)