Skip to content

Commit

Permalink
[PATCH] kprobes: handle symbol resolution when <module:.symbol> is sp…
Browse files Browse the repository at this point in the history
…ecified

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>
  • Loading branch information
Ananth N Mavinakayanahalli authored and Linus Torvalds committed Oct 2, 2006
1 parent 3a872d8 commit 412998c
Showing 1 changed file with 11 additions and 4 deletions.
15 changes: 11 additions & 4 deletions include/asm-powerpc/kprobes.h
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down

0 comments on commit 412998c

Please sign in to comment.