From: Ananth N Mavinakayanahalli Date: Mon, 2 Oct 2006 09:17:31 +0000 (-0700) Subject: [PATCH] kprobes: handle symbol resolution when is specified X-Git-Tag: v2.6.19-rc1~459 X-Git-Url: http://pilppa.com/gitweb/?a=commitdiff_plain;h=412998cf6bce78b8dc5f68660e09bf3b4fcbb210;p=linux-2.6-omap-h63xx.git [PATCH] kprobes: handle symbol resolution when is specified kallsyms_lookup_name() allows for style specification for looking up symbol addresses. Handle the case where the user specifies on powerpc, given that 64-bit powerpc uses function descriptors. Signed-off-by: Anil S Keshavamurthy Signed-off-by: Ananth N Mavinakayanahalli Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds --- diff --git a/include/asm-powerpc/kprobes.h b/include/asm-powerpc/kprobes.h index 1ef54be6abf..2dafa376a63 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 + * - User passes a <.symbol> or + * - User passes a or * - 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)