Skip to content

Upgrading BCC to get the fix of ARM64 syscall prefix detection in C++ API#10

Open
mlakshkar wants to merge 251 commits intopixie-io:pixie9from
mlakshkar:master
Open

Upgrading BCC to get the fix of ARM64 syscall prefix detection in C++ API#10
mlakshkar wants to merge 251 commits intopixie-io:pixie9from
mlakshkar:master

Conversation

@mlakshkar
Copy link
Copy Markdown

Upgrading BCC to get the fix of ARM64 syscall prefix detection in C++ API

ekyooo and others added 30 commits April 9, 2026 17:59
Remove the case where print_stacktrace is called even when syms is null.

Signed-off-by: Monu Lakshkar <mlakshkar@newrelic.com>
…option

Add additional information and change format of backtrace
- add symbol base offset, dso name, dso base offset
- symbol and dso info is included if it's available in target binary
- changed format:
ADDR [SYMBOL+OFFSET] (MODULE+OFFSET)

before:
  # ./profile
      clocksource_watchdog
      call_timer_fn
      run_timer_softirq
      __softirqentry_text_start
      irq_exit_rcu
      sysvec_apic_timer_interrupt
      asm_sysvec_apic_timer_interrupt
      strlen
      b
      a
      main
      __libc_start_main
      -                test-strlen-abc (26209)
          1

After:
  # ./profile -v
      0xffffffff8111f594 clocksource_watchdog+0xd4
      0xffffffff81117454 call_timer_fn+0x24
      0xffffffff81117de4 run_timer_softirq+0x444
      0xffffffff81dd3493 __softirqentry_text_start+0xd3
      0xffffffff8108143c irq_exit_rcu+0x6c
      0xffffffff81dc738e sysvec_apic_timer_interrupt+0x3e
      0xffffffff81e00d46 asm_sysvec_apic_timer_interrupt+0x16
      0x00007f71fc0f8bc6 strlen+0x106 (/lib/x86_64-linux-gnu/libc-2.19.so+0x88bc6)
      0x0000560e13e006e1 b+0x9 (/root/es/test_utils/test-strlen-abc+0x6e1)
      0x0000560e13e006d3 a+0x9 (/root/es/test_utils/test-strlen-abc+0x6d3)
      0x0000560e13e00755 main+0x14 (/root/es/test_utils/test-strlen-abc+0x755)
      0x00007f71fc091ec5 __libc_start_main+0xf5 (/lib/x86_64-linux-gnu/libc-2.19.so+0x21ec5)
      -                test-strlen-abc (26209)
          1
Signed-off-by: Monu Lakshkar <mlakshkar@newrelic.com>
Include symbol base offset in the kernel stack trace to accurately pinpoint
the location of function calls.
The offset is commonly used in various debugging tools, including those for
the Linux kernel.

Before:
  # ./wakeuptime.py
    target:          kworker/u8:3
    ffffffffc0215f96 bpf_prog_6deef7357e7b4530_sd_fw_ingress
    ffffffff928e925d bpf_trace_run1
    ffffffff9274d7d9 __bpf_trace_sched_wakeup_template
    ffffffff9274611b __traceiter_sched_wakeup
    ffffffff9275e2c1 ttwu_do_activate
    ffffffff9275e4f1 sched_ttwu_pending
    ffffffff92827fb3 __flush_smp_call_function_queue
    ffffffff92828b3a flush_smp_call_function_queue
    ffffffff9277d5a7 do_idle
    ffffffff9277d80a cpu_startup_entry
    ffffffff926a7349 start_secondary
    ffffffff92600279 secondary_startup_64_no_verify
    waker:           swapper/3
        1508198

