newlib: Added reent support

- Reentrant wrappers will no longer be generated
  for "syscalls".
- Prefixes are no longer needed in syscalls names
- errno is now stored in the TLS reent structure.

TODO: remove prefixes _write() -> write();

Signed-off-by: Maxim Logaev <maxlogaev@proton.me>
This commit is contained in:
2026-01-02 21:38:15 +03:00
parent a7777444d2
commit d743a7eb35
16 changed files with 92 additions and 65 deletions

View File

@@ -630,7 +630,6 @@ check_PROGRAMS =
@HAVE_LIBC_SYS_KOLIBRIOS_DIR_TRUE@ libc/sys/kolibrios/chown.c \
@HAVE_LIBC_SYS_KOLIBRIOS_DIR_TRUE@ libc/sys/kolibrios/close.c \
@HAVE_LIBC_SYS_KOLIBRIOS_DIR_TRUE@ libc/sys/kolibrios/environ.c \
@HAVE_LIBC_SYS_KOLIBRIOS_DIR_TRUE@ libc/sys/kolibrios/errno.c \
@HAVE_LIBC_SYS_KOLIBRIOS_DIR_TRUE@ libc/sys/kolibrios/execve.c \
@HAVE_LIBC_SYS_KOLIBRIOS_DIR_TRUE@ libc/sys/kolibrios/fork.c \
@HAVE_LIBC_SYS_KOLIBRIOS_DIR_TRUE@ libc/sys/kolibrios/fstat.c \
@@ -653,7 +652,8 @@ check_PROGRAMS =
@HAVE_LIBC_SYS_KOLIBRIOS_DIR_TRUE@ libc/sys/kolibrios/getentropy.c \
@HAVE_LIBC_SYS_KOLIBRIOS_DIR_TRUE@ libc/sys/kolibrios/_exit.c \
@HAVE_LIBC_SYS_KOLIBRIOS_DIR_TRUE@ libc/sys/kolibrios/crt_start.S \
@HAVE_LIBC_SYS_KOLIBRIOS_DIR_TRUE@ libc/sys/kolibrios/libc_init.c
@HAVE_LIBC_SYS_KOLIBRIOS_DIR_TRUE@ libc/sys/kolibrios/libc_init.c \
@HAVE_LIBC_SYS_KOLIBRIOS_DIR_TRUE@ libc/sys/kolibrios/reent.c
@HAVE_LIBC_MACHINE_AARCH64_TRUE@am__append_66 = \
@HAVE_LIBC_MACHINE_AARCH64_TRUE@ libc/machine/aarch64/memchr-stub.c \
@@ -1936,7 +1936,6 @@ am__objects_51 = libc/ssp/libc_a-chk_fail.$(OBJEXT) \
@HAVE_LIBC_SYS_KOLIBRIOS_DIR_TRUE@am__objects_76 = libc/sys/kolibrios/libc_a-chown.$(OBJEXT) \
@HAVE_LIBC_SYS_KOLIBRIOS_DIR_TRUE@ libc/sys/kolibrios/libc_a-close.$(OBJEXT) \
@HAVE_LIBC_SYS_KOLIBRIOS_DIR_TRUE@ libc/sys/kolibrios/libc_a-environ.$(OBJEXT) \
@HAVE_LIBC_SYS_KOLIBRIOS_DIR_TRUE@ libc/sys/kolibrios/libc_a-errno.$(OBJEXT) \
@HAVE_LIBC_SYS_KOLIBRIOS_DIR_TRUE@ libc/sys/kolibrios/libc_a-execve.$(OBJEXT) \
@HAVE_LIBC_SYS_KOLIBRIOS_DIR_TRUE@ libc/sys/kolibrios/libc_a-fork.$(OBJEXT) \
@HAVE_LIBC_SYS_KOLIBRIOS_DIR_TRUE@ libc/sys/kolibrios/libc_a-fstat.$(OBJEXT) \
@@ -1959,7 +1958,8 @@ am__objects_51 = libc/ssp/libc_a-chk_fail.$(OBJEXT) \
@HAVE_LIBC_SYS_KOLIBRIOS_DIR_TRUE@ libc/sys/kolibrios/libc_a-getentropy.$(OBJEXT) \
@HAVE_LIBC_SYS_KOLIBRIOS_DIR_TRUE@ libc/sys/kolibrios/libc_a-_exit.$(OBJEXT) \
@HAVE_LIBC_SYS_KOLIBRIOS_DIR_TRUE@ libc/sys/kolibrios/libc_a-crt_start.$(OBJEXT) \
@HAVE_LIBC_SYS_KOLIBRIOS_DIR_TRUE@ libc/sys/kolibrios/libc_a-libc_init.$(OBJEXT)
@HAVE_LIBC_SYS_KOLIBRIOS_DIR_TRUE@ libc/sys/kolibrios/libc_a-libc_init.$(OBJEXT) \
@HAVE_LIBC_SYS_KOLIBRIOS_DIR_TRUE@ libc/sys/kolibrios/libc_a-reent.$(OBJEXT)
@HAVE_LIBC_MACHINE_AARCH64_TRUE@am__objects_77 = libc/machine/aarch64/libc_a-memchr-stub.$(OBJEXT) \
@HAVE_LIBC_MACHINE_AARCH64_TRUE@ libc/machine/aarch64/libc_a-memchr.$(OBJEXT) \
@HAVE_LIBC_MACHINE_AARCH64_TRUE@ libc/machine/aarch64/libc_a-memcmp-stub.$(OBJEXT) \
@@ -8153,9 +8153,6 @@ libc/sys/kolibrios/libc_a-close.$(OBJEXT): \
libc/sys/kolibrios/libc_a-environ.$(OBJEXT): \
libc/sys/kolibrios/$(am__dirstamp) \
libc/sys/kolibrios/$(DEPDIR)/$(am__dirstamp)
libc/sys/kolibrios/libc_a-errno.$(OBJEXT): \
libc/sys/kolibrios/$(am__dirstamp) \
libc/sys/kolibrios/$(DEPDIR)/$(am__dirstamp)
libc/sys/kolibrios/libc_a-execve.$(OBJEXT): \
libc/sys/kolibrios/$(am__dirstamp) \
libc/sys/kolibrios/$(DEPDIR)/$(am__dirstamp)
@@ -8225,6 +8222,9 @@ libc/sys/kolibrios/libc_a-crt_start.$(OBJEXT): \
libc/sys/kolibrios/libc_a-libc_init.$(OBJEXT): \
libc/sys/kolibrios/$(am__dirstamp) \
libc/sys/kolibrios/$(DEPDIR)/$(am__dirstamp)
libc/sys/kolibrios/libc_a-reent.$(OBJEXT): \
libc/sys/kolibrios/$(am__dirstamp) \
libc/sys/kolibrios/$(DEPDIR)/$(am__dirstamp)
libc/machine/aarch64/$(am__dirstamp):
@$(MKDIR_P) libc/machine/aarch64
@: > libc/machine/aarch64/$(am__dirstamp)
@@ -14097,7 +14097,6 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@libc/sys/kolibrios/$(DEPDIR)/libc_a-close.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@libc/sys/kolibrios/$(DEPDIR)/libc_a-crt_start.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@libc/sys/kolibrios/$(DEPDIR)/libc_a-environ.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@libc/sys/kolibrios/$(DEPDIR)/libc_a-errno.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@libc/sys/kolibrios/$(DEPDIR)/libc_a-execve.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@libc/sys/kolibrios/$(DEPDIR)/libc_a-fork.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@libc/sys/kolibrios/$(DEPDIR)/libc_a-fstat.Po@am__quote@
@@ -14112,6 +14111,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@libc/sys/kolibrios/$(DEPDIR)/libc_a-open.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@libc/sys/kolibrios/$(DEPDIR)/libc_a-read.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@libc/sys/kolibrios/$(DEPDIR)/libc_a-readlink.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@libc/sys/kolibrios/$(DEPDIR)/libc_a-reent.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@libc/sys/kolibrios/$(DEPDIR)/libc_a-sbrk.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@libc/sys/kolibrios/$(DEPDIR)/libc_a-stat.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@libc/sys/kolibrios/$(DEPDIR)/libc_a-symlink.Po@am__quote@
@@ -33556,20 +33556,6 @@ libc/sys/kolibrios/libc_a-environ.obj: libc/sys/kolibrios/environ.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -c -o libc/sys/kolibrios/libc_a-environ.obj `if test -f 'libc/sys/kolibrios/environ.c'; then $(CYGPATH_W) 'libc/sys/kolibrios/environ.c'; else $(CYGPATH_W) '$(srcdir)/libc/sys/kolibrios/environ.c'; fi`
libc/sys/kolibrios/libc_a-errno.o: libc/sys/kolibrios/errno.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -MT libc/sys/kolibrios/libc_a-errno.o -MD -MP -MF libc/sys/kolibrios/$(DEPDIR)/libc_a-errno.Tpo -c -o libc/sys/kolibrios/libc_a-errno.o `test -f 'libc/sys/kolibrios/errno.c' || echo '$(srcdir)/'`libc/sys/kolibrios/errno.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libc/sys/kolibrios/$(DEPDIR)/libc_a-errno.Tpo libc/sys/kolibrios/$(DEPDIR)/libc_a-errno.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libc/sys/kolibrios/errno.c' object='libc/sys/kolibrios/libc_a-errno.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -c -o libc/sys/kolibrios/libc_a-errno.o `test -f 'libc/sys/kolibrios/errno.c' || echo '$(srcdir)/'`libc/sys/kolibrios/errno.c
libc/sys/kolibrios/libc_a-errno.obj: libc/sys/kolibrios/errno.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -MT libc/sys/kolibrios/libc_a-errno.obj -MD -MP -MF libc/sys/kolibrios/$(DEPDIR)/libc_a-errno.Tpo -c -o libc/sys/kolibrios/libc_a-errno.obj `if test -f 'libc/sys/kolibrios/errno.c'; then $(CYGPATH_W) 'libc/sys/kolibrios/errno.c'; else $(CYGPATH_W) '$(srcdir)/libc/sys/kolibrios/errno.c'; fi`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libc/sys/kolibrios/$(DEPDIR)/libc_a-errno.Tpo libc/sys/kolibrios/$(DEPDIR)/libc_a-errno.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libc/sys/kolibrios/errno.c' object='libc/sys/kolibrios/libc_a-errno.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -c -o libc/sys/kolibrios/libc_a-errno.obj `if test -f 'libc/sys/kolibrios/errno.c'; then $(CYGPATH_W) 'libc/sys/kolibrios/errno.c'; else $(CYGPATH_W) '$(srcdir)/libc/sys/kolibrios/errno.c'; fi`
libc/sys/kolibrios/libc_a-execve.o: libc/sys/kolibrios/execve.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -MT libc/sys/kolibrios/libc_a-execve.o -MD -MP -MF libc/sys/kolibrios/$(DEPDIR)/libc_a-execve.Tpo -c -o libc/sys/kolibrios/libc_a-execve.o `test -f 'libc/sys/kolibrios/execve.c' || echo '$(srcdir)/'`libc/sys/kolibrios/execve.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libc/sys/kolibrios/$(DEPDIR)/libc_a-execve.Tpo libc/sys/kolibrios/$(DEPDIR)/libc_a-execve.Po
@@ -33878,6 +33864,20 @@ libc/sys/kolibrios/libc_a-libc_init.obj: libc/sys/kolibrios/libc_init.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -c -o libc/sys/kolibrios/libc_a-libc_init.obj `if test -f 'libc/sys/kolibrios/libc_init.c'; then $(CYGPATH_W) 'libc/sys/kolibrios/libc_init.c'; else $(CYGPATH_W) '$(srcdir)/libc/sys/kolibrios/libc_init.c'; fi`
libc/sys/kolibrios/libc_a-reent.o: libc/sys/kolibrios/reent.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -MT libc/sys/kolibrios/libc_a-reent.o -MD -MP -MF libc/sys/kolibrios/$(DEPDIR)/libc_a-reent.Tpo -c -o libc/sys/kolibrios/libc_a-reent.o `test -f 'libc/sys/kolibrios/reent.c' || echo '$(srcdir)/'`libc/sys/kolibrios/reent.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libc/sys/kolibrios/$(DEPDIR)/libc_a-reent.Tpo libc/sys/kolibrios/$(DEPDIR)/libc_a-reent.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libc/sys/kolibrios/reent.c' object='libc/sys/kolibrios/libc_a-reent.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -c -o libc/sys/kolibrios/libc_a-reent.o `test -f 'libc/sys/kolibrios/reent.c' || echo '$(srcdir)/'`libc/sys/kolibrios/reent.c
libc/sys/kolibrios/libc_a-reent.obj: libc/sys/kolibrios/reent.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -MT libc/sys/kolibrios/libc_a-reent.obj -MD -MP -MF libc/sys/kolibrios/$(DEPDIR)/libc_a-reent.Tpo -c -o libc/sys/kolibrios/libc_a-reent.obj `if test -f 'libc/sys/kolibrios/reent.c'; then $(CYGPATH_W) 'libc/sys/kolibrios/reent.c'; else $(CYGPATH_W) '$(srcdir)/libc/sys/kolibrios/reent.c'; fi`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libc/sys/kolibrios/$(DEPDIR)/libc_a-reent.Tpo libc/sys/kolibrios/$(DEPDIR)/libc_a-reent.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libc/sys/kolibrios/reent.c' object='libc/sys/kolibrios/libc_a-reent.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -c -o libc/sys/kolibrios/libc_a-reent.obj `if test -f 'libc/sys/kolibrios/reent.c'; then $(CYGPATH_W) 'libc/sys/kolibrios/reent.c'; else $(CYGPATH_W) '$(srcdir)/libc/sys/kolibrios/reent.c'; fi`
libc/machine/aarch64/libc_a-memchr-stub.o: libc/machine/aarch64/memchr-stub.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -MT libc/machine/aarch64/libc_a-memchr-stub.o -MD -MP -MF libc/machine/aarch64/$(DEPDIR)/libc_a-memchr-stub.Tpo -c -o libc/machine/aarch64/libc_a-memchr-stub.o `test -f 'libc/machine/aarch64/memchr-stub.c' || echo '$(srcdir)/'`libc/machine/aarch64/memchr-stub.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libc/machine/aarch64/$(DEPDIR)/libc_a-memchr-stub.Tpo libc/machine/aarch64/$(DEPDIR)/libc_a-memchr-stub.Po

