Bug 4384 - Problem in making kprobe modules portable across all the archtecture.
Summary: Problem in making kprobe modules portable across all the archtecture.
Status: RESOLVED FIXED
Alias: None
Product: systemtap
Classification: Unclassified
Component: kprobes (show other bugs)
Version: unspecified
: P2 normal
Target Milestone: ---
Assignee: Srinivasa DS
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2007-04-17 13:26 UTC by Srinivasa DS
Modified: 2007-05-03 09:16 UTC (History)
4 users (show)

See Also:
Host:
Target:
Build:
Last reconfirmed:


Attachments
Patch to solve this problem. (359 bytes, patch)
2007-04-17 13:29 UTC, Srinivasa DS
Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Srinivasa DS 2007-04-17 13:26:51 UTC
When data symbols are not present in kernel image, one has to add dot(".")
before function name, that he wants to probe in kprobe module on ppc64. 
Hence kernel module may not become portable across all the architecture.

When data symbols are missing on ppc64,
====================
[root@llm27lp1 ~]# cat /proc/kallsyms | grep do_fork
c00000000006283c T .do_fork
==============================
kp.symbol_name = ".do_fork";
============================
But if data symbols were included, then it looks like this
================
llm27lp2:~ # cat /proc/kallsyms |grep do_fork
c00000000005de28 T .do_fork
c0000000005fbe88 D do_fork
======================
kp.symbol_name = ".do_fork";
===============================

Iam attaching patch here, which solves this problem. Please let me know your
comments on this.

Thanks
 Srinivasa DS
Comment 1 Srinivasa DS 2007-04-17 13:29:14 UTC
Created attachment 1725 [details]
Patch to solve this problem.

This patch just appends "." to the function name the user wants to probe and
hence user need not have to bother, whether data symbols are present or not.

Thanks 
 Srinivasa DS
Comment 2 Ananth Mavinakayanahalli 2007-04-17 15:43:06 UTC
Srinivasa,
The patch looks fine.... you'll need to fix the codingstyle:

 	}								\
+	else {								\
       ^^^^^
+		char dot_name[KSYM_NAME_LEN+1];				\
+		dot_name[0] = '.';					\
+		strncat(dot_name, name, KSYM_NAME_LEN);			\
+		addr = (kprobe_opcode_t *)kallsyms_lookup_name(dot_name); \
+	}								\
 }

Please include a short description and post it to powerpc-dev list for
inclusion. Feel free to put my signed-off once you've successfully tested the patch.
Comment 3 Frank Ch. Eigler 2007-04-17 17:27:38 UTC
Note that this would not fix systemtap, as we do not use the kprobes-level symbol
lookup facilities.  It sounds like, for the PPC, systemtap itself should prefix
function symbols with "." unconditionally, and not treat it as a conditional 
fallback heuristic.
Comment 4 Ananth Mavinakayanahalli 2007-04-18 04:50:34 UTC
Subject: Re:  Problem in making kprobe modules portable across all the archtecture.

On Tue, Apr 17, 2007 at 04:27:38PM -0000, fche at redhat dot com wrote:
> 
> ------- Additional Comments From fche at redhat dot com  2007-04-17 17:27 -------
> Note that this would not fix systemtap, as we do not use the kprobes-level symbol
> lookup facilities.  It sounds like, for the PPC, systemtap itself should prefix
> function symbols with "." unconditionally, and not treat it as a conditional 
> fallback heuristic.

Yes, that would always work, but you may need to check the module:symbol
type address lookups.

That begs the question... till RHEL5, the compiler used in RHEL would
include both text and data symbols for powerpc. But, RHEL5 has some
compiler modifications that causes the data symbol (eg., "do_fork") to
be discarded and only the text symbol (".do_fork") is visible for
kallsyms lookup. Even upstream kernels built on RHEL5 have a similar
issue. Any specific reasons for this?