After:
  # ./wakeuptime.py
    target:          kworker/u8:0
    ffffffffc0215f9a bpf_prog_6deef7357e7b4530_sd_fw_ingress+0xfaf6
    ffffffff928e925d bpf_trace_run1+0x4d
    ffffffff9274d7d9 __bpf_trace_sched_wakeup_template+0x9
    ffffffff9274611b __traceiter_sched_wakeup+0x2b
    ffffffff9275e2c1 ttwu_do_activate+0x131
    ffffffff9275e4f1 sched_ttwu_pending+0xf1
    ffffffff92827fb3 __flush_smp_call_function_queue+0x143
    ffffffff92828b3a flush_smp_call_function_queue+0x3a
    ffffffff9277d5a7 do_idle+0xb7
    ffffffff9277d80a cpu_startup_entry+0x2a
    ffffffff926a7349 start_secondary+0x129
    ffffffff92600279 secondary_startup_64_no_verify+0x184
    waker:           swapper/2
        247368
Signed-off-by: Monu Lakshkar <mlakshkar@newrelic.com>
Signed-off-by: zhangzikang01 <zhangzikang@kylinos.cn>
Signed-off-by: Monu Lakshkar <mlakshkar@newrelic.com>
In kernel commit b951aaff5035 ("mm: enable page allocation tagging") [1], add
_noprof suffix to filemap_alloc_folio.

Link: torvalds/linux@b951aaf [1]
Signed-off-by: Rong Tao <rongtao@cestc.cn>
Signed-off-by: Monu Lakshkar <mlakshkar@newrelic.com>
Print shmctl command:

    $ sudo ./shmsnoop.py
    PID    COMM        SYS           RET ARGs
    16413  writer   SHMGET            31 key: 0xd2032983, size: 4194304, shmflg: 0x3a4 (IPC_CREAT|0644)
    16413  writer    SHMAT  7f7f572b8000 shmid: 0x31, shmaddr: 0x0, shmflg: 0x0
    16413  writer    SHMDT             0 shmaddr: 0x7f7f572b8000
    16418  reader   SHMGET            31 key: 0xd2032983, size: 4194304, shmflg: 0x1a4 (0644)
    16418  reader    SHMAT  7f28e81a4000 shmid: 0x31, shmaddr: 0x0, shmflg: 0x0
    16418  reader    SHMDT             0 shmaddr: 0x7f28e81a4000
    16418  reader   SHMCTL             0 shmid: 0x31, cmd: 0 (IPC_RMID), buf: 0x0
                                                             ^^^^^^^^^^

Signed-off-by: Rong Tao <rongtao@cestc.cn>
Signed-off-by: Monu Lakshkar <mlakshkar@newrelic.com>
Signed-off-by: Monu Lakshkar <mlakshkar@newrelic.com>
Signed-off-by: Monu Lakshkar <mlakshkar@newrelic.com>
This PR accounts for the rename/refactor of the following functions

    __do_page_cache_readahead -> do_page_cache_ra -> page_cache_ra_order by torvalds/linux@8238287eadb2 and torvalds/linux@56a4d67c264e
    __page_cache_alloc -> filemap_alloc_folio -> filemap_alloc_folio_noprof by torvalds/linux@bb3c579e25e5 and torvalds/linux@b951aaff5035.

Signed-off-by: Monu Lakshkar <mlakshkar@newrelic.com>
Inspired by the perf-top command, the offcputime tool is
enhanced to support tracking multiple processes and threads.

$ man perf-top
       -p <pid>, --pid=<pid>
           Profile events on existing Process ID (comma separated list).
       -t <tid>, --tid=<tid>
           Profile events on existing thread ID (comma separated list).
Before:
$ offcputime  -h
optional arguments:
  -p PID, --pid PID     trace this PID only
  -t TID, --tid TID     trace this TID only
examples:
    ./offcputime -p 185      # only trace threads for PID 185
    ./offcputime -t 188      # only trace thread 188

After:
$ offcputime -h
optional arguments:
  -p PID, --pid PID     trace these PIDs only, comma separated list
  -t TID, --tid TID     trace these TIDs only, comma separated list
examples:
    ./offcputime -p 185,175,165 # only trace threads for PID 185,175,165
    ./offcputime -t 188,120,134 # only trace threads 188,120,134

Signed-off-by: Yingming Mao <maoyingming@baidu.com>
Reviewed-by: Shuo Li <lishuo02@baidu.com>
Signed-off-by: Monu Lakshkar <mlakshkar@newrelic.com>
The upstream commit
  llvm/llvm-project#82240
