Uploaded image for project: 'RHEL'
  1. RHEL
  2. RHEL-67474

SystemTap broken with RHEL10 kernel

    • Icon: Bug Bug
    • Resolution: Done
    • Icon: Undefined Undefined
    • None
    • rhel-10.0
    • systemtap
    • None
    • No
    • Important
    • rhel-sst-pt-perf-debug
    • ssg_platform_tools
    • None
    • False
    • Hide

      None

      Show
      None
    • None
    • None
    • None
    • None
    • All
    • None

      systemtap doesn't work in RHEL10 because it inludes header asm/unaligned.h from the kernel which was moved to linux/unaligned.h in the recent kernel.

      What were you trying to do that didn't work?

      stap -v simple_probe.stp -c 'perl -e "print \"hello world
      \";"'

      What is the impact of this issue to you?

      Please provide the package NVR for which the bug is seen:

      systemtap-5.1-10.el10

      How reproducible is this bug?:

      Always

      Steps to reproduce

      1. see above

      Expected results

      systemtap working

      Actual results

      Pass 1: parsed user script and 487 library scripts using 137940virt/106336res/13700shr/91728data kb, in 140usr/30sys/168real ms.
      Pass 2: analyzed script: 2 probes, 10 functions, 2 embeds, 2 globals using 140264virt/112056res/17212shr/94052data kb, in 10usr/0sys/12real ms.
      Pass 3: translated to C into "/tmp/stapPrVluN/stap_05112edb4b5d700e31a51cdbb4e8729f_5124_src.c" using 152864virt/122204res/17464shr/106652data kb, in 120usr/70sys/196real ms.
      In file included from /usr/share/systemtap/runtime/linux/runtime.h:360,
      from /usr/share/systemtap/runtime/runtime.h:26,
      from /tmp/stapPrVluN/stap_05112edb4b5d700e31a51cdbb4e8729f_5124_src.c:21:
      /usr/share/systemtap/runtime/sym.c:21:10: fatal error: asm/unaligned.h: No such file or directory
      21 | #include <asm/unaligned.h>

      ^~~~~~~~~~~~~~~~~
      compilation terminated.
      make[2]: *** [scripts/Makefile.build:229: /tmp/stapPrVluN/stap_05112edb4b5d700e31a51cdbb4e8729f_5124_src.o] Error 1
      make[1]: *** [Makefile:1982: /tmp/stapPrVluN] Error 2
      WARNING: kbuild exited with status: 2
      Pass 4: compiled C into "stap_05112edb4b5d700e31a51cdbb4e8729f_5124.ko" in 24410usr/2090sys/26785real ms.
      Pass 4: compilation failed. [man error::pass4]
      Kernel version 6.11.0 is outside tested range 2.6.32 ... 6.9-rc0

      After patching /usr/share/systemtap/runtime/sym.c to include unalinged.h and uaccess.h from linux/ instread of asm/, complilation of the probes fail as follows:

      Pass 1: parsed user script and 487 library scripts using 137940virt/106412res/13776shr/91728data kb, in 130usr/50sys/176real ms.
      Pass 2: analyzed script: 2 probes, 10 functions, 2 embeds, 2 globals using 140264virt/112064res/17220shr/94052data kb, in 10usr/0sys/14real ms.
      Pass 3: translated to C into "/tmp/stapO1iYpj/stap_5666ddc9566079540cd41c38571d0144_5124_src.c" using 152864virt/121148res/17496shr/106652data kb, in 130usr/90sys/215real ms.
      In file included from /tmp/stapO1iYpj/stap_5666ddc9566079540cd41c38571d0144_5124_src.c:1408:
      /usr/share/systemtap/runtime/linux/uprobes-inode.c:50:17: error: ‘uprobe_unregister’ undeclared here (not in a function); did you mean ‘uprobe_register’?
      50 | typedef typeof(&uprobe_unregister) uprobe_unregister_fn;

      ^~~~~~~~~~~~~~~~~
      uprobe_register
      /usr/share/systemtap/runtime/linux/uprobes-inode.c: In function ‘stapiu_register’:
      /usr/share/systemtap/runtime/linux/uprobes-inode.c:290:52: error: passing argument 3 of ‘uprobe_register’ makes integer from pointer without a cast [-Wint-conversion]
      290
      ret = uprobe_register (inst->inode, c->offset, &inst->kconsumer);
      ^~~~~~~~~~~~~~~~
       
      struct uprobe_consumer *
      In file included from ./include/linux/mm_types.h:16,
      from ./include/linux/mmzone.h:22,
      from ./include/linux/gfp.h:7,
      from /usr/share/systemtap/runtime/linux/runtime_defines.h:1,
      from /usr/share/systemtap/runtime/runtime_defines.h:8,
      from /tmp/stapO1iYpj/stap_5666ddc9566079540cd41c38571d0144_5124_src.c:12:
      ./include/linux/uprobes.h:116:82: note: expected ‘loff_t’ {aka ‘long long int’}

      but argument is of type ‘struct uprobe_consumer *’
      116

      extern struct uprobe *uprobe_register(struct inode *inode, loff_t offset, loff_t ref_ctr_offset, struct uprobe_consumer *uc);
      ~~~~~~^~~~~~~~~~~~~
      /usr/share/systemtap/runtime/linux/uprobes-inode.c:290:11: error: too few arguments to function ‘uprobe_register’
      290
      ret = uprobe_register (inst->inode, c->offset, &inst->kconsumer);
      ^~~~~~~~~~~~~~~
      ./include/linux/uprobes.h:116:23: note: declared here
      116
      extern struct uprobe *uprobe_register(struct inode *inode, loff_t offset, loff_t ref_ctr_offset, struct uprobe_consumer *uc);
      ^~~~~~~~~~~~~~~
      In file included from /usr/share/systemtap/runtime/runtime.h:26,
      from /tmp/stapO1iYpj/stap_5666ddc9566079540cd41c38571d0144_5124_src.c:21:
      /usr/share/systemtap/runtime/linux/uprobes-inode.c: In function ‘stapiu_unregister’:
      /usr/share/systemtap/runtime/linux/uprobes-inode.c:54:19: error: invalid type argument of unary ‘*’ (have ‘int’)
      54
      void_ibt_wrapper((* (uprobe_unregister_fn)kallsyms_uprobe_unregister)((a),(b),(c)))
      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      /usr/share/systemtap/runtime/linux/runtime.h:324:4: note: in definition of macro ‘void_ibt_wrapper’
      324
      (function); \
      ^~~~~~~~
      /usr/share/systemtap/runtime/linux/uprobes-inode.c:315:10: note: in expansion of macro ‘uprobe_unregister’
      315
      (void) uprobe_unregister (inst->inode, c->offset, &inst->kconsumer);
      ^~~~~~~~~~~~~~~~~
      make[2]: *** [scripts/Makefile.build:229: /tmp/stapO1iYpj/stap_5666ddc9566079540cd41c38571d0144_5124_src.o] Error 1
      make[1]: *** [Makefile:1982: /tmp/stapO1iYpj] Error 2
      WARNING: kbuild exited with status: 2
      Pass 4: compiled C into "stap_5666ddc9566079540cd41c38571d0144_5124.ko" in 24890usr/2150sys/27332real ms.
      Pass 4: compilation failed. [man error::pass4]
      Kernel version 6.11.0 is outside tested range 2.6.32 ... 6.9-rc0

              rhtorsys Frank Eigler
              mkyral@redhat.com Martin Kyral
              Frank Eigler Frank Eigler
              qe-baseos-tools-bugs@redhat.com qe-baseos-tools-bugs@redhat.com qe-baseos-tools-bugs@redhat.com qe-baseos-tools-bugs@redhat.com
              Votes:
              0 Vote for this issue
              Watchers:
              5 Start watching this issue

                Created:
                Updated:
                Resolved: