ubuntu上的Systemtap错误

时间:2017-09-05 04:58:27

标签: ubuntu systemtap

在ubuntu上安装systemtap之后,测试示例hello-stap.stp.but但是有一些错误。

我该如何解决这个问题?

感谢

systemtap版本

  

Systemtap翻译器/驱动程序(版本2.9 / 0.165,Debian版本2.9-2ubuntu2(xenial))

     

版权所有(C)2005-2015 Red Hat,Inc。及其他人

     

这是免费软件;查看复制条件的来源。

     

启用功能:AVAHI LIBSQLITE3 NLS NSS TR1_UNORDERED_MAP

您好-stap.stp

probe begin
{
    print("hello world\n")
    exit()
}

这是错误信息。

错误1:

  

在/usr/share/systemtap/runtime/linux/runtime.h:204:0中包含的文件中,                           来自/usr/share/systemtap/runtime/runtime.h:24,                           来自/tmp/stapd8LhT7/stap_24feca2d4e5abb002d28b0bc184e6d61_945_src.c:25:           /usr/share/systemtap/runtime/linux/access_process_vm.h:在函数'__access_process_vm_'中:           /usr/share/systemtap/runtime/linux/access_process_vm.h:35:29:错误:传递'get_user_pages'的参数1从没有强制转换的指针生成整数[-Werror = int-conversion]               ret = get_user_pages(tsk,mm,addr,1,write,1,& page,& vma);                   ^

3 个答案:

答案 0 :(得分:2)

我自己遇到了这个问题。简而言之,Ubuntu的systemtap软件包目前已经过时了。

解释:前一段时间,内核更新了get_user_pages()函数,这意味着使用上一个函数原型的任何东西现在都无法编译。这也发生在VMWare的vmmon和vmnet模块上。当您运行stap时,它会生成一个内核模块源文件,该文件使用get_user_pages(),编译它并将其加载到内核中。但它生成的C代码使用旧的函数定义,因此无法构建。

目前没有解决方案:您可以从源代码构建SystemTap(我没有做到,但我也没有非常努力)或告诉Ubuntu升级他们破损的systemtap软件包 - 我提交了一个bug report,也许你可以确认一下。

我的解决方案是切换到Fedora 26并运行/ usr / bin / stap-prep来安装先决条件。工作没有任何打嗝!

答案 1 :(得分:2)

我遇到了同样的问题,所以我最终从源代码构建了systemtap。我在xenial上使用v3.1,到目前为止一直很好。

## Install build-required packages
apt-get update && \
        apt-get install -y build-essential gettext elfutils libdw-dev python wget tar && \
        apt-get clean;

## Build from source
wget https://sourceware.org/systemtap/ftp/releases/systemtap-3.1.tar.gz
tar xzvf systemtap-3.1.tar.gz

## Instruction: https://sourceware.org/git/?p=systemtap.git;a=blob_plain;f=README;hb=HEAD
cd systemtap-3.1/ && \
         ./configure && \
         make all && \
         make install ;

答案 2 :(得分:-2)

错误2:

 In file included from ./include/linux/pid_namespace.h:6:0,
                    from ./include/linux/ptrace.h:8,
                    from ./include/linux/ftrace.h:13,
                    from ./include/linux/kprobes.h:42,
                    from /usr/share/systemtap/runtime/linux/runtime.h:21,
                    from /usr/share/systemtap/runtime/runtime.h:24,
                    from /tmp/stapd8LhT7/stap_24feca2d4e5abb002d28b0bc184e6d61_945_src.c:25:
    ./include/linux/mm.h:1293:6: note: expected ‘long unsigned int’ but argument is of type ‘struct task_struct *’
    long get_user_pages(unsigned long start, unsigned long nr_pages,
        ^

错误3:

In file included from /usr/share/systemtap/runtime/linux/runtime.h:204:0,
                from /usr/share/systemtap/runtime/runtime.h:24,
                from /tmp/stapd8LhT7/stap_24feca2d4e5abb002d28b0bc184e6d61_945_src.c:25:
/usr/share/systemtap/runtime/linux/access_process_vm.h:35:34: error: passing argument 2 of ‘get_user_pages’ makes integer from pointer without a cast [-Werror=int-conversion]
    ret = get_user_pages (tsk, mm, addr, 1, write, 1, &page, &vma);
                                ^

错误4:

 In file included from ./include/linux/pid_namespace.h:6:0,
                    from ./include/linux/ptrace.h:8,
                    from ./include/linux/ftrace.h:13,
                    from ./include/linux/kprobes.h:42,
                    from /usr/share/systemtap/runtime/linux/runtime.h:21,
                    from /usr/share/systemtap/runtime/runtime.h:24,
                    from /tmp/stapd8LhT7/stap_24feca2d4e5abb002d28b0bc184e6d61_945_src.c:25:
    ./include/linux/mm.h:1293:6: note: expected ‘long unsigned int’ but argument is of type ‘struct mm_struct *’
    long get_user_pages(unsigned long start, unsigned long nr_pages,
        ^

错误5:

 In file included from /usr/share/systemtap/runtime/linux/runtime.h:204:0,
                    from /usr/share/systemtap/runtime/runtime.h:24,
                    from /tmp/stapd8LhT7/stap_24feca2d4e5abb002d28b0bc184e6d61_945_src.c:25:
    /usr/share/systemtap/runtime/linux/access_process_vm.h:35:44: error: passing argument 4 of ‘get_user_pages’ makes pointer from integer without a cast [-Werror=int-conversion]
        ret = get_user_pages (tsk, mm, addr, 1, write, 1, &page, &vma);
                                                ^

错误6:

In file included from ./include/linux/pid_namespace.h:6:0,
                from ./include/linux/ptrace.h:8,
                from ./include/linux/ftrace.h:13,
                from ./include/linux/kprobes.h:42,
                from /usr/share/systemtap/runtime/linux/runtime.h:21,
                from /usr/share/systemtap/runtime/runtime.h:24,
                from /tmp/stapd8LhT7/stap_24feca2d4e5abb002d28b0bc184e6d61_945_src.c:25:
./include/linux/mm.h:1293:6: note: expected ‘struct page **’ but argument is of type ‘int’
long get_user_pages(unsigned long start, unsigned long nr_pages,
    ^

错误7:

 In file included from /usr/share/systemtap/runtime/linux/runtime.h:204:0,
                    from /usr/share/systemtap/runtime/runtime.h:24,
                    from /tmp/stapd8LhT7/stap_24feca2d4e5abb002d28b0bc184e6d61_945_src.c:25:
    /usr/share/systemtap/runtime/linux/access_process_vm.h:35:47: error: passing argument 5 of ‘get_user_pages’ makes pointer from integer without a cast [-Werror=int-conversion]
        ret = get_user_pages (tsk, mm, addr, 1, write, 1, &page, &vma);
                                                ^

错误8:

 In file included from ./include/linux/pid_namespace.h:6:0,
                    from ./include/linux/ptrace.h:8,
                    from ./include/linux/ftrace.h:13,
                    from ./include/linux/kprobes.h:42,
                    from /usr/share/systemtap/runtime/linux/runtime.h:21,
                    from /usr/share/systemtap/runtime/runtime.h:24,
                    from /tmp/stapd8LhT7/stap_24feca2d4e5abb002d28b0bc184e6d61_945_src.c:25:
    ./include/linux/mm.h:1293:6: note: expected ‘struct vm_area_struct **’ but argument is of type ‘int’
    long get_user_pages(unsigned long start, unsigned long nr_pages,
        ^

错误9:

 In file included from /usr/share/systemtap/runtime/linux/runtime.h:204:0,
                    from /usr/share/systemtap/runtime/runtime.h:24,
                    from /tmp/stapd8LhT7/stap_24feca2d4e5abb002d28b0bc184e6d61_945_src.c:25:
    /usr/share/systemtap/runtime/linux/access_process_vm.h:35:13: error: too many arguments to function ‘get_user_pages’
        ret = get_user_pages (tsk, mm, addr, 1, write, 1, &page, &vma);
                ^

错误10:

 In file included from ./include/linux/pid_namespace.h:6:0,
                    from ./include/linux/ptrace.h:8,
                    from ./include/linux/ftrace.h:13,
                    from ./include/linux/kprobes.h:42,
                    from /usr/share/systemtap/runtime/linux/runtime.h:21,
                    from /usr/share/systemtap/runtime/runtime.h:24,
                    from /tmp/stapd8LhT7/stap_24feca2d4e5abb002d28b0bc184e6d61_945_src.c:25:
    ./include/linux/mm.h:1293:6: note: declared here
    long get_user_pages(unsigned long start, unsigned long nr_pages,
        ^

错误11:

 In file included from /usr/share/systemtap/runtime/linux/runtime.h:204:0,
                    from /usr/share/systemtap/runtime/runtime.h:24,
                    from /tmp/stapd8LhT7/stap_24feca2d4e5abb002d28b0bc184e6d61_945_src.c:25:
    /usr/share/systemtap/runtime/linux/access_process_vm.h:55:7: error: implicit declaration of function ‘page_cache_release’ [-Werror=implicit-function-declaration]
        page_cache_release (page);
        ^

错误12:

 In file included from /usr/share/systemtap/runtime/linux/print.c:17:0,
                    from /usr/share/systemtap/runtime/print.c:17,
                    from /usr/share/systemtap/runtime/runtime_context.h:22,
                    from /tmp/stapd8LhT7/stap_24feca2d4e5abb002d28b0bc184e6d61_945_src.c:55:
    /usr/share/systemtap/runtime/transport/transport.c: In function ‘_stp_lock_inode’:
    /usr/share/systemtap/runtime/transport/transport.c:506:19: error: ‘struct inode’ has no member named ‘i_mutex’
    mutex_lock(&inode->i_mutex);
                    ^

错误13:

 /usr/share/systemtap/runtime/transport/transport.c: In function ‘_stp_unlock_inode’:
    /usr/share/systemtap/runtime/transport/transport.c:515:21: error: ‘struct inode’ has no member named ‘i_mutex’
    mutex_unlock(&inode->i_mutex);
                        ^

提示:

  cc1: all warnings being treated as errors
    scripts/Makefile.build:294: recipe for target '/tmp/stapd8LhT7/stap_24feca2d4e5abb002d28b0bc184e6d61_945_src.o' failed
    make[1]: *** [/tmp/stapd8LhT7/stap_24feca2d4e5abb002d28b0bc184e6d61_945_src.o] Error 1
    Makefile:1524: recipe for target '_module_/tmp/stapd8LhT7' failed
    make: *** [_module_/tmp/stapd8LhT7] Error 2
    WARNING: kbuild exited with status: 2
    Pass 4: compilation failed.  [man error::pass4]
    Tip: /usr/share/doc/systemtap/README.Debian should help you get started.