View File

@@ -602,6 +602,9 @@ esac
# THIS TABLE IS ALPHA SORTED. KEEP IT THAT WAY.
case "${host}" in
i[3-7]86-*-kolibrios*)
newlib_cflags="${newlib_cflags} -DGETREENT_PROVIDED -DREENTRANT_SYSCALLS_PROVIDED -DMISSING_SYSCALL_NAMES"
;;
*-*-cygwin*)
test -z "$cygwin_srcdir" && cygwin_srcdir="${abs_newlib_basedir}/../winsup/cygwin"
export cygwin_srcdir

View File

@@ -92,6 +92,9 @@
/* in other words, go32 */
#define _FLOAT_RET double
#endif
#if defined (__KOLIBRIOS__)
#define __DYNAMIC_REENT__
#endif /* __KOLIBRIOS__ */
#if defined(__linux__) || defined(__RDOS__)
/* we want the reentrancy structure to be returned by a function */
#define __DYNAMIC_REENT__

View File

@@ -2,7 +2,6 @@ libc_a_SOURCES += \
%D%/chown.c \
%D%/close.c \
%D%/environ.c \
%D%/errno.c \
%D%/execve.c \
%D%/fork.c \
%D%/fstat.c \
@@ -25,4 +24,5 @@ libc_a_SOURCES += \
%D%/getentropy.c \
%D%/_exit.c \
%D%/crt_start.S \
%D%/libc_init.c
%D%/libc_init.c \
%D%/reent.c

View File

@@ -2,12 +2,10 @@
* Stub version of close.
*/
#include <_ansi.h>
#include <_syslist.h>
#include <errno.h>
#undef errno
extern int errno;
#include "warning.h"
int

View File

@@ -1,11 +0,0 @@
/* Supply a definition of errno if one not already provided. */
// FIXME: This is unsafe strub!
static int errno;
int *
__errno ()
{
return &errno;
}

View File

@@ -7,8 +7,7 @@
#include <sys/types.h>
#include <sys/stat.h>
#include <errno.h>
#undef errno
extern int errno;
#include "warning.h"
int

View File

@@ -5,8 +5,7 @@
#include <_ansi.h>
#include <_syslist.h>
#include <errno.h>
#undef errno
extern int errno;
#include "warning.h"
int

View File

@@ -5,8 +5,7 @@
#include <_ansi.h>
#include <_syslist.h>
#include <errno.h>
#undef errno
extern int errno;
#include "warning.h"
int

View File

@@ -5,8 +5,7 @@
#include <_ansi.h>
#include <_syslist.h>
#include <errno.h>
#undef errno
extern int errno;
#include "warning.h"
int

View File

@@ -1,11 +1,19 @@
/*
* SPDX-License-Identifier: GPL-2.0-only
* Copyright (C) 2026 KolibriOS team
*/
#include <kolibrios/tls.h>
#include <stdlib.h>
extern int main (void);
extern int __init_reent (void);
void
__libc_init (void)
{
main ();
exit (0);
__init_reent ();
int ret = main ();
exit (ret);
__builtin_unreachable ();
}

