Fix fr30 libgloss build
Jeff Law <[email protected]>
| Newsgroups | gmane.comp.lib.newlib |
|---|---|
| Message-ID | <[email protected]> |
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.
OK for the trunk?
jeff
P
(text/plain, 329 B)
diff --git a/libgloss/fr30/syscalls.c b/libgloss/fr30/syscalls.c
index 2558556b6..36702b03d 100644
--- a/libgloss/fr30/syscalls.c
+++ b/libgloss/fr30/syscalls.c
@@ -5,6 +5,8 @@
#include <sys/stat.h>
#include "../syscall.h"
+#pragma GCC diagnostic ignored "-Wreturn-mismatch"
+
int
_read (file, ptr, len)
int file;