summaryrefslogtreecommitdiffstats
path: root/include/asm-powerpc
diff options
context:
space:
mode:
authorAnanth N Mavinakayanahalli <ananth@in.ibm.com>2006-10-02 02:17:31 -0700
committerLinus Torvalds <torvalds@g5.osdl.org>2006-10-02 07:57:16 -0700
commit412998cf6bce78b8dc5f68660e09bf3b4fcbb210 (patch)
tree109202550c743399c7b3a1b7c216aaa35e074d38 /include/asm-powerpc
parent3a872d89baae821a0f6e2c1055d4b47650661137 (diff)
downloadlinux-stable-412998cf6bce78b8dc5f68660e09bf3b4fcbb210.tar.gz
linux-stable-412998cf6bce78b8dc5f68660e09bf3b4fcbb210.tar.bz2
linux-stable-412998cf6bce78b8dc5f68660e09bf3b4fcbb210.zip
[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')
-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;
/*
* 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)