]> sourceware.org Git - newlib-cygwin.git/commit
Fix fr30 libgloss build
authorJeff Law <jeffreyalaw@gmail.com>
Thu, 14 Dec 2023 17:30:13 +0000 (10:30 -0700)
committerJeff Law <jeffreyalaw@gmail.com>
Thu, 14 Dec 2023 17:30:13 +0000 (10:30 -0700)
commit17a6aff334a20f63cb7f428a36dad0c8ebbdab5d
treeeaa61d897551b310f1c2dfb931743f6ca975aea2
parent3bafe2fae7a0878598a82777c623edb2faa70b74
Fix fr30 libgloss build

gcc-14 will default to c99 and as a result a fair amount of old code in newlib
(particularly libgloss) is failing to build.  I don't offhand know how many
patches will be necessary to fix the various failures. I'll just pick them off
one by one from my tree.

This particular patch works around the return-mismatch problem syscalls.c for
fr30.

That file is a bit odd in that most functions are declared as returning an
integer, but the implementations look like:

> int
> _read (file, ptr, len)
>      int    file;
>      char * ptr;
>      int    len;
> {
>   asm ("ldi:8 %0, r0" :: "i" (SYS_read) : "r0");
>   asm ("int   #10");
>
>   return;
> }

Note the lack of a value on the "return" statement.  The assumption is that the
interrupt handler implementing syscalls will put the return value into the
proper register, so falling off the end of the C function or returning with no
value works in the expected way.  It's not good code, but it probably works.

Working from that assumption I decided to just use a pragma to disable the
upgraded diagnostic from GCC -- essentially preserving existing behavior.

This is the only fr30 specific issue that needs to be resolved and the only
issue (so far) I've seen of this specific nature.
libgloss/fr30/syscalls.c
This page took 0.028623 seconds and 5 git commands to generate.