Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 412998cf authored by Ananth N Mavinakayanahalli's avatar Ananth N Mavinakayanahalli Committed by Linus Torvalds
Browse files

[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: default avatarAnil S Keshavamurthy <anil.s.keshavamurthy@intel.com>
Signed-off-by: default avatarAnanth N Mavinakayanahalli <ananth@in.ibm.com>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 3a872d89
Loading
Loading
Loading
Loading
+11 −4
Original line number Diff line number Diff line
@@ -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)					\
	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)