View File

@@ -5,8 +5,7 @@
#include <_ansi.h>
#include <_syslist.h>
#include <errno.h>
#undef errno
extern int errno;
#include "warning.h"
int

View File

@@ -5,8 +5,7 @@
#include <_ansi.h>
#include <_syslist.h>
#include <errno.h>
#undef errno
extern int errno;
#include "warning.h"
int

View File

@@ -6,8 +6,7 @@
#include <_syslist.h>
#include <errno.h>
#include <sys/types.h>
#undef errno
extern int errno;
#include "warning.h"
int

View File

@@ -0,0 +1,29 @@
/*
* SPDX-License-Identifier: GPL-2.0-only
* Copyright (C) 2026 KolibriOS team
* Author: Maxim Logaev <maxlogaev@proton.me>
*/
#include <sys/reent.h>
#include <kolibrios/syscall.h>
#include <kolibrios/tls.h>
extern void __sinit (struct _reent *);
void
__init_reent (void)
{
struct _reent *r
= (struct _reent *)_ksys (SF_SYS_MISC, SSF_MEM_ALLOC, sizeof (*r));
_REENT_INIT_PTR_ZEROED (r);
__sinit (r);
__kos_tls_set (KOS_TLS_OFF_LIBC, r);
}
struct _reent *
__getreent (void)
{
return __kos_tls_get (KOS_TLS_OFF_LIBC);
}

View File

@@ -1,22 +1,26 @@
/*
* Stub version of write.
* SPDX-License-Identifier: GPL-2.0-only
* Copyright (C) 2026 KolibriOS team
*/
#include <_ansi.h>
#include <_syslist.h>
#include <errno.h>
#undef errno
extern int errno;
#include "warning.h"
#include <kolibrios/syscall.h>
int
_write (int file,
char *ptr,
int len)
_write (int file, const char *ptr, int len)
{
errno = ENOSYS;
// Redirect stdio and stdout to debug board
if (file == 1 || file == 2)
{
for (int i = 0; i < len; i++)
_ksys (SF_BOARD, SSF_DEBUG_WRITE, ptr[i]);
return len;
}
errno = EBADF;
return -1;
}
stub_warning(_write)