diff -ruN llvm-22.1.8/llvm/include/llvm/ADT/bit.h llvm-22.1.8-banan_os/llvm/include/llvm/ADT/bit.h --- llvm-22.1.8/llvm/include/llvm/ADT/bit.h 2026-06-16 01:33:53.000000000 +0300 +++ llvm-22.1.8-banan_os/llvm/include/llvm/ADT/bit.h 2026-07-07 10:03:36.848199127 +0300 @@ -30,7 +30,8 @@ #if defined(__linux__) || defined(__GNU__) || defined(__HAIKU__) || \ defined(__Fuchsia__) || defined(__EMSCRIPTEN__) || defined(__NetBSD__) || \ - defined(__OpenBSD__) || defined(__DragonFly__) || defined(__managarm__) + defined(__OpenBSD__) || defined(__DragonFly__) || defined(__managarm__) || \ + defined(__banan_os__) #include #elif defined(_AIX) #include diff -ruN llvm-22.1.8/llvm/include/llvm/Support/ExitCodes.h llvm-22.1.8-banan_os/llvm/include/llvm/Support/ExitCodes.h --- llvm-22.1.8/llvm/include/llvm/Support/ExitCodes.h 2026-06-16 01:33:53.000000000 +0300 +++ llvm-22.1.8-banan_os/llvm/include/llvm/Support/ExitCodes.h 2026-07-07 10:03:36.965344890 +0300 @@ -20,7 +20,7 @@ #if HAVE_SYSEXITS_H #include -#elif __MVS__ || defined(_WIN32) +#elif __MVS__ || defined(_WIN32) || defined(__banan_os__) // does not exist on z/OS and Windows. The only value used in LLVM // is EX_IOERR, which is used to signal a special error condition (broken pipe). // Define the macro with its usual value from BSD systems, which is chosen to diff -ruN llvm-22.1.8/llvm/lib/Support/Unix/Path.inc llvm-22.1.8-banan_os/llvm/lib/Support/Unix/Path.inc --- llvm-22.1.8/llvm/lib/Support/Unix/Path.inc 2026-06-16 01:33:53.000000000 +0300 +++ llvm-22.1.8-banan_os/llvm/lib/Support/Unix/Path.inc 2026-07-07 10:03:36.987545022 +0300 @@ -111,7 +111,7 @@ #endif #if defined(__NetBSD__) || defined(__DragonFly__) || defined(__GNU__) || \ - defined(__MVS__) + defined(__MVS__) || defined(__banan_os__) #define STATVFS_F_FLAG(vfs) (vfs).f_flag #else #define STATVFS_F_FLAG(vfs) (vfs).f_flags @@ -254,7 +254,7 @@ if (getprogpath(exe_path, argv0) != NULL) return exe_path; #elif defined(__linux__) || defined(__CYGWIN__) || defined(__gnu_hurd__) || \ - defined(__managarm__) + defined(__managarm__) || defined(__banan_os__) char exe_path[PATH_MAX]; const char *aPath = "/proc/self/exe"; if (sys::fs::exists(aPath)) { @@ -284,9 +284,11 @@ return std::string(real_path); #endif } +#if !defined(__banan_os__) // Fall back to the classical detection. if (getprogpath(exe_path, argv0)) return exe_path; +#endif #elif defined(__OpenBSD__) || defined(__HAIKU__) char exe_path[PATH_MAX]; // argv[0] only @@ -520,6 +522,9 @@ #elif defined(__HAIKU__) // Haiku doesn't expose this information. return false; +#elif defined(__banan_os__) + // banan-os doesn't expose this information. + return false; #elif defined(__sun) // statvfs::f_basetype contains a null-terminated FSType name of the mounted // target diff -ruN llvm-22.1.8/llvm/lib/Support/Unix/Process.inc llvm-22.1.8-banan_os/llvm/lib/Support/Unix/Process.inc --- llvm-22.1.8/llvm/lib/Support/Unix/Process.inc 2026-06-16 01:33:53.000000000 +0300 +++ llvm-22.1.8-banan_os/llvm/lib/Support/Unix/Process.inc 2026-07-07 10:03:37.017664239 +0300 @@ -37,6 +37,9 @@ #ifdef HAVE_SYS_IOCTL_H #include #endif +#ifdef __banan_os__ +#include +#endif //===----------------------------------------------------------------------===// //=== WARNING: Implementation here must contain only generic UNIX code that diff -ruN llvm-22.1.8/llvm/lib/Support/Unix/Program.inc llvm-22.1.8-banan_os/llvm/lib/Support/Unix/Program.inc --- llvm-22.1.8/llvm/lib/Support/Unix/Program.inc 2026-06-16 01:33:53.000000000 +0300 +++ llvm-22.1.8-banan_os/llvm/lib/Support/Unix/Program.inc 2026-07-07 10:03:37.031901635 +0300 @@ -334,7 +334,7 @@ namespace llvm { namespace sys { -#if defined(_AIX) +#if defined(_AIX) || defined(__banan_os__) static pid_t(wait4)(pid_t pid, int *status, int options, struct rusage *usage); #elif !defined(__Fuchsia__) using ::wait4; @@ -375,6 +375,12 @@ // would cause the call here to fail with ECHILD). return ::wait4(pid, status, options & ~WNOHANG, usage); } +#elif defined(__banan_os__) +pid_t(llvm::sys::wait4)(pid_t pid, int *status, int options, + struct rusage *usage) { + memset(usage, 0, sizeof(struct rusage)); + return ::waitpid(pid, status, options); +} #endif ProcessInfo llvm::sys::Wait(const ProcessInfo &PI, diff -ruN llvm-22.1.8/llvm/lib/Support/Unix/Threading.inc llvm-22.1.8-banan_os/llvm/lib/Support/Unix/Threading.inc --- llvm-22.1.8/llvm/lib/Support/Unix/Threading.inc 2026-06-16 01:33:53.000000000 +0300 +++ llvm-22.1.8-banan_os/llvm/lib/Support/Unix/Threading.inc 2026-07-07 10:03:37.256828558 +0300 @@ -70,6 +70,10 @@ #include // For B_OS_NAME_LENGTH #endif +#if defined(__banan_os__) +#include // For sysconf() +#endif + namespace llvm { pthread_t llvm_execute_on_thread_impl(void *(*ThreadFunc)(void *), void *Arg, @@ -121,7 +125,7 @@ pthread_t llvm_thread_get_id_impl(pthread_t Thread) { return Thread; } -pthread_t llvm_thread_get_current_id_impl() { return ::pthread_self(); } +pthread_t llvm_thread_get_current_id_impl() { return pthread_self(); } } // namespace llvm @@ -148,6 +152,8 @@ return uint64_t(syscall(__NR_gettid)); #elif defined(_AIX) return uint64_t(thread_self()); +#elif defined(__banan_os__) + return uint64_t(pthread_self()->id); #else return uint64_t(pthread_self()); #endif @@ -171,6 +177,8 @@ return 24; #elif defined(__CYGWIN__) return 16; +#elif defined(__banan_os__) + return sizeof(uthread::name); #else return 0; #endif @@ -393,7 +401,7 @@ } return CPU_COUNT(&Enabled); } -#elif (defined(__linux__) && defined(__s390x__)) || defined(_AIX) +#elif (defined(__linux__) && defined(__s390x__)) || defined(_AIX) || defined(__banan_os__) static int computeHostNumPhysicalCores() { return sysconf(_SC_NPROCESSORS_ONLN); }