Patchwork [3/3] systemtap: build and install uprobes.ko

login
register
mail settings
Submitter Wade Farnsworth
Date Jan. 24, 2012, 9:49 p.m.
Message ID <4F1F274D.9070509@mentor.com>
Download mbox | patch
Permalink /patch/20087/
State New
Headers show

Comments

Wade Farnsworth - Jan. 24, 2012, 9:49 p.m.
SystemTap needs to provide uprobes.ko in order to support user space
probing.  Build and install the uprobes.ko on systems where it makes
sense to.

Signed-off-by: Wade Farnsworth <wade_farnsworth@mentor.com>
---
 meta/recipes-kernel/systemtap/systemtap_git.bb |   57 ++++++++++++++++++++++-
 1 files changed, 54 insertions(+), 3 deletions(-)
Khem Raj - Jan. 24, 2012, 11:38 p.m.
On Tue, Jan 24, 2012 at 1:49 PM, Wade Farnsworth
<wade_farnsworth@mentor.com> wrote:
> SystemTap needs to provide uprobes.ko in order to support user space
> probing.  Build and install the uprobes.ko on systems where it makes
> sense to.
>
> Signed-off-by: Wade Farnsworth <wade_farnsworth@mentor.com>
> ---
>  meta/recipes-kernel/systemtap/systemtap_git.bb |   57 ++++++++++++++++++++++-
>  1 files changed, 54 insertions(+), 3 deletions(-)
>
> diff --git a/meta/recipes-kernel/systemtap/systemtap_git.bb b/meta/recipes-kernel/systemtap/systemtap_git.bb
> index 298e005..22f3993 100644
> --- a/meta/recipes-kernel/systemtap/systemtap_git.bb
> +++ b/meta/recipes-kernel/systemtap/systemtap_git.bb
> @@ -2,12 +2,12 @@ DESCRIPTION = "SystemTap - script-directed dynamic tracing and performance analy
>  LICENSE = "GPLv2"
>  LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
>
> -DEPENDS = "elfutils sqlite3 systemtap-native"
> +DEPENDS = "elfutils sqlite3 systemtap-native virtual/kernel"
>  DEPENDS_virtclass-native = "elfutils sqlite3 gettext-native"
>  DEPENDS_virtclass-nativesdk = "elfutils sqlite3 gettext-native"
>
>  SRCREV = "a56e4b7800e3fa8f9df6f4434cb02f86f6e995bc"
> -PR = "r4"
> +PR = "r5"
>  PV = "1.6+git${SRCPV}"
>
>  SRC_URI = "git://sources.redhat.com/git/systemtap.git;protocol=git"
> @@ -28,8 +28,59 @@ COMPATIBLE_HOST = '(x86_64.*|i.86.*|powerpc.*|arm.*)-linux'
>
>  S = "${WORKDIR}/git"
>
> -inherit autotools gettext
> +inherit autotools gettext module-base
>
>  BBCLASSEXTEND = "native nativesdk"
>
> +FILES_${PN} += "${datadir}/systemtap/runtime/uprobes"
>  FILES_${PN}-dbg += "${libexecdir}/systemtap/.debug"
> +
> +# Compile and install the uprobes kernel module.  Note that staprun
> +# expects it in the systemtap/runtime directory, not in /lib/modules.
> +# Note that we only build uprobes on machines with utrace support.
> +do_compile_uprobes() {
> +       if grep -q "CONFIG_UTRACE=y" ${STAGING_KERNEL_DIR}/.config
> +       then
> +               unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS CC LD CPP
> +               oe_runmake CC="${KERNEL_CC}" LD="${KERNEL_LD}" \
> +                          AR="${KERNEL_AR}" \
> +                          -C ${STAGING_KERNEL_DIR} scripts
> +               oe_runmake KDIR=${STAGING_KERNEL_DIR}   \
> +                          M="${S}/runtime/uprobes/" \
> +                          CC="${KERNEL_CC}" LD="${KERNEL_LD}" \
> +                          AR="${KERNEL_AR}" \
> +                          -C "${S}/runtime/uprobes/"
> +       fi
> +}
> +
> +do_compile_uprobes_virtclass-native() {
> +       :
> +}
> +
> +do_compile_uprobes_virtclass-nativesdk() {
> +       :
> +}
> +
> +do_compile_append() {
> +       do_compile_uprobes
> +}
> +
> +do_install_uprobes() {
> +       if [ -e "${S}/runtime/uprobes/uprobes.ko" ]
> +       then
> +               install -d ${D}/usr/share/systemtap/runtime/uprobes/
> +               install -m 0644 ${S}/runtime/uprobes/uprobes.ko ${D}/usr/share/systemtap/runtime/uprobes/
> +       fi
> +}
> +
> +do_install_uprobes_virtclass-native() {
> +       :
> +}
> +
> +do_install_uprobes_virtclass-nativesdk() {
> +       :
> +}
> +
> +do_install_append() {
> +       do_install_uprobes
> +}


