altos: Prepare for picolibc stdio change
[fw/altos] / src / kernel / ao_stdio.c
index 227499c81524ae4a3d521bf25ad4a460f7882cd5..c578c57cd920b3bc6ea5e4af4c1af8520cfd8283 100644 (file)
 
 #define AO_NUM_STDIOS  (HAS_USB + PACKET_HAS_SLAVE + USE_SERIAL_STDIN + CONSOLE_STDIN)
 
-__xdata struct ao_stdio ao_stdios[AO_NUM_STDIOS];
+struct ao_stdio ao_stdios[AO_NUM_STDIOS];
 
 #if AO_NUM_STDIOS > 1
-__pdata int8_t ao_cur_stdio;
-__pdata int8_t ao_num_stdios;
+int8_t ao_cur_stdio;
+int8_t ao_num_stdios;
 #else
-__pdata int8_t ao_cur_stdio;
+int8_t ao_cur_stdio;
 #define ao_cur_stdio   0
 #define ao_num_stdios  0
 #endif
@@ -108,10 +108,10 @@ flush(void)
                ao_stdios[ao_cur_stdio].flush();
 }
 
-__xdata uint8_t ao_stdin_ready;
+uint8_t ao_stdin_ready;
 
 char
-ao_getchar(void) __reentrant
+ao_getchar(void) 
 {
        int c;
        int8_t stdio;
@@ -145,13 +145,13 @@ ao_echo(void)
 int8_t
 ao_add_stdio(int (*_pollchar)(void),
             void (*putchar)(char),
-            void (*flush)(void)) __reentrant
+            void (*_flush)(void)) 
 {
        if (ao_num_stdios == AO_NUM_STDIOS)
                ao_panic(AO_PANIC_STDIO);
        ao_stdios[ao_num_stdios]._pollchar = _pollchar;
        ao_stdios[ao_num_stdios].putchar = putchar;
-       ao_stdios[ao_num_stdios].flush = flush;
+       ao_stdios[ao_num_stdios].flush = _flush;
        ao_stdios[ao_num_stdios].echo = 1;
 #if AO_NUM_STDIOS > 1
        return ao_num_stdios++;
@@ -188,4 +188,20 @@ ao_flushc(FILE *ignore)
 
 static FILE __stdio = FDEV_SETUP_STREAM(ao_putc, ao_getc, ao_flushc, _FDEV_SETUP_RW);
 
+#ifdef PICOLIBC_STDIO_GLOBALS
+
+#ifdef __strong_reference
+#define STDIO_ALIAS(x) __strong_reference(stdin, x);
+#else
+#define STDIO_ALIAS(x) FILE *const x = &__stdio;
+#endif
+
+FILE *const stdin = &__stdio;
+STDIO_ALIAS(stdout);
+STDIO_ALIAS(stderr);
+
+#else
+
 FILE *const __iob[3] = { &__stdio, &__stdio, &__stdio };
+
+#endif