On 06/12/2025 9:10 am, Grygorii Strashko wrote:
>
>
> 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
>

Aah, we should exclude the OJBCOPY too.  That's what's moving
.data.rel.local amongst other sections we target with attributes directly.

~Andrew

Reply via email to