The cross toolchain now builds real hosted C++: std::string, vector, unique_ptr, iostreams and exceptions all work in a plain x86_64-montauk-g++ invocation with no special flags. This is the library that native cc1plus will link against for the GCC self-host. crt1 now runs .preinit_array/.init_array before main and hooks .fini_array through atexit (main returns via exit(), so destructors run on both exit paths). Global constructors and libgcc's eh_frame registration both ride this. GCC is reconfigured with --enable-initfini-array (modern arrays instead of .ctors), --with-newlib (satisfies libstdc++'s crossconfig for unknown hosts), --disable-wchar_t and --disable-libstdcxx-pch; the montauk gcc patch grows a hunk keeping os/generic ctype under --with-newlib (the Montauk libc is not newlib). libc additions harvested by the libstdc++ build: mbtowc/wctomb, strxfrm, strtok/strtok_r, a real vfscanf/fscanf/scanf (character- driven with widths and l/ll; also unblocks gprof later), fgetpos/ fsetpos/setbuf/fpos_t, modf plus the C99 float math variants (acosf..tanhf, hypot/hypotf as wrappers), FP_* classification macros, the full POSIX errno vocabulary, complete DT_* dirent types, and mbstate_t. The SDK ships the real libstdc++.a (was an empty stand-in), the C++ headers at 0:/sdk/include/c++, and cxx-test.elf (global ctor, string, vector+sort, unique_ptr, throw/catch; exits 0 on 5/5). Ramdisk sits at 1571 files, within the 2048 table. Co-Authored-By: Claude Fable 5 <[email protected]>
100 lines
2.2 KiB
C
100 lines
2.2 KiB
C
#ifndef _LIBC_ERRNO_H
|
|
#define _LIBC_ERRNO_H
|
|
|
|
#pragma once
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
extern int errno;
|
|
|
|
/* Linux errno numbering. */
|
|
#define EPERM 1
|
|
#define ENOENT 2
|
|
#define ESRCH 3
|
|
#define EINTR 4
|
|
#define EIO 5
|
|
#define ENXIO 6
|
|
#define E2BIG 7
|
|
#define ENOEXEC 8
|
|
#define EBADF 9
|
|
#define ECHILD 10
|
|
#define EAGAIN 11
|
|
#define ENOMEM 12
|
|
#define EACCES 13
|
|
#define EFAULT 14
|
|
#define EBUSY 16
|
|
#define EEXIST 17
|
|
#define EXDEV 18
|
|
#define ENODEV 19
|
|
#define ENOTDIR 20
|
|
#define EISDIR 21
|
|
#define EINVAL 22
|
|
#define ENFILE 23
|
|
#define EMFILE 24
|
|
#define ENOTTY 25
|
|
#define EFBIG 27
|
|
#define ENOSPC 28
|
|
#define ESPIPE 29
|
|
#define EROFS 30
|
|
#define EMLINK 31
|
|
#define EPIPE 32
|
|
#define EDOM 33
|
|
#define ERANGE 34
|
|
#define EDEADLK 35
|
|
#define ENAMETOOLONG 36
|
|
#define ENOLCK 37
|
|
#define ENOSYS 38
|
|
#define ENOTEMPTY 39
|
|
#define ELOOP 40
|
|
#define EWOULDBLOCK EAGAIN
|
|
#define ETXTBSY 26
|
|
#define ENOMSG 42
|
|
#define EIDRM 43
|
|
#define ENOSTR 60
|
|
#define ENODATA 61
|
|
#define ETIME 62
|
|
#define ENOSR 63
|
|
#define ENOLINK 67
|
|
#define EPROTO 71
|
|
#define EMULTIHOP 72
|
|
#define EBADMSG 74
|
|
#define EOVERFLOW 75
|
|
#define EILSEQ 84
|
|
#define ENOTSOCK 88
|
|
#define EDESTADDRREQ 89
|
|
#define EMSGSIZE 90
|
|
#define EPROTOTYPE 91
|
|
#define ENOPROTOOPT 92
|
|
#define EPROTONOSUPPORT 93
|
|
#define EOPNOTSUPP 95 /* == ENOTSUP, Linux numbering */
|
|
#define EAFNOSUPPORT 97
|
|
#define EADDRINUSE 98
|
|
#define EADDRNOTAVAIL 99
|
|
#define ENETDOWN 100
|
|
#define ENETUNREACH 101
|
|
#define ENETRESET 102
|
|
#define ECONNABORTED 103
|
|
#define ECONNRESET 104
|
|
#define ENOBUFS 105
|
|
#define EISCONN 106
|
|
#define ENOTCONN 107
|
|
#define ETIMEDOUT 110
|
|
#define ECONNREFUSED 111
|
|
#define EHOSTUNREACH 113
|
|
#define EALREADY 114
|
|
#define EINPROGRESS 115
|
|
#define ESTALE 116
|
|
#define EDQUOT 122
|
|
#define ECANCELED 125
|
|
#define EOWNERDEAD 130
|
|
#define ENOTRECOVERABLE 131
|
|
#define ENOTSUP 95
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* _LIBC_ERRNO_H */
|