June 2, 2021 9:08 AM, "Kent Mcleod" <kent.mcleo...@gmail.com> wrote:

> On Thu, May 20, 2021 at 6:13 AM Ben Fiedler <s...@bfiedler.ch> wrote:
> 
>> Hello everyone,
>> 
>> I've recently found an interesting bug that only occurs when compiling in 
>> release mode.
>> 
>> Use of the ZF_LOG library (for normal log output) leads to syscalls being 
>> made when the
>> capdl-loader runs.
>> These are invoked via musllibc's __stdio_write, which relies on __sysinfo 
>> being set correctly for
>> syscalls to
>> work. When compiling with RELEASE=OFF this works fine, however when 
>> compiling with RELEASE=ON,
>> __sysinfo is
>> not set (yet?), and subsequently leads to an illegal prefetch exception when 
>> __stdio_write tries to
>> invoke
>> a syscall.
>> 
>> Setting __sysinfo to sel4_vsyscall using gdb during runtime fixes this. I 
>> don't really know the
>> correct
>> place to fix this in the code, but I hope that you can provide some hints on 
>> where to fix this bug.
> 
> If you look in the CMake file capdl-loader-app/helpers.cmake you will
> see that libsel4muslcsys is only linked into the capdl-loader-app
> under debug builds. This library implements the registration of a set
> of syscalls under __sysinfo and any printing would need to go through
> that. Thus, the capdl-loader-app doesn't support log output via
> ZF_LOG while RELEASE=ON.
> 
> RELEASE=ON essentially does 2 things currently: Turn off kernel debug
> syscalls, and turn up optimization levels for the compiler. The
> printing in the capdl-loader-app needs the seL4_DebugPutChar syscall,
> so you would still need that syscall to turn on printing.

Ah that makes sense. I've worked around this issue by selectively
enabling printing only in the files I need to (using #define
ZF_LOG_LEVEL).

> If you wanted to add printing when RELEASE=ON then you would need to
> link libsel4muslcsys unconditionally, and edit main.c to call
> init_bootinfo also, and you would need to also set KernelPrinting=ON.

I'll keep this in mind for further debugging, thanks!
_______________________________________________
Devel mailing list -- devel@sel4.systems
To unsubscribe send an email to devel-leave@sel4.systems

Reply via email to