https://sourceware.org/bugzilla/show_bug.cgi?id=32713

            Bug ID: 32713
           Summary: elfutils fails to symbolize core dumps created by
                    Linux 6.12+
           Product: elfutils
           Version: unspecified
            Status: UNCONFIRMED
          Severity: normal
          Priority: P2
         Component: libdw
          Assignee: unassigned at sourceware dot org
          Reporter: michael+sourceware at stapelberg dot ch
                CC: elfutils-devel at sourceware dot org
  Target Milestone: ---

Hey folks, thanks for maintaining elfutils!

I noticed that on my Linux machine, core dumps collected by systemd-coredump(8)
do no longer show symbol names in the backtrace displayed by 'coredumpctl
info'.

Digging deeper, the issue is unrelated to systemd-coredump and can be
reproduced by calling eu-stack directly, too.

I used the following example program:

% echo 'int main() { char *no = 0; *no = 0x23; }' > segfault.c
% gcc -g -o segfault segfault.c -Wall -static

You can find the compiled output at
https://t.zekjur.net/2025-02-17-elfutils/segfault (just in case).

When I let this program crash on Linux 6.13, I get a core dump like
https://t.zekjur.net/2025-02-17-elfutils/core.segfault.1000.6158dd3b52af4b8384c103a8a336fc02.2913783.1739806843000000.zst

When I let this program crash on Linux 6.1, I get a core dump like
https://t.zekjur.net/2025-02-17-elfutils/core.segfault.0.8f168ad538ed480eab20ebbab491d953.1079959.1739805444000000.zst

(You can easily tell the two apart by the .0. vs. .1000. uid in the front of
the filename.)

Now, when I check with elfutils 0.190, elfutils 0.192 or
elfutils-0.192-42gb16f441c from git (current git HEAD), the coredump from Linux
6.1 can be symbolized; the one from Linux 6.13 cannot:

% eu-stack --version
eu-stack (elfutils) 0.190
Copyright (C) 2023 The elfutils developers <http://elfutils.org/>.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

% eu-stack -e ./segfault --core
./core.segfault.0.8f168ad538ed480eab20ebbab491d953.1079959.1739805444000000 
PID 1079959 - core
TID 1079959:
#0  0x0000000000402e15 main
#1  0x0000000000403398 __libc_start_call_main
#2  0x00000000004056b0 __libc_start_main_impl
#3  0x0000000000402d05 _start

% eu-stack -e ./segfault --core
./core.segfault.1000.6158dd3b52af4b8384c103a8a336fc02.2913783.1739806843000000
PID 2913783 - core
TID 2913783:
#0  0x0000000000402e15
#1  0x0000000000403398
#2  0x00000000004056b0
#3  0x0000000000402d05
eu-stack: dwfl_thread_getframes tid 2913783 at 0x402d04 in <unknown>: No DWARF
information found

When I compare the two core dumps, I notice:

% eu-readelf -a
./core.segfault.1000.6158dd3b52af4b8384c103a8a336fc02.2913783.1739806843000000
> core.no_syms.readelf.txt

% eu-readelf -a
./core.segfault.0.8f168ad538ed480eab20ebbab491d953.1079959.1739805444000000 >
core.has_syms.readelf.txt  

% diff -u core.no_syms.readelf.txt core.has_syms.readelf.txt
--- core.no_syms.readelf.txt    2025-02-17 16:12:45.641427118 +0100
+++ core.has_syms.readelf.txt   2025-02-17 16:12:51.624711599 +0100
[…]
   CORE                 206  FILE
     5 files:
+      00400000-00401000 00000000 4096                /tmp/segfault
       00401000-0047c000 00001000 503808              /tmp/segfault
       0047c000-004a2000 0007c000 155648              /tmp/segfault
-      00400000-00401000 00000000 4096                /tmp/segfault
-      004a7000-004a9000 000a6000 8192                /tmp/segfault
       004a2000-004a7000 000a1000 20480               /tmp/segfault
+      004a7000-004a9000 000a6000 8192                /tmp/segfault
[…]

I then tried different Linux kernel versions until I found that Linux 6.12 is
the first kernel where things break.

My suspicion is that commit
https://github.com/torvalds/linux/commit/7d442a33bfe817ab2a735f3d2e430e36305354ea
is responsible for the breakage.

-- 
You are receiving this mail because:
You are on the CC list for the bug.

Reply via email to