Re: devel/arm-none-eabi-newlib headers inconsistencies (not functional) or am I misusing something?

From: Mark Millard <marklmi_at_yahoo.com>
Date: Wed, 31 May 2023 18:11:07 UTC
On May 31, 2023, at 06:11, José Pérez <fbl@aoek.com> wrote:

> Hi,

Hello.

> El 2023-05-27 15:21, Mark Millard escribió:
>> On May 27, 2023, at 05:27, Mark Millard <marklmi@yahoo.com> wrote:
>> It is unclear what you are doing for linking.
> 
> Linking is another chapter that will be written after we can obtain objects.
> 
> For the time being I am buinding a number of tests to see if the headers are functional or not, following your suggestion to add newlib ports header path first, and then arm-noabi-gcc header paths. I.e.
> #include <...> search starts here:
> /usr/local/arm-none-eabi/include
> /usr/local/lib/gcc/arm-none-eabi/11.3.0/include
> /usr/local/lib/gcc/arm-none-eabi/11.3.0/include-fixed
> End of search list.
> 
> In this scenario the next problem I am hitting is this one:
> % arm-none-eabi-gcc test_stdatomic.c -c -g -DDEBUG -pipe -nostdinc -isystem /usr/local/arm-none-eabi/include -isystem /usr/local/lib/gcc/arm-none-eabi/11.3.0/include -isystem /usr/local/lib/gcc/arm-none-eabi/11.3.0/include-fixed -o test_stdatomic.o
> In file included from test_stdatomic.c:2:
> /usr/local/arm-none-eabi/include/stdatomic.h: In function 'atomic_flag_test_and_set_explicit':
> /usr/local/arm-none-eabi/include/stdatomic.h:386:17: error: request for member '__val' in something not a structure or union
>  386 |         return (atomic_exchange_explicit(&__object->__flag, 1, __order));
>      |                 ^~~~~~~~~~~~~~~~~~~~~~~~
> /usr/local/arm-none-eabi/include/stdatomic.h: In function 'atomic_flag_clear_explicit':
> /usr/local/arm-none-eabi/include/stdatomic.h:393:9: error: request for member '__val' in something not a structure or union
>  393 |         atomic_store_explicit(&__object->__flag, 0, __order);
>      |         ^~~~~~~~~~~~~~~~~~~~~
> 
> % cat test_stdatomic.c
> #include <stdint.h>
> #include <stdatomic.h>
> 
> int main(int argc, char *argv[]) {
>  return 0;
> }
> 
> Any suggestion before I patch /usr/local/arm-none-eabi/include/stdatomic.h to make it work?
> 

# arm-none-eabi-gcc -std=c99 test_stdatomic.c -c -g -DDEBUG -pipe -nostdinc -isystem /usr/local/arm-none-eabi/include -isystem /usr/local/lib/gcc/arm-none-eabi/11.3.0/include -isystem /usr/local/lib/gcc/arm-none-eabi/11.3.0/include-fixed -o test_stdatomic.o
#

So: with -std=c99 added your command works fine. But using -std=c11 (even implicitly)
does not:

# arm-none-eabi-gcc -std=c11 test_stdatomic.c -c -g -DDEBUG -pipe -nostdinc -isystem /usr/local/arm-none-eabi/include -isystem /usr/local/lib/gcc/arm-none-eabi/11.3.0/include -isystem /usr/local/lib/gcc/arm-none-eabi/11.3.0/include-fixed -o test_stdatomic.o
In file included from test_stdatomic.c:2:
/usr/local/arm-none-eabi/include/stdatomic.h: In function 'atomic_flag_test_and_set_explicit':
/usr/local/arm-none-eabi/include/stdatomic.h:386:17: error: request for member '__val' in something not a structure or union
  386 |         return (atomic_exchange_explicit(&__object->__flag, 1, __order));
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/arm-none-eabi/include/stdatomic.h: In function 'atomic_flag_clear_explicit':
/usr/local/arm-none-eabi/include/stdatomic.h:393:9: error: request for member '__val' in something not a structure or union
  393 |         atomic_store_explicit(&__object->__flag, 0, __order);
      |         ^~~~~~~~~~~~~~~~~~~~~

Note that c11 added builtin atomics. It appears that
devel/arm-none-eabi-newlib does not yet correctly
handle such contexts, at least for what arm-none-eabi-gcc
provides relative to c11.

Is use of -std=c99 inappropriate to your purpose? Do
you need to use c11 (or later)?

===
Mark Millard
marklmi at yahoo.com