1 |
I finally figured out what is happening, but I am not sure what would be |
2 |
the best way to work around it. |
3 |
|
4 |
The problem is that with FEATURES=splitdebug the vmlinux binary is being |
5 |
processed by estrip, which uses debugedit and specifically asks it to |
6 |
recompute the build id. However, the bzImage is created from the |
7 |
vmlinux *before* that, and thus preserves the old build-id. |
8 |
|
9 |
One option would be to create the vmlinux.debug file manually, but I am |
10 |
afraid it would duplicate lot of the code from estrip, unless it can |
11 |
somehow be uses cleanly by the ebuild. The advantage of this would be |
12 |
that there is no need for the huge vmlinux file after that and we can |
13 |
just keep the vmlinux.debug around instead. |
14 |
|
15 |
I'll end with a couple of closing questions if I may: |
16 |
|
17 |
- Does anyone have an idea for some a clean way to do this? |
18 |
|
19 |
- Is it preferable to use GitHub PRs or this ML for such eclass changes? |
20 |
|
21 |
- What is exactly the reason for portage using the `-i`/`--build-id` |
22 |
option of debugedit? |
23 |
|
24 |
Thanks and have a nice day, |
25 |
Martin |
26 |
|
27 |
On Fri, Jun 10, 2022 at 02:22:00PM +0200, Martin Kletzander wrote: |
28 |
>Hello, |
29 |
> |
30 |
>I am trying to make systemtap work with gentoo-kernel (or ideally all |
31 |
>dist kernels) and I got a few steps closer with kernel-build.eclass |
32 |
>modification I sent this week [0]. However there is still one issue and |
33 |
>that is the fact that build-id of the kernel does not match the |
34 |
>installed vmlinux file: |
35 |
> |
36 |
># stap mba_sc.stp |
37 |
>WARNING: Build-id mismatch [man warning::buildid]: |
38 |
>"/usr/src/linux-5.17.13-gentoo-dist/vmlinux" pid 0 address |
39 |
>0xffffffff8a7b572c, expected c43e775aad5e11755bf5cf1329d2240b519e7518 |
40 |
>actual 3a757e0a2b0d777762cd4aaf9cac0c40bc8c398c |
41 |
>WARNING: /usr/bin/staprun exited with status: 1 |
42 |
>Pass 5: run failed. [man error::pass5] |
43 |
> |
44 |
>I also noticed that when kernel-build.eclass installs the vmlinux file |
45 |
>it also (I presume portage) creates vmlinux.debug using objcopy |
46 |
>--only-keep-debug --compress-debug-sections. |
47 |
> |
48 |
>So now I am in a situation where I have these relevant files on the |
49 |
>system: |
50 |
> |
51 |
>- /usr/src/linux-5.17.13-gentoo-dist/vmlinux |
52 |
>- /usr/lib/debug/.build-id/c4/3e775aad5e11755bf5cf1329d2240b519e7518.debug |
53 |
> (symlink to the first file) |
54 |
>- /usr/lib/debug/usr/src/linux-5.17.13-gentoo-dist/vmlinux.debug and |
55 |
>- /boot/vmlinuz-5.17.13-gentoo-dist |
56 |
> |
57 |
> |
58 |
>When I check the build ids (using readelf -n or just "file") of the |
59 |
>first three files I get: |
60 |
> |
61 |
>/usr/src/linux-5.17.13-gentoo-dist/vmlinux: |
62 |
>ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, |
63 |
>BuildID[sha1]=c43e775aad5e11755bf5cf1329d2240b519e7518, not stripped |
64 |
> |
65 |
>/usr/lib/debug/.build-id/c4/3e775aad5e11755bf5cf1329d2240b519e7518.debug: |
66 |
>ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, |
67 |
>BuildID[sha1]=c43e775aad5e11755bf5cf1329d2240b519e7518, with debug_info, |
68 |
>not stripped |
69 |
> |
70 |
>/usr/lib/debug/usr/src/linux-5.17.13-gentoo-dist/vmlinux.debug: |
71 |
>ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, |
72 |
>BuildID[sha1]=c43e775aad5e11755bf5cf1329d2240b519e7518, with debug_info, |
73 |
>not stripped |
74 |
> |
75 |
>which looks great except: |
76 |
> |
77 |
>1) the first file does not say it is "with debug_info", |
78 |
> |
79 |
>2) there is no reason to keep the original vmlinux in place since there |
80 |
> is a smaller file that works as a substitute, but I'm not sure what's |
81 |
> a clean way to not install it, and most importantly |
82 |
> |
83 |
>3) the fact that the running kernel has a different build id. |
84 |
> |
85 |
>The last point is the main issue here. I was trying to find how to |
86 |
>check for the build id of the running kernel, but haven't found any way |
87 |
>on how to do it with a kernel API, so instead I checked the |
88 |
>/boot/vmlinuz-5.17.13-gentoo-dist like this: |
89 |
> |
90 |
>~/dev/linux/scripts/extract-vmlinux /boot/vmlinuz-5.17.13-gentoo-dist >vmlinux.extracted |
91 |
> |
92 |
>and for good measure also tried what objcopy does to it: |
93 |
> |
94 |
>objcopy --only-keep-debug vmlinux.extracted vmlinux.extracted.debug |
95 |
>objcopy --only-keep-debug --compress-debug-sections vmlinux.extracted vmlinux.extracted.compressed |
96 |
> |
97 |
>Now when I check the build id is different from the first files, but |
98 |
>unchanged with objcopy and same as systemtap reports for the running |
99 |
>kernel: |
100 |
> |
101 |
>vmlinux.extracted: |
102 |
>ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, |
103 |
>BuildID[sha1]=3a757e0a2b0d777762cd4aaf9cac0c40bc8c398c, stripped |
104 |
> |
105 |
>vmlinux.extracted.compressed: |
106 |
>ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, |
107 |
>BuildID[sha1]=3a757e0a2b0d777762cd4aaf9cac0c40bc8c398c, stripped |
108 |
> |
109 |
>vmlinux.extracted.debug: |
110 |
>ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, |
111 |
>BuildID[sha1]=3a757e0a2b0d777762cd4aaf9cac0c40bc8c398c, stripped |
112 |
> |
113 |
> |
114 |
>At this point I got stuck, not knowing when and how does the build-id |
115 |
>changes and where to extract the debug symbols from. I would also like |
116 |
>to clean up the change I did. So I came here with my question(s) and |
117 |
>rather lengthy explanations. Does anyone know what would be the best |
118 |
>way to deal with this? Or even where to continue looking? I would |
119 |
>really like to make systemtap "just work" on Gentoo with the |
120 |
>distribution kernels, but I already spent a lot of time on it, so I |
121 |
>figured I'll rather ask here since I'm not that proficient with the |
122 |
>intricacies of the build system parts. |
123 |
> |
124 |
>Thanks a lot for any pointers and have a great day, |
125 |
>Martin |
126 |
> |
127 |
>[0] https://github.com/gentoo/gentoo/pull/25789 |