introduced a func signature change for func getFileLineInfoForAddress().
Add proper change to accommodate llvm20 need for additional func
arguments.

Signed-off-by: Monu Lakshkar <mlakshkar@newrelic.com>
Upstream patch
  llvm/llvm-project#107008
makes cpu=v3 as the default. Previously cpu=v1 as the default for bcc.
Let us mark cpu=v1 explicitly for bcc for now to keep it backword
compatible.

Signed-off-by: Monu Lakshkar <mlakshkar@newrelic.com>
cpudist.py supports run in pid namespace

Signed-off-by: Monu Lakshkar <mlakshkar@newrelic.com>
…r#5105)

musl libc has no error.h, but luckily the include is not needed
at all and can just be removed.

Signed-off-by: Monu Lakshkar <mlakshkar@newrelic.com>
Modify the help message for multi-process/thread support
in libbpf-tools/profile and tools/profile.

Signed-off-by: Monu Lakshkar <mlakshkar@newrelic.com>
This is a test example.

  # ./offcputime -p 16,48
    Tracing off-CPU time (us) of PID [16, 48]... Hit Ctrl-C to end.
        bpf_prog_a42aae11c0bc18f2_sched_switch
        bpf_prog_a42aae11c0bc18f2_sched_switch
        bpf_trace_run4
        __traceiter_sched_switch
        __schedule
        schedule
        worker_thread
        kthread
        ret_from_fork
        ret_from_fork_asm
        -                kworker/2:1 (48)
            3353019

        bpf_prog_a42aae11c0bc18f2_sched_switch
        bpf_prog_a42aae11c0bc18f2_sched_switch
        bpf_trace_run4
        __traceiter_sched_switch
        __schedule
        schedule
        rcu_gp_kthread
        kthread
        ret_from_fork
        ret_from_fork_asm
        -                rcu_preempt (16)
            1720974

Signed-off-by: Monu Lakshkar <mlakshkar@newrelic.com>
Add a utility API to split and convert strings for argument parsing.

Also, apply the API usage to offcputime and profile to remove duplicates.

Signed-off-by: Monu Lakshkar <mlakshkar@newrelic.com>
Parameter freq of open_and_attach_perf_event is not in use.
So remove it.

Signed-off-by: Monu Lakshkar <mlakshkar@newrelic.com>
tools/softirqs.py supports `-c/--cpu` otption to filter cpu,
It's reasonable to support a same otption for libbpf-tools/softirqs.

Add `-mcpu=v3` in Makefile for softirqs or the shift op will lead
to verifier errors.

Reported-by: Tang Yizhou <tangyeechou@gmail.com>
Signed-off-by: Dantezy <zhangyet@gmail.com>
Signed-off-by: Monu Lakshkar <mlakshkar@newrelic.com>
Signed-off-by: Dantezy <zhangyet@gmail.com>
Signed-off-by: Monu Lakshkar <mlakshkar@newrelic.com>
1: Ports that do not meet the conditions in function
"entry_state_update_func" will not be stored in the "start_ipv4" or "start_ipv6",
and the "ret_state_update_func" function will not obtain values,
so there is no need to perform port filtering again.

2: Sock_store can be directly deleted in function "ret_func".

Signed-off-by: Feng Yang <yangfeng@kylinos.cn>
Signed-off-by: Monu Lakshkar <mlakshkar@newrelic.com>
Add zfs based on zfsdist.py and zfsslower.py.

Signed-off-by: Feng Yang <yangfeng@kylinos.cn>
Signed-off-by: Monu Lakshkar <mlakshkar@newrelic.com>
It is not sufficient to determine whether Elf is ET_DYN or not to be a
dynamic library in bcc_elf_is_shared_obj() function, because the executable
Elf of the PIE type is also ET_DYN.

For example, on Fedora 41, /usr/bin/bash is PIE:

    $ readelf -h /usr/bin/bash
    ELF Header:
      ...
      Type:                     DYN (Position-Independent Executable file)
      ...

