Whoops, here
<https://github.com/winksaville/sel4-min-sel4/tree/no-libc-dependency> is
the correct link, the link in the previous message was older.


On Fri, Jul 3, 2015 at 3:39 PM Wink Saville <w...@saville.com> wrote:

> Here
> <https://github.com/winksaville/sel4-min-sel4/tree/no-libc-using-libsel4_gen>
> is another try, there are now separate libs for printf, putchar and assert
> plus some new simple apps. The app myassert shows overriding of the assert
> methods, here is the commit message:
>
>     libsel4 without dependencies on libc.
>
>     There are now separate libs for benchmark, assert, printf and putchar:
>
>       libs/libsel4_benchmark
>       libs/libsel4_assert
>       libs/libsel4_printf
>       libs/libsel4_putchar
>
>     And some simple test apps:
>
>       apps/test-newlibs -> test simple things
>       apps/min-app -> Does nothing, just retuns 0
>       apps/hw -> tests putchar
>       apps/helloworld -> tests printf
>       apps/assert -> tests seL4_Asserts ..
>       apps/myassert -> tests that we can override _seL4_AssertFail ..
>       apps/bootinfo -> tests that we can access seL4_BootInfo
>
>     The primary changes are introducing sel4_types.h and removing std*
> types
>     plus porting assert and IO code from the kernel to libsel4_assert
>     and libsel4_printf, libsel4_putchar.
>
>     This means the code within libraries do not overload any typical libc
>     entities. Instead the libraries use types like seL4_Uint32 ... instead
> of
>     uint32_t. And printf is now seL4_Printf and assert is seL4_Assert ....
>
>     Finally, the only file modified that effects kernel code is
>     kernel/tools/bitfield_gen.py. It needed to be modified as it generates
>     files for both kernel and user space. And for user space the generated
> code
>     (types_gen.h) needed to use the new types and asserts. The changes
> should
>     not change what is generated for the kernel and I did a comparison of
>     kernel_final.{c|s} before and after my change and the only differences
>     were time stamps.
>
>
>
> On Thu, Jul 2, 2015 at 9:47 PM Adrian Danis <adrian.da...@nicta.com.au>
> wrote:
>
>>  My main problem with this change remains bringing in all of this IO
>> implementation into the C library. As far as I can tell all of the putchar,
>> printf, varargs, halt etc is introduced just to support assertions. Why not
>> rely on the user system to provide the actual assertion implementation,
>> allowing all of the I/O code to be moved out of this library?
>>
>> i.e. define assert to something like
>>
>> #ifdef NDEBUG
>> #define libsel4_assert(x) (void)0
>> #else
>> #define libsel4_assert(x) ((void)((x) || (__assert_fail(#x, __FILE__,
>> __LINE__, __func__),0)))
>> #endif
>> void __assert_fail (const char *, const char *, int, const char *);
>>
>> And then rely on the user code to provide an implementation of
>> __assert_fail, which if they are linking against the muslc library is
>> already provided.
>>
>>
>> Adrian
>>
>>
>> On 03/07/15 13:11, Wink Saville wrote:
>>
>> @Harry,
>>
>> I'll fix the comment.
>>
>>  Using print_string is a good idea, I'll look into how to create a
>> string with __FILE__, __LINE__, __func__ at compile time rather than
>> runtime, maybe just using paste ("#") will work.
>>
>>  I guess my feeling is asserts should work without the user having to do
>> extra steps, so there should be a default one in any case. Also, I believe
>> it can be overridden at link time by the user supplying their own
>> implementation.
>>
>>  On using "assert 0" to eliminate duplicate code, do you mean eliminate
>> "_seL4_Fail" and just have "_seL4_AssertFail"?
>>
>>
>>
>>  On Thu, Jul 2, 2015 at 7:52 PM Wink Saville <w...@saville.com> wrote:
>>
>>>  Moving sel4_benchmark.h into libsel4 was something I was thinking we
>>> might do. I'm thinking longer maybe it could significantly expand and
>>> possibly have supporting c sources so that's why I kept it separate for now.
>>>
>>> On using error rather than message, NP, I chose message because I didn't
>>> want to always force people to change the configuration, but maybe that
>>> would be error is better.
>>>
>>> Some what related, I've chosen to always assume putchar would be
>>> available in some configurations, so I created
>>> sel4_debug_printf.h/sel4_debug_assert.h which uses NDEBUG to conditionally
>>> turn off/on asserts and printf. Where as sel4_printf.h/sel4_assert.h
>>> assumes putchar would always be available. So this a different behavior
>>> then previously and people may not like it.
>>>
>>> As I said, still quite a bit to discuss and of course, the main one: is
>>> having libsel4 independent of libc something that's desirable? Which,
>>> obviously you don't think it is, but others seem to like it, so we'll see
>>> what happens.
>>>  -- Wink
>>>
>>>  On Thu, Jul 2, 2015, 5:25 PM Matthew Fernandez <
>>> matthew.fernan...@nicta.com.au> wrote:
>>>
>>>> Though I'm still opposed to this change overall, my two cents on the
>>>> current state:
>>>>
>>>>   - Should we just put the benchmarking code in libsel4bench [0]? I
>>>> realise the former is for
>>>> benchmarking the kernel and the latter is (arguably) for benchmarking
>>>> userspace, but it seems to me
>>>> a better home for it.
>>>>
>>>>   - You've used `#pragma message` in one instance. I would prefer
>>>> `#error` for consistency, though
>>>> I'm aware `#pragma message` is more portable. Moreover, why are we
>>>> emitting messages here in the
>>>> first place? It's a perfectly valid (in fact the default) configuration
>>>> to have the benchmarking
>>>> syscalls disabled.
>>>>
>>>> [0]: https://github.com/seL4/libsel4bench
>>>>
>>>> On 03/07/15 10:19, Wink Saville wrote:
>>>> > One other note, this isn't done. It still needs to be integrated with
>>>> muslc (libc) and at a minimum
>>>> > seL4_Halt needs to be properly implemented. And I'm sure there will
>>>> be plenty of other changes
>>>> > needed but I hope we're closer.
>>>> >
>>>> > On Thu, Jul 2, 2015 at 5:11 PM Wink Saville <w...@saville.com
>>>> <mailto:w...@saville.com>> wrote:
>>>> >
>>>> >     Here <https://github.com/winksaville/sel4-min-sel4/tree/no-libc3>
>>>> is try #3, I've pasted the
>>>> >     commit message below as it tells the story, let me know what you
>>>> think:
>>>> >
>>>> >          libsel4 with no libc dependency.
>>>> >          The primary changes are introducing sel4_types.h and
>>>> removing std* types
>>>> >          plus porting assert and printf code from the kernel to
>>>> libsel4. All of
>>>> >          this means the code within libsel4 does not overload any
>>>> typical libc
>>>> >          entities. So now libsel4 uses types like seL4_Uint32 ...
>>>> instead of
>>>> >          uint32_t. And printf is now seL4_Printf and assert is
>>>> seL4_Assert ....
>>>> >          I'm also using sel4_ prefixes for various files as I felt it
>>>> was more
>>>> >          consistent with the names of the entities within the files.
>>>> >          The only new library is libsel4_benchmark and since it
>>>> consists of just
>>>> >          sel4_benchmark.h we might want to move that back into
>>>> libsel4. I would
>>>> >          have liked to move out libsel4_assert, libsel4_printf and
>>>> libsel4_putchar
>>>> >          but since asserts are used by low level generated code I
>>>> couldn't come up
>>>> >          with a good way of doing that.
>>>> >          Finally, the only file modified that effects kernel code is
>>>> >          kernel/tools/bitfield_gen.py. It needed to be modified as it
>>>> generates
>>>> >          files for both kernel and user space. And for user space the
>>>> generated code
>>>> >          (types_gen.h) needed to use the new types and asserts. The
>>>> changes should
>>>> >          not change what is generated for the kernel and I did a
>>>> comparison of
>>>> >          kernel_final.{c|s} before and after my change and the only
>>>> differences
>>>> >          were time stamps
>>>> >
>>>> >     -- Wink
>>>> >
>>>> >     On Mon, Jun 29, 2015 at 7:07 PM Wink Saville <w...@saville.com
>>>> <mailto:w...@saville.com>> wrote:
>>>> >
>>>> >         Will do.
>>>> >
>>>> >
>>>> >         On Mon, Jun 29, 2015, 7:05 PM Anna Lyons <
>>>> anna.ly...@nicta.com.au
>>>> >         <mailto:anna.ly...@nicta.com.au>> wrote:
>>>> >
>>>> >
>>>> >             Hi,
>>>> >
>>>> >              >
>>>> >              > Currently there is at least one known problem, I
>>>> modified
>>>> >              > bitfield_gen.py so types_gen.h has no asserts since at
>>>> the moment the
>>>> >              > kernel uses assert and userspace is libsel4_assert. We
>>>> could either do
>>>> >              > something like I've done and remove them or change the
>>>> kernel to use
>>>> >              > libsel4_assert or something else.
>>>> >              >
>>>> >
>>>> >             The asserts are really important to avoid horrible bugs
>>>> when using
>>>> >             functions created by the bitfield generator, so if we go
>>>> ahead with this
>>>> >             let's make sure they survive in some form.
>>>> >
>>>> >             Cheers,
>>>> >             Anna.
>>>> >
>>>> >             ________________________________
>>>> >
>>>> >             The information in this e-mail may be confidential and
>>>> subject to legal professional
>>>> >             privilege and/or copyright. National ICT Australia
>>>> Limited accepts no liability for any
>>>> >             damage caused by this email or its attachments.
>>>> >
>>>> >             _______________________________________________
>>>> >             Devel mailing list
>>>> >             Devel@sel4.systems
>>>> >             https://sel4.systems/lists/listinfo/devel
>>>> >
>>>> >
>>>> >
>>>> > _______________________________________________
>>>> > Devel mailing list
>>>> > Devel@sel4.systems
>>>> > https://sel4.systems/lists/listinfo/devel
>>>> >
>>>>
>>>> ________________________________
>>>>
>>>> The information in this e-mail may be confidential and subject to legal
>>>> professional privilege and/or copyright. National ICT Australia Limited
>>>> accepts no liability for any damage caused by this email or its 
>>>> attachments.
>>>>
>>>
>>
>> _______________________________________________
>> Devel mailing listDevel@sel4.systemshttps://sel4.systems/lists/listinfo/devel
>>
>>
>>
_______________________________________________
Devel mailing list
Devel@sel4.systems
https://sel4.systems/lists/listinfo/devel

Reply via email to