C99 support in Newlib
Andre Vieira (lists)
Thu Jan 14 16:42:00 GMT 2016
On 14/01/16 15:27, Joel Sherrill wrote:
> On 1/14/2016 8:04 AM, Andre Vieira (lists) wrote:
>> On 11/01/16 14:27, Andre Vieira (lists) wrote:
>>> On 20/01/15 11:49, Freddie Chopin wrote:
>>>> On 01/20/2015 12:46 PM, Corinna Vinschen wrote:
>>>>> On Jan 20 12:21, Freddie Chopin wrote:
>>>>>> On 01/20/2015 11:06 AM, Corinna Vinschen wrote:
>>>>>>> On Jan 20 17:19, Joey Ye wrote:
>>>>>>>> Corinna, May I know which features are missing please?
>>>>>>> As far as I can tell, mainly the long double functions for targets
>>>>>>> with sizeof(double) != sizeof(long double).
>>>>>> I have one more - from my recent browsing of scanf() code, I assume
>>>>>> "%[...]" is supported, but "%[^...]" is not.
>>>>> No, it is. See libc/stdio/sccl.c.
>>>> Right, my mistake (; Sorry for the noise then (;
>>> Hi there,
>>> I thought I'd reply to this thread as it is very much related to my
>>> In a recent GCC patch a change to an optimization, which now checks for
>>> the existence of libc support for C99 functions, lead to a regression
>>> for arm-none-eabi. This is because currently GCC is set up to assume no
>>> C99 support is available for arm-none-eabi. As far as I know this is
>>> because it comes with newlib and as this thread points out it does not
>>> claim to fully support C99. See
>>> Hopefully with some help I can figure out what GCC 'function classes'
>>> can be seen as supported by newlib for arm-none-eabi. These function
>>> classes are:
>>> functions only part of the standard in C94 or above.
>>> functions only part of the standard in C99 or above.
>>> math complex functions only part of the standard in C99 or above.
>>> functions only part of the standard in C11 or above
>>> And there is also 'function_sincos' for which I couldn't find a
>>> definition though I assume its for the GNU extension 'sincos'.
>>> $arm-none-eabi-nm libm.a | grep sincos
>>> 00000000 T sincos
>>> 00000000 T sincosf
>>> Can someone confirm the support or lack thereof for these classes in
>>> newlib for 'arm-none-eabi'.
>> As an investigation exercise I constructed a list of all functions in
>> the C99 standard and I checked whether the newlib version we build for
>> arm-none-eabi defined these and I found that it was missing quite a lot
>> of them! See attached file.
>> That answers my question for the bugzilla ticket. We can not enable
>> function_c99_* function class support for arm-none-eabi.
> I think you checked it against C11. I spotted thrd_create on the list
> and don't think that is C99.
> My quick impression is:
> + to agree that the math methods are C99 and missing.
> + thread, mutex and other concurrency objects are C11
> + *_s is C11
> + timespec_get is C11
> At least that's based on cppreference.com. Did I miss something?
> I agree a complete set of C99 methods is important.
> C11 adds some things which newlib should support and others which
> are the domain of the hosting environment. Newlib doesn't support
> pthreads for example (but has pthread.h) so C11 threads should
> follow the same pattern.
Yes I did, sorry for the noise. I am also chasing this up on gcc-patches
ml as its related to an open issue:
I had categorized the missing functions into:
- Complex Arithmetic (which fall under the function_c99_math_complex class)
- floating-point environment
- Functions for greatest-width integer types
- atomics (missing atomic_is_lock_free and atomic_fetch_key)
- Bounds-checking interfaces
The last two are C11, as Szabolcs also pointed out in his reply:
So the missing C99 functions are the:
- Complex Arithmetic (all long double versions)
- Floating-point environment
- Functions for greatest-width integer types.
More information about the Newlib