Skip to content

Cannot unwind past syscall boundary on aarch64 #1054

@bobrik

Description

@bobrik

Testing with:

stress-ng --syscall 1

When on x86_64:

2026/01/09 03:26:02 received trace event for pid=3000908, comm=stress-ng-sysca, executable=/usr/bin/stress-ng, container=
2026/01/09 03:26:02  non-native frame: xfs_buf_get_map [kernel]
2026/01/09 03:26:02  non-native frame: xfs_buf_read_map [kernel]
2026/01/09 03:26:02  non-native frame: xfs_trans_read_buf_map [kernel]
2026/01/09 03:26:02  non-native frame: xfs_read_agi [kernel]
2026/01/09 03:26:02  non-native frame: xfs_ialloc_read_agi [kernel]
2026/01/09 03:26:02  non-native frame: xfs_dialloc [kernel]
2026/01/09 03:26:02  non-native frame: xfs_create [kernel]
2026/01/09 03:26:02  non-native frame: xfs_generic_create [kernel]
2026/01/09 03:26:02  non-native frame: path_openat [kernel]
2026/01/09 03:26:02  non-native frame: do_filp_open [kernel]
2026/01/09 03:26:02  non-native frame: do_sys_openat2 [kernel]
2026/01/09 03:26:02  non-native frame: __x64_sys_openat [kernel]
2026/01/09 03:26:02  non-native frame: do_syscall_64 [kernel]
2026/01/09 03:26:02  non-native frame: entry_SYSCALL_64_after_hwframe [kernel]
2026/01/09 03:26:02  0x00000000+0x0000 [unknown] @ ??:0:0 [/usr/lib/x86_64-linux-gnu/libc.so.6]
2026/01/09 03:26:02  0x00000000+0x0000 [unknown] @ ??:0:0 [/usr/lib/x86_64-linux-gnu/libc.so.6]
2026/01/09 03:26:02  0x00103770+0x004c __open64 @ ??:0:0 [/usr/lib/x86_64-linux-gnu/libc.so.6]
2026/01/09 03:26:02  0x00000000+0x0000 [unknown] @ ??:0:0 [/usr/bin/stress-ng]
2026/01/09 03:26:02  0x00000000+0x0000 [unknown] @ ??:0:0 [/usr/bin/stress-ng]
2026/01/09 03:26:02  0x00000000+0x0000 [unknown] @ ??:0:0 [/usr/bin/stress-ng]
2026/01/09 03:26:02  0x00000000+0x0000 [unknown] @ ??:0:0 [/usr/bin/stress-ng]
2026/01/09 03:26:02  0x00000000+0x0000 [unknown] @ ??:0:0 [/usr/bin/stress-ng]
2026/01/09 03:26:02  0x00000000+0x0000 [unknown] @ ??:0:0 [/usr/lib/x86_64-linux-gnu/libc.so.6]
2026/01/09 03:26:02  0x00029ce0+0x0084 __libc_start_main @ ??:0:0 [/usr/lib/x86_64-linux-gnu/libc.so.6]
2026/01/09 03:26:02  0x00000000+0x0000 [unknown] @ ??:0:0 [/usr/bin/stress-ng]

When on aarch64:

2026/01/09 03:26:44 received trace event for pid=12907, comm=stress-ng-sysca, executable=/usr/bin/stress-ng, container=
2026/01/09 03:26:44  non-native frame: kmem_cache_free [kernel]
2026/01/09 03:26:44  non-native frame: xfs_btree_del_cursor [kernel]
2026/01/09 03:26:44  non-native frame: xfs_dialloc_ag_finobt_near [kernel]
2026/01/09 03:26:44  non-native frame: xfs_dialloc [kernel]
2026/01/09 03:26:44  non-native frame: xfs_create [kernel]
2026/01/09 03:26:44  non-native frame: xfs_generic_create [kernel]
2026/01/09 03:26:44  non-native frame: xfs_vn_create [kernel]
2026/01/09 03:26:44  non-native frame: path_openat [kernel]
2026/01/09 03:26:44  non-native frame: do_filp_open [kernel]
2026/01/09 03:26:44  non-native frame: do_sys_openat2 [kernel]
2026/01/09 03:26:44  non-native frame: __arm64_sys_openat [kernel]
2026/01/09 03:26:44  non-native frame: invoke_syscall.constprop.0 [kernel]
2026/01/09 03:26:44  non-native frame: do_el0_svc [kernel]
2026/01/09 03:26:44  non-native frame: el0_svc [kernel]
2026/01/09 03:26:44  non-native frame: el0t_64_sync_handler [kernel]
2026/01/09 03:26:44  non-native frame: el0t_64_sync [kernel]
2026/01/09 03:26:44  non-native frame:  [abort-marker]

It can unwind user-space separately:

2026/01/09 03:27:23 received trace event for pid=12907, comm=stress-ng-sysca, executable=/usr/bin/stress-ng, container=
2026/01/09 03:27:23  0x00000000+0x0000 [unknown] @ ??:0:0 [linux-vdso.1.so]
2026/01/09 03:27:23  0x00000820+0x0107 __kernel_getrandom @ ??:0:0 [linux-vdso.1.so]
2026/01/09 03:27:23  0x0003a4c0+0x0097 getrandom_vdso @ getrandom.c:211:18 [/usr/lib/aarch64-linux-gnu/libc.so.6]
2026/01/09 03:27:23  0x00000000+0x0000 [unknown] @ ??:0:0 [/usr/bin/stress-ng]
2026/01/09 03:27:23  0x00000000+0x0000 [unknown] @ ??:0:0 [/usr/bin/stress-ng]
2026/01/09 03:27:23  0x00000000+0x0000 [unknown] @ ??:0:0 [/usr/bin/stress-ng]
2026/01/09 03:27:23  0x00000000+0x0000 [unknown] @ ??:0:0 [/usr/bin/stress-ng]
2026/01/09 03:27:23  0x00000000+0x0000 [unknown] @ ??:0:0 [/usr/bin/stress-ng]
2026/01/09 03:27:23  0x00000000+0x0000 [unknown] @ ??:0:0 [/usr/bin/stress-ng]
2026/01/09 03:27:23  0x00022220+0x007b __libc_start_call_main @ libc_start_call_main.h:58:16 [/usr/lib/aarch64-linux-gnu/libc.so.6]
2026/01/09 03:27:23  0x000222e0+0x009b __libc_start_main_impl @ libc-start.c:360:3 [/usr/lib/aarch64-linux-gnu/libc.so.6]
2026/01/09 03:27:23  0x00000000+0x0000 [unknown] @ ??:0:0 [/usr/bin/stress-ng]

Both are running Linux v6.19-rc1, but I can also replicate on v6.12. I'm using opentelemetry-ebpf-profiler v0.0.202601, running it manually:

	tracer, err := tracer.NewTracer(context.Background(), &tracer.Config{
		ExecutableReporter: mapper,
		TraceReporter:      reporter,
		Intervals:          times.New(time.Second, time.Minute, time.Minute),
		IncludeTracers:     types.AllTracers(),
		SamplesPerSecond:   19,
		FilterIdleFrames:   true,
	})
	if err != nil {
		panic(err)
	}

I'm seeing this on both Ampere CPUs (bare metal) and on my Apple M1 laptop (in a VM).

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions