diff options
author | Ananth N Mavinakayanahalli <ananth@in.ibm.com> | 2006-10-02 13:17:31 +0400 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-10-02 18:57:16 +0400 |
commit | 412998cf6bce78b8dc5f68660e09bf3b4fcbb210 (patch) | |
tree | 109202550c743399c7b3a1b7c216aaa35e074d38 /include/asm-powerpc/kprobes.h | |
parent | 3a872d89baae821a0f6e2c1055d4b47650661137 (diff) | |
download | linux-412998cf6bce78b8dc5f68660e09bf3b4fcbb210.tar.xz |
[PATCH] kprobes: handle symbol resolution when <module:.symbol> is specified
kallsyms_lookup_name() allows for <module:symbol> style specification for
looking up symbol addresses. Handle the case where the user specifies
<module:.symbol> on powerpc, given that 64-bit powerpc uses function
descriptors.
Signed-off-by: Anil S Keshavamurthy <anil.s.keshavamurthy@intel.com>
Signed-off-by: Ananth N Mavinakayanahalli <ananth@in.ibm.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'include/asm-powerpc/kprobes.h')
-rw-r--r-- | include/asm-powerpc/kprobes.h | 15 |
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; /* * 64bit powerpc uses function descriptors. * Handle cases where: - * - User passes a <.symbol> - * - User passes a <symbol> + * - User passes a <.symbol> or <module:.symbol> + * - User passes a <symbol> or <module:symbol> * - User passes a non-existant symbol, kallsyms_lookup_name * returns 0. Don't deref the NULL pointer in that case */ #define kprobe_lookup_name(name, addr) \ { \ addr = (kprobe_opcode_t *)kallsyms_lookup_name(name); \ - if (!(name[0] == '.') && addr) \ - addr = *(kprobe_opcode_t **)addr; \ + if (addr) { \ + char *colon; \ + if ((colon = strchr(name, ':')) != NULL) { \ + colon++; \ + if (*colon != '\0' && *colon != '.') \ + addr = *(kprobe_opcode_t **)addr; \ + } else if (name[0] != '.') \ + addr = *(kprobe_opcode_t **)addr; \ + } \ } #define JPROBE_ENTRY(pentry) (kprobe_opcode_t *)((func_descr_t *)pentry) |