could this module be baked as a standalone recipe instead?
since this now depends on kernel makes systemtap to be machine specific

Patch

diff --git a/meta/recipes-kernel/systemtap/systemtap_git.bb b/meta/recipes-kernel/systemtap/systemtap_git.bb
index 298e005..22f3993 100644
--- a/meta/recipes-kernel/systemtap/systemtap_git.bb
+++ b/meta/recipes-kernel/systemtap/systemtap_git.bb
@@ -2,12 +2,12 @@  DESCRIPTION = "SystemTap - script-directed dynamic tracing and performance analy
 LICENSE = "GPLv2"
 LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
 
-DEPENDS = "elfutils sqlite3 systemtap-native"
+DEPENDS = "elfutils sqlite3 systemtap-native virtual/kernel"
 DEPENDS_virtclass-native = "elfutils sqlite3 gettext-native"
 DEPENDS_virtclass-nativesdk = "elfutils sqlite3 gettext-native"
 
 SRCREV = "a56e4b7800e3fa8f9df6f4434cb02f86f6e995bc"
-PR = "r4"
+PR = "r5"
 PV = "1.6+git${SRCPV}"
 
 SRC_URI = "git://sources.redhat.com/git/systemtap.git;protocol=git"
@@ -28,8 +28,59 @@  COMPATIBLE_HOST = '(x86_64.*|i.86.*|powerpc.*|arm.*)-linux'
 
 S = "${WORKDIR}/git"
 
-inherit autotools gettext
+inherit autotools gettext module-base
 
 BBCLASSEXTEND = "native nativesdk"
 
+FILES_${PN} += "${datadir}/systemtap/runtime/uprobes"
 FILES_${PN}-dbg += "${libexecdir}/systemtap/.debug"
+
+# Compile and install the uprobes kernel module.  Note that staprun
+# expects it in the systemtap/runtime directory, not in /lib/modules.
+# Note that we only build uprobes on machines with utrace support.
+do_compile_uprobes() {
+	if grep -q "CONFIG_UTRACE=y" ${STAGING_KERNEL_DIR}/.config
+	then
+		unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS CC LD CPP
+		oe_runmake CC="${KERNEL_CC}" LD="${KERNEL_LD}" \
+			   AR="${KERNEL_AR}" \
+			   -C ${STAGING_KERNEL_DIR} scripts
+		oe_runmake KDIR=${STAGING_KERNEL_DIR}   \
+			   M="${S}/runtime/uprobes/" \
+			   CC="${KERNEL_CC}" LD="${KERNEL_LD}" \
+			   AR="${KERNEL_AR}" \
+			   -C "${S}/runtime/uprobes/"
+	fi
+}
+
+do_compile_uprobes_virtclass-native() {
+	:
+}
+
+do_compile_uprobes_virtclass-nativesdk() {
+	:
+}
+
+do_compile_append() {
+	do_compile_uprobes
+}
+
+do_install_uprobes() {
+	if [ -e "${S}/runtime/uprobes/uprobes.ko" ]
+	then
+		install -d ${D}/usr/share/systemtap/runtime/uprobes/
+		install -m 0644 ${S}/runtime/uprobes/uprobes.ko ${D}/usr/share/systemtap/runtime/uprobes/
+	fi
+}
+
+do_install_uprobes_virtclass-native() {
+	:
+}
+
+do_install_uprobes_virtclass-nativesdk() {
+	:
+}
+
+do_install_append() {
+	do_install_uprobes
+}