bcc_elf_is_shared_obj() should not return 'true' for /usr/bin/bash.

This commit add function bcc_elf_is_pie() and export it in bcc_elf.h.

At the same time, fix test py_test_usdt3.

Signed-off-by: Rong Tao <rongtao@cestc.cn>
Signed-off-by: Jiang Guirong <2386499836@qq.com>
Signed-off-by: Monu Lakshkar <mlakshkar@newrelic.com>
\# at the beginning can show that it is a command
Add # at the beginning of the example command in biolatenxy_example.txt

Signed-off-by: Monu Lakshkar <mlakshkar@newrelic.com>
Signed-off-by: Monu Lakshkar <mlakshkar@newrelic.com>
Import argparser and add basic implementation for this. Now user can
use -h option for threadsnoop tool.

Signed-off-by: Monu Lakshkar <mlakshkar@newrelic.com>
-F option prints a separate histogram for each unique set of request
flags. But the explanation right after the -F option example is not
about this option.

Signed-off-by: Monu Lakshkar <mlakshkar@newrelic.com>
Users are usually interested in events that happen frequently and
consume more time. So, print the results in descending order.

Signed-off-by: Monu Lakshkar <mlakshkar@newrelic.com>
Fix the following compilation error with GCC 8.5.0:
    gethostlatency.c: In function ‘attach_uprobes.isra.2’:
    gethostlatency.c:157:58: error: ‘%s’ directive output may be truncated writing up to 4095 bytes into a region of size between 4074 and 4084 [-Werror=format-truncation=]
         snprintf(proc_path, sizeof(proc_path), "/proc/%d/root%s", target_pid, buf);
                                                              ^~               ~~~
    gethostlatency.c:157:5: note: ‘snprintf’ output between 13 and 4118 bytes into a destination of size 4096
         snprintf(proc_path, sizeof(proc_path), "/proc/%d/root%s", target_pid, buf);
         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    cc1: all warnings being treated as errors

Signed-off-by: Hengqi Chen <hengqi.chen@gmail.com>
Signed-off-by: Monu Lakshkar <mlakshkar@newrelic.com>
Another compatibility game, allow offcputime to run on kernels
without BPF trampoline using raw tracepoint.

Signed-off-by: Hengqi Chen <hengqi.chen@gmail.com>
Signed-off-by: Monu Lakshkar <mlakshkar@newrelic.com>
ekyooo and others added 28 commits April 9, 2026 18:01
The top upstream libbpf commit is

  commit afb8b17bc50b0b7606ad4ea468cbc9f5aede8dae (HEAD -> master, origin/master, origin/HEAD)
  Author: Andrii Nakryiko <andrii@kernel.org>
  Date:   Mon Dec 15 10:30:36 2025 -0800

    sync: latest libbpf changes from kernel

Signed-off-by: Monu Lakshkar <mlakshkar@newrelic.com>
The top upstream blazesym commit is

  commit 30b803d861e6609f2ca3e84a3e7e0eb2c41ef5bb (HEAD -> main, origin/main, origin/HEAD)
  Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
  Date:   Wed Jan 14 14:05:06 2026 +0000

    build(deps): bump zip from 7.0.0 to 7.1.0

Signed-off-by: Monu Lakshkar <mlakshkar@newrelic.com>
The top upstream bpftool commit is

  commit ad5d76e5c6b622e5ed05fecfa68029bae949d408
  Author: Quentin Monnet <qmo@kernel.org>
  Date:   Wed Dec 17 02:08:51 2025 +0000

    sync: Pull latest bpftool changes from kernel

