[POWERPC] Transparently handle <.symbol> lookup for kprobes
authorSrinivasa Ds <srinivasa@in.ibm.com>
Mon, 23 Apr 2007 05:58:49 +0000 (11:28 +0530)
committerPaul Mackerras <paulus@samba.org>
Wed, 2 May 2007 10:04:32 +0000 (20:04 +1000)
When data symbols are not present in kernel image, user needs to add
dot(".") before function name explicitly, that he wants to probe in kprobe
module on ppc64.

for ex:-
When data symbols are missing on ppc64,
====================
[root@llm27lp1 ~]# cat /proc/kallsyms | grep do_fork
c00000000006283c T .do_fork
==============================
User needs add "." to "do_fork"

kp.symbol_name = ".do_fork";
============================

This makes kprobe modules unportable.  This fixes the problem.

Signed-off-by: Srinivasa Ds <srinivasa@in.ibm.com>
Signed-off-by: Ananth N Mavinakayanahalli <ananth@in.ibm.com>
Signed-off-by: Paul Mackerras <paulus@samba.org>
include/asm-powerpc/kprobes.h

index f850ca7020ed4becd50d98a85742f536d7a94805..fc713e595982ceb8acfd8a0883db3dedc56d1a24 100644 (file)
@@ -64,6 +64,12 @@ typedef unsigned int kprobe_opcode_t;
                                addr = *(kprobe_opcode_t **)addr;       \
                } else if (name[0] != '.')                              \
                        addr = *(kprobe_opcode_t **)addr;               \
+       } else {                                                        \
+               char dot_name[KSYM_NAME_LEN+1];                         \
+               dot_name[0] = '.';                                      \
+               dot_name[1] = '\0';                                     \
+               strncat(dot_name, name, KSYM_NAME_LEN);                 \
+               addr = (kprobe_opcode_t *)kallsyms_lookup_name(dot_name); \
        }                                                               \
 }