On 05.12.25 22:00, Andrew Cooper wrote:
On 05/12/2025 7:34 pm, Grygorii Strashko wrote:
From: Grygorii Strashko <[email protected]>
Extend coverage support on .init and lib code.
Add two hidden Kconfig options:
- RELAX_INIT_CHECK "Relax strict check for .init sections only in %.init.o
files"
- DO_NOT_FREE_INIT_MEMORY "Prevent freeing of .init sections at the end of
Xen boot."
Both selected selected when COVERAGE=y, as getting coverage report for
".init" code is required:
- to bypass strict check for .init sections only in %.init.o files;
- the .init code stay in memory after Xen boot.
RELAX_INIT_CHECK/DO_NOT_FREE_INIT_MEMORY could be used by other debug
features in the future.
Signed-off-by: Grygorii Strashko <[email protected]>
---
changes in v2:
- add RELAX_INIT_CHECK and DO_NOT_FREE_INIT_MEMORY, those are two different
things,
both potentially reusable
- enable coverage for libfdt/libelf always
- enable colverage for .init always
This is a lot nicer (i.e. more simple).
But, I still don't know why we need to avoid freeing init memory to make
this work. What explodes if we dont?
It will just crash when coverage data is collected.
First I made changes in make file to get .init covered
then I hit a crash
then I checked %.init.o
conclusion was obvious.
For example:
objdump -x bzimage.init.o | grep gcov
0000000000000010 l O .bss 0000000000000028 __gcov0.bzimage_check
0000000000000040 l O .bss 0000000000000040 __gcov0.bzimage_headroom
0000000000000000 l O .bss 0000000000000008 __gcov0.output_length
0000000000000080 l O .bss 0000000000000060 __gcov0.bzimage_parse
0000000000000098 l O .init.data.rel.local 0000000000000028
__gcov_.bzimage_parse
0000000000000070 l O .init.data.rel.local 0000000000000028
__gcov_.bzimage_headroom
0000000000000048 l O .init.data.rel.local 0000000000000028
__gcov_.bzimage_check
0000000000000020 l O .init.data.rel.local 0000000000000028
__gcov_.output_length
0000000000000000 *UND* 0000000000000000 __gcov_init
0000000000000000 *UND* 0000000000000000 __gcov_exit
0000000000000000 *UND* 0000000000000000 __gcov_merge_add
0000000000000008 R_X86_64_PLT32 __gcov_init-0x0000000000000004
0000000000000012 R_X86_64_PLT32 __gcov_exit-0x0000000000000004
0000000000000020 R_X86_64_64 __gcov_merge_add
--
Best regards,
-grygorii