supplying _foo_r functions when -DREENTRANT_SYSCALLS_PROVIDED
Jeff Johnston
jjohnstn@redhat.com
Thu Mar 27 19:56:00 GMT 2008
Patrick Mansfield wrote:
> On Thu, Mar 20, 2008 at 03:39:08PM -0700, Patrick Mansfield wrote:
>
>
>> I am trying to build SPU with -DSIGNAL_PROVIDED, -DREENTRANT_SYSCALLS_PROVIDED,
>> and -DMISSING_SYSCALL_NAMES, since the SPU doesn't need reentrant calls
>> (no threading, no signals), and setting these defines can save some space
>> and time.
>>
>> But with those defines, I end up with these undefined functions:
>>
>> _gettimeofday_r - in time.c
>> _sbrk_r - mallocr.c
>> _times_r - in clock.c
>> _write_r - in __dprintf.c (don't know if this is an issue)
>>
>> How should I fix these? Supply SPU specific defines for them?
>>
>> Or have generic defines for these if REENTRANT_SYSCALLS_PROVIDED is defined?
>>
>> i.e. defines like:
>>
>> #define _sbrk_r(ptr, incr) sbrk(incr)
>>
>
> Here's RFC patch, it shows the reent.h with changes per above.
>
> Where should these defines go?
>
> Is this the right way to make this change?
>
>
This is too SPU-specific. It just so happens that spu replaces a number
of newlib functions (e.g. I/O functions) that would use other syscalls
you haven't included.
The correct way to do this is to check for both MISSING_SYSCALL_NAMES
and REENTRANT_SYSCALLS_INCLUDED and then to create macros for all the
newlib reentrant syscalls found in libc/reent. This would need to be
documented in libc/include/reent.h as a new alternative. Some mention
should probably be made to note that if multiple threads are possible,
then dynamic reentrancy needs to be used (__DYNAMIC_REENT__). BTW: the
macro variable names should be double-underscored.
Putting them in reent.h seems a reasonable place since all code includes
this file.
-- Jeff J.
More information about the Newlib
mailing list