Signed-off-by: Monu Lakshkar <mlakshkar@newrelic.com>
  * Support for kernel up to 6.18

  * New Tools
    tools/softirqslower: New tool to trace slow software interrupt handlers (iovisor#5356)

  * Enhanced Functionality
    libbpf-tools/opensnoop: Added full-path support with `-F` option (iovisor#5323, iovisor#5333)
    libbpf-tools/filelife: Added full-path support (iovisor#5347, ab8e061)
    libbpf-tools: Introduced path helpers (ab8e061)
    libbpf-tools/trace_helpers: Added str_loadavg() and str_timestamp() common functions (694de9f)
    libbpf-tools/filetop: Added directory filter capability (iovisor#5300)
    libbpf-tools/runqslower: Added `-c` option to filter by process name prefix (673911c)
    libbpf-tools/runqlat: Dynamically size pid/pidns histogram map (iovisor#5342)
    libbpf-tools/fsdist, fsslower: Added support for fuse filesystem (9691c56)
    libbpf-tools/tcptop: Major refactoring using fentry/fexit for better performance (75bb73a, e2c7917, d786eaa, da3a474)
    tools/opensnoop: Added full-path support with `-F` option (iovisor#5334, iovisor#5339)
    tools/kvmexit: Added AMD processor support and parallel post-processing (13a4e5a, c2af2ee)
    tools/offwaketime: Added raw tracepoint support to reduce overhead (380ee01)
    Python uprobe API: Added functionality to detach all uprobes for a binary (iovisor#5325)
    Python API: Added support for executing a program and tracing it (iovisor#5362)

  * Bug Fixes
    libbpf-tools/filelife: Fixed wrong full-path handling (iovisor#5347)
    libbpf-tools/filelife: Fixed problem when using perf-buffer (ec8415b)
    libbpf-tools/funclatency: Delete the element from the `starts` map after it has been used (06ce134)
    libbpf-tools/offcputime: Fixed min/max_block_ns unit conversion error (iovisor#5327, d507a53)
    libbpf-tools/syncsnoop: Added support for sync_file_range2 and arm_sync_file_range() (4287921)
    libbpf-tools/ksnoop: Fixed two invalid access to map value (iovisor#5361)
    libbpf-tools/klockstat: Allows kprobe fallback to work with lock debugging (iovisor#5359)
    libbpf-tools/biotop: Fixed segmentation fault with musl libc build (52d2d09)
    libbpf-tools/syscall_helpers, Python BCC: Updated syscall list (add file_getattr/file_setattr) (b63d7e3, a9c6650)
    tools/tcpaccept: Fixed on recent kernels (c208d0e)
    tools/tcpconnect: Fixed iov field for DNS with Linux>=6.4 (iovisor#5382)
    tools/javaobjnew: Use MIN macro instead of min function (fb8910a)
    tools/biolatency, biosnoop, biotop: Use TRACEPOINT_PROBE() for tracepoints (iovisor#5366)
    Various tools: Don't use the old bpf_probe_read() helper (1cc15c3)
    CC: Support versioned SONAME in shared library resolution (beb1fe4, c351210)
    Python TCP: Added state2str() and applied to tools (bfa05d2)
    s390 architecture: Prevent invalid mem access when reading PAGE_OFFSET (d8595ee)

  * Build & Test Fixes
    Fixed build failure with clang21 (iovisor#5369)
    Fixed build for LLVM 23 by avoiding deprecated TargetRegistry overloads (iovisor#5401)
    ci: Make version.cmake handle shallow clone (2232b7e)
    ci: Various test fixes for proper CI operation (blk probes, rss_stat, kmalloc, btrfs/f2fs) (a499181, c338547, 6b7dd5d, ea5cf83)
    tests: Added coverage for versioned SONAME resolution (c351210)
    Removed luajit options to ensure no errors (26eaf13)

  * Doc update, other bug fixes and tools improvement

Signed-off-by: Monu Lakshkar <mlakshkar@newrelic.com>
This commit completes the synchronization required after updating
the libbpf submodule to commit afb8b17bc50b0b7606ad4ea468cbc9f5aede8dae
in commit f820b82.

Signed-off-by: Monu Lakshkar <mlakshkar@newrelic.com>
…sync

The libbpf update uses __LINUX_BPF_H__ guard, causing duplicate inclusions in
BCC's pipeline. Revert to _UAPI__ prefix for now to restore test stability.

Signed-off-by: Monu Lakshkar <mlakshkar@newrelic.com>
…(30b803d)

Sync libbpf-tools with blazesym @30b803d861e6609f and migrate integration
from the old Rust FFI API to the new native C API.

- Makefile: switch to using updated blazesym C library and header
  (libblazesym_c.a and blazesym/capi/include/blazesym.h)
- Migrate tools: futexctn, opensnoop, memleak to use new API and print file:line
  symbol info where available.

Signed-off-by: Monu Lakshkar <mlakshkar@newrelic.com>
  * Bug Fixes
    Sync BCC with libbpf submodule update (afb8b17) (iovisor#5455, iovisor#5460)
    libbpf-tools: Sync blazesym submodule and migrate tools to new C API (iovisor#5458)

Signed-off-by: Monu Lakshkar <mlakshkar@newrelic.com>
This adds new listns and a missing uprobe sycall to x86 and a few
extra missing non x86 syscalls.

Signed-off-by: Monu Lakshkar <mlakshkar@newrelic.com>
The compile error is caused by a type mismatch between u64 and
`unsigned long long`. This patch explicitly casts the `samples`
variable to `unsigned long long` to resolve the issue iovisor#5332.

Signed-off-by: Monu Lakshkar <mlakshkar@newrelic.com>
Clang >= 18 (with -Werror,-Wstring-plus-int) rejects the expression

  "/\0" + (condition)

because adding an integer to a string literal does not concatenate
strings -- it performs pointer arithmetic, and clang warns that this is
almost certainly not what was intended.

The original intent is to conditionally emit a leading '/' separator.
When the condition is true the pointer is advanced past the '/' to land
on the NUL terminator, producing an empty string; when false the full
"/" is printed.

Replace the pointer-arithmetic trick with an explicit ternary expression
that achieves the same semantics without the warning:

  (condition) ? "" : "/"

This is both warning-free and immediately clear to readers unfamiliar
with the original idiom.

Fixes: iovisor#5452
Co-authored-by: Cursor <cursoragent@cursor.com>
Signed-off-by: Monu Lakshkar <mlakshkar@newrelic.com>
sizeof(&piddata.comm) returns the size of the pointer (8 bytes on 64-bit),
while sizeof(piddata.comm) returns the actual size of the char array
(TASK_COMM_LEN). This error caused the task command to be truncated.

Original output (truncated COMM):
TIME(s)     COMM           PID     DISK    T    SECTOR     BYTES   LAT(ms)
0.000634    f2fs_ck        298     mmcblk0 WSM  5037016    16384     0.108
0.004835    kworker        2628    mmcblk0 WFSM 5037048    4096      0.464

Fixed output:
TIME(s)     COMM           PID     DISK    T    SECTOR     BYTES   LAT(ms)
0.000253    f2fs_ckpt-254: 298     mmcblk0 WSM  5032920    20480     0.903
0.002865    kworker/0:0    2628    mmcblk0 WFSM 5032960    4096      0.495

Change-Id: Iaf1753055a9117e3cf6dbbf6dc6a6c753a584f6c
Signed-off-by: Ism Hong <ism.hong@gmail.com>
Signed-off-by: Monu Lakshkar <mlakshkar@newrelic.com>
LLVM-22 changed the signatures of various createDiagnostics() calls [1].
Introduce a new version macro guard and adapt the code to the changed API.

Fixes iovisor#5483

[1] llvm/llvm-project@30633f3

Signed-off-by: Holger Hoffstätte <holger@applied-asynchrony.com>
Signed-off-by: Monu Lakshkar <mlakshkar@newrelic.com>
LLVM is has deprecated PointerType::get/getUnqual and is working towards
their removal, see llvm/llvm-project#123569.
These deprecation warnings currently show up when building against
LLVM 21. Fix this by using the recommended method taking a Context.

Fixes: iovisor#5472
Signed-off-by: Holger Hoffstätte <holger@applied-asynchrony.com>
Signed-off-by: Monu Lakshkar <mlakshkar@newrelic.com>
Glibc 2.43 added C23 const-preserving overloads to various string functions,
which change the return type depending on the constness of the argument(s).
Currently this leads to warnings from calls to strtr(). Fix this by
properly declaring the respective variable types.

Fixes iovisor#5471
Signed-off-by: Holger Hoffstätte <holger@applied-asynchrony.com>
Signed-off-by: Monu Lakshkar <mlakshkar@newrelic.com>
Signed-off-by: Monu Lakshkar <mlakshkar@newrelic.com>
Fixes issue where bpf.get_syscall_fnname() on ARM64 returns bare
syscall name instead of the prefixed __arm64_sys_ variant, causing
kprobe attachment failures. Now detects ARM64 prefix alongside x64
(__x64_sys_) and generic (sys_) prefixes.

Fixes: iovisor#5350

Signed-off-by: Harish Sadineni <Harish.Sadineni@windriver.com>
Signed-off-by: Monu Lakshkar <mlakshkar@newrelic.com>
Fixes issue where bpf.get_syscall_fnname() on riscv64 returns bare syscall
name instead of the prefixed _riscv_sys variant, causing kprobe
attachment failures.

Signed-off-by: Harish Sadineni <Harish.Sadineni@windriver.com>
Signed-off-by: Monu Lakshkar <mlakshkar@newrelic.com>
Starting in Linux 6.19, `struct ns_common` fields were moved into an
anonymous nested forward declaration (`struct ns_tree;`) within a
union.[1]
This causes Clang to throw a `[-Wmissing-declarations]` warning and
fail with missing member errors.

This affects tools pulling in `<linux/pid_namespace.h>` directly or
transitively (e.g. filetop, runqlat)

Errors encountered:
include/linux/ns/ns_common_types.h:117:3: warning: declaration does not declare anything [-Wmissing-declarations]
  117 |                 struct ns_tree;
      |                 ^~~~~~~~~~~~~~
In file included from /virtual/main.c:5:
In file included from include/linux/pid_namespace.h:11:
include/linux/ns_common.h:25:23: error: no member named 'ns_id' in 'struct ns_common'
   25 |         VFS_WARN_ON_ONCE(ns->ns_id == 0);
      |                          ~~  ^
include/linux/ns_common.h:26:13: error: no member named 'ns_id' in 'struct ns_common'
   26 |         return ns->ns_id <= NS_LAST_INIT_ID;
      |                ~~  ^
include/linux/ns_common.h:60:26: error: no member named '__ns_ref_active' in 'struct ns_common'
   60 |         return atomic_read(&ns->__ns_ref_active);

This patch fixes the issue globally by turning on microsoft extensions
flags. These flags have already been in the linux kernel. [2]

[1] torvalds/linux@a657bc8
[2] torvalds/linux@c4781dc

Signed-off-by: Avinesh Kumar <avinesh.kumar@suse.com>
Fixes: iovisor#5488
Signed-off-by: Monu Lakshkar <mlakshkar@newrelic.com>
Signed-off-by: Monu Lakshkar <mlakshkar@newrelic.com>
Signed-off-by: Monu Lakshkar <mlakshkar@newrelic.com>
Done by remove certain suffix, and attach a 16 chars random string.

Signed-off-by: Monu Lakshkar <mlakshkar@newrelic.com>
Signed-off-by: Monu Lakshkar <mlakshkar@newrelic.com>
…ble and add clear individual entry to stack traces table; both for optimizing performance when continuously running the perf profiler.

Signed-off-by: Monu Lakshkar <mlakshkar@newrelic.com>
…k_addr(); when set, the table entry is cleared after it is read.

Signed-off-by: Monu Lakshkar <mlakshkar@newrelic.com>
one ring buffer worth of data.

Signed-off-by: James Bartlett <jamesbartlett@pixielabs.ai>
Signed-off-by: Monu Lakshkar <mlakshkar@newrelic.com>
Signed-off-by: Zain Asgar <zasgar@pixielabs.ai>
Signed-off-by: Monu Lakshkar <mlakshkar@newrelic.com>
Signed-off-by: Zain Asgar <zasgar@pixielabs.ai>
Signed-off-by: Monu Lakshkar <mlakshkar@newrelic.com>
Signed-off-by: Monu Lakshkar <mlakshkar@newrelic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.