systemtap ubuntu error

1

depois de instalar o systemtap no Ubuntu, teste exemplo hello-stap.stp。mas existem alguns erros。

como posso corrigir isso?

obrigado

versão do systemtap

Systemtap translator/driver (version 2.9/0.165, Debian version 2.9-2ubuntu2 (xenial))
Copyright (C) 2005-2015 Red Hat, Inc. and others
This is free software; see the source for copying conditions.
enabled features: AVAHI LIBSQLITE3 NLS NSS TR1_UNORDERED_MAP

hello-stap.stp

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

esta é uma informação de erro。

Erro 1:

   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: In function ‘__access_process_vm_’:
    /usr/share/systemtap/runtime/linux/access_process_vm.h:35:29: error: passing argument 1 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);


                 ^
    
por user8561368 05.09.2017 / 08:52

2 respostas

0

Erro 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,
        ^

Erro 3:     No arquivo incluído em /usr/share/systemtap/runtime/linux/runtime.h:204:0,                     de /usr/share/systemtap/runtime/runtime.h:24,                     de /tmp/stapd8LhT7/stap_24feca2d4e5abb002d28b0bc184e6d61_945_src.c:25:     /usr/share/systemtap/runtime/linux/access_process_vm.h:35:34: erro: passar o argumento 2 de ‘get_user_pages’ torna o inteiro do ponteiro sem conversão [-Werror = int-conversion]         ret = get_user_pages (tsk, mm, addr, 1, gravação, 1, & page & vma);                                     ^ Erro 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,
        ^

Erro 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);
                                                ^

Erro 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,
    ^

Erro 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);
                                                ^

Erro 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,
        ^

Erro 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);
                ^

Erro 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,
        ^

Erro 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);
        ^

Erro 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);
                    ^

Erro 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);
                        ^

Dica:

  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.
    
por user8561368 05.09.2017 / 08:53
0

Eu sei qual é o problema, mas não a solução.

O Ubuntu tem uma versão desatualizada do Systemtap, o que significa que ele tenta compilar os cabeçalhos atuais do kernel. A função do kernel get_user_pages () foi alterada, mas o systemtap ainda está tentando usar a versão antiga.

Isso está causando erros de compilação. Eu não sei como consertar isso. O Ubuntu não atualizou seu pacote. A única solução em que consigo pensar é a compilação de uma versão mais nova do systemtap por conta própria ou comutação de distribuições.

    
por Farhan Yusufzai 20.09.2017 / 22:37