diff --git a/kernel/include/kernel/Epoll.h b/kernel/include/kernel/Epoll.h index 4e6f098c..89a29c35 100644 --- a/kernel/include/kernel/Epoll.h +++ b/kernel/include/kernel/Epoll.h @@ -68,7 +68,9 @@ namespace Kernel bool has_fd(int fd) const { - if (fd < 0 || static_cast(fd) >= events.size()) + // For some reason having (fd < 0 || ...) makes GCC 15.1.0 + // think bitmap access can be out of bounds... + if (static_cast(fd) >= events.size()) return false; return bitmap[fd / 32] & (1u << (fd % 32)); } diff --git a/kernel/include/kernel/Processor.h b/kernel/include/kernel/Processor.h index bb50ca2f..2939fa26 100644 --- a/kernel/include/kernel/Processor.h +++ b/kernel/include/kernel/Processor.h @@ -179,7 +179,7 @@ namespace Kernel BAN::Atomic m_smp_free_lock { false }; SMPMessage* m_smp_free { nullptr }; - SMPMessage* m_smp_message_storage; + SMPMessage* m_smp_message_storage { nullptr }; void* m_current_page_table { nullptr }; diff --git a/kernel/include/kernel/Syscall.h b/kernel/include/kernel/Syscall.h index 73ccc4c9..7922fdd9 100644 --- a/kernel/include/kernel/Syscall.h +++ b/kernel/include/kernel/Syscall.h @@ -13,7 +13,7 @@ namespace Kernel long ret; asm volatile("int %[irq]" : "=a"(ret) - : [irq]"i"(IRQ_SYSCALL) + : [irq]"i"(static_cast(IRQ_SYSCALL)) // WTF GCC 15 , "a"(syscall) , "b"((uintptr_t)arg1) , "c"((uintptr_t)arg2) diff --git a/kernel/kernel/ACPI/AML/Node.cpp b/kernel/kernel/ACPI/AML/Node.cpp index 3da6f554..a272cf64 100644 --- a/kernel/kernel/ACPI/AML/Node.cpp +++ b/kernel/kernel/ACPI/AML/Node.cpp @@ -746,6 +746,8 @@ namespace Kernel::ACPI::AML return {}; } +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wstack-usage=" static BAN::ErrorOr perform_store(const Node& source, Reference* target, TargetType target_type) { dprintln_if(AML_DUMP_FUNCTION_CALLS, "perform_store"); @@ -826,6 +828,7 @@ namespace Kernel::ACPI::AML return {}; } +#pragma GCC diagnostic pop static BAN::ErrorOr store_into_target(ParseContext& context, const Node& node) { diff --git a/kernel/kernel/APIC.cpp b/kernel/kernel/APIC.cpp index 7e1a832e..b1118144 100644 --- a/kernel/kernel/APIC.cpp +++ b/kernel/kernel/APIC.cpp @@ -176,19 +176,20 @@ namespace Kernel switch (entry->type) { case 0: - Processor processor; - processor.processor_id = entry->entry0.acpi_processor_id; - processor.apic_id = entry->entry0.apic_id; - processor.flags = entry->entry0.flags & 0x03; - MUST(apic->m_processors.push_back(processor)); + MUST(apic->m_processors.emplace_back(Processor { + .processor_id = entry->entry0.acpi_processor_id, + .apic_id = entry->entry0.apic_id, + .flags = static_cast(entry->entry0.flags & 0x03), + })); break; case 1: - IOAPIC ioapic; - ioapic.id = entry->entry1.ioapic_id; - ioapic.paddr = entry->entry1.ioapic_address; - ioapic.gsi_base = entry->entry1.gsi_base; - ioapic.max_redirs = 0; - MUST(apic->m_io_apics.push_back(ioapic)); + MUST(apic->m_io_apics.emplace_back(IOAPIC { + .id = entry->entry1.ioapic_id, + .paddr = entry->entry1.ioapic_address, + .vaddr = 0, + .gsi_base = entry->entry1.gsi_base, + .max_redirs = 0, + })); break; case 2: apic->m_irq_overrides[entry->entry2.irq_source] = entry->entry2.gsi; diff --git a/kernel/kernel/Processor.cpp b/kernel/kernel/Processor.cpp index 989d5069..3b8c64b7 100644 --- a/kernel/kernel/Processor.cpp +++ b/kernel/kernel/Processor.cpp @@ -391,7 +391,7 @@ namespace Kernel // NOTE: This is offset by 2 pointers since interrupt without PL change // does not push SP and SS. This allows accessing "whole" interrupt stack. :: [load_sp]"r"(Processor::current_stack_top() - 2 * sizeof(uintptr_t)), - [yield]"i"(IRQ_YIELD) + [yield]"i"(static_cast(IRQ_YIELD)) // WTF GCC 15 : "memory", "rcx" ); #elif ARCH(i686) @@ -403,7 +403,7 @@ namespace Kernel // NOTE: This is offset by 2 pointers since interrupt without PL change // does not push SP and SS. This allows accessing "whole" interrupt stack. :: [load_sp]"r"(Processor::current_stack_top() - 2 * sizeof(uintptr_t)), - [yield]"i"(IRQ_YIELD) + [yield]"i"(static_cast(IRQ_YIELD)) // WTF GCC 15 : "memory", "ecx" ); #else diff --git a/toolchain/binutils-2.44.patch b/toolchain/binutils-2.44.patch new file mode 100644 index 00000000..db0440c5 --- /dev/null +++ b/toolchain/binutils-2.44.patch @@ -0,0 +1,144 @@ +diff -ruN binutils-2.44/bfd/config.bfd binutils-2.44-banan_os/bfd/config.bfd +--- binutils-2.44/bfd/config.bfd 2025-02-02 02:00:00.000000000 +0200 ++++ binutils-2.44-banan_os/bfd/config.bfd 2025-06-19 11:04:48.871180511 +0300 +@@ -612,6 +612,11 @@ + targ_defvec=i386_elf32_vec + targ_selvecs=iamcu_elf32_vec + ;; ++ i[3-7]86-*-banan_os*) ++ targ_defvec=i386_elf32_vec ++ targ_selvecs= ++ targ64_selvecs=x86_64_elf64_vec ++ ;; + i[3-7]86-*-dicos*) + targ_defvec=i386_elf32_vec + targ_selvecs=iamcu_elf32_vec +@@ -666,6 +671,11 @@ + targ64_selvecs=x86_64_elf64_vec + ;; + #ifdef BFD64 ++ x86_64-*-banan_os*) ++ targ_defvec=x86_64_elf64_vec ++ targ_selvecs=i386_elf32_vec ++ want64=true ++ ;; + x86_64-*-cloudabi*) + targ_defvec=x86_64_elf64_cloudabi_vec + want64=true +diff -ruN binutils-2.44/config.sub binutils-2.44-banan_os/config.sub +--- binutils-2.44/config.sub 2025-02-02 02:00:00.000000000 +0200 ++++ binutils-2.44-banan_os/config.sub 2025-06-19 11:05:16.922967546 +0300 +@@ -1976,6 +1976,7 @@ + | atheos* \ + | auroraux* \ + | aux* \ ++ | banan_os* \ + | beos* \ + | bitrig* \ + | bme* \ +diff -ruN binutils-2.44/gas/configure.tgt binutils-2.44-banan_os/gas/configure.tgt +--- binutils-2.44/gas/configure.tgt 2025-02-02 02:00:00.000000000 +0200 ++++ binutils-2.44-banan_os/gas/configure.tgt 2025-06-19 11:06:43.781629742 +0300 +@@ -225,6 +225,7 @@ + h8300-*-elf) fmt=elf ;; + h8300-*-linux*) fmt=elf em=linux ;; + ++ i386-*-banan_os*) fmt=elf em=gnu ;; + i386-*-beospe*) fmt=coff em=pe ;; + i386-*-beos*) fmt=elf ;; + i386-*-elfiamcu) fmt=elf arch=iamcu ;; +diff -ruN binutils-2.44/ld/configure.tgt binutils-2.44-banan_os/ld/configure.tgt +--- binutils-2.44/ld/configure.tgt 2025-02-02 02:00:00.000000000 +0200 ++++ binutils-2.44-banan_os/ld/configure.tgt 2025-06-19 11:08:48.725342089 +0300 +@@ -367,6 +367,10 @@ + i[3-7]86-*-rdos*) targ_emul=elf_i386 + targ_extra_emuls=elf_iamcu + ;; ++i[3-7]86-*-banan_os*) targ_emul=elf_i386_banan_os ++ targ_extra_emuls=elf_i386 ++ targ64_extra_emuls="elf_x86_64_banan_os elf_x86_64" ++ ;; + i[3-7]86-*-bsd) targ_emul=i386bsd + targ_extra_ofiles= + ;; +@@ -1000,6 +1004,9 @@ + ;; + x86_64-*-rdos*) targ_emul=elf64rdos + ;; ++x86_64-*-banan_os*) targ_emul=elf_x86_64_banan_os ++ targ_extra_emuls="elf_i386_banan_os elf_x86_64 elf_i386" ++ ;; + x86_64-*-cloudabi*) targ_emul=elf_x86_64_cloudabi + ;; + x86_64-*-haiku*) targ_emul=elf_x86_64_haiku +diff -ruN binutils-2.44/ld/emulparams/elf_banan_os.sh binutils-2.44-banan_os/ld/emulparams/elf_banan_os.sh +--- binutils-2.44/ld/emulparams/elf_banan_os.sh 1970-01-01 02:00:00.000000000 +0200 ++++ binutils-2.44-banan_os/ld/emulparams/elf_banan_os.sh 2025-06-19 11:10:25.877588187 +0300 +@@ -0,0 +1 @@ ++ELF_INTERPRETER_NAME=\"/usr/lib/DynamicLoader.so\" +diff -ruN binutils-2.44/ld/emulparams/elf_i386_banan_os.sh binutils-2.44-banan_os/ld/emulparams/elf_i386_banan_os.sh +--- binutils-2.44/ld/emulparams/elf_i386_banan_os.sh 1970-01-01 02:00:00.000000000 +0200 ++++ binutils-2.44-banan_os/ld/emulparams/elf_i386_banan_os.sh 2025-06-19 11:10:51.233390738 +0300 +@@ -0,0 +1,2 @@ ++source_sh ${srcdir}/emulparams/elf_i386.sh ++source_sh ${srcdir}/emulparams/elf_banan_os.sh +diff -ruN binutils-2.44/ld/emulparams/elf_x86_64_banan_os.sh binutils-2.44-banan_os/ld/emulparams/elf_x86_64_banan_os.sh +--- binutils-2.44/ld/emulparams/elf_x86_64_banan_os.sh 1970-01-01 02:00:00.000000000 +0200 ++++ binutils-2.44-banan_os/ld/emulparams/elf_x86_64_banan_os.sh 2025-06-19 11:11:11.664231452 +0300 +@@ -0,0 +1,2 @@ ++source_sh ${srcdir}/emulparams/elf_x86_64.sh ++source_sh ${srcdir}/emulparams/elf_banan_os.sh +diff -ruN binutils-2.44/ld/Makefile.am binutils-2.44-banan_os/ld/Makefile.am +--- binutils-2.44/ld/Makefile.am 2025-02-02 02:00:00.000000000 +0200 ++++ binutils-2.44-banan_os/ld/Makefile.am 2025-06-19 11:12:13.666857368 +0300 +@@ -277,6 +277,7 @@ + eelf32xtensa.c \ + eelf32z80.c \ + eelf_i386.c \ ++ eelf_i386_banan_os.c \ + eelf_i386_be.c \ + eelf_i386_fbsd.c \ + eelf_i386_haiku.c \ +@@ -459,6 +460,7 @@ + eelf64tilegx_be.c \ + eelf_mipsel_haiku.c \ + eelf_x86_64.c \ ++ eelf_x86_64_banan_os.c \ + eelf_x86_64_cloudabi.c \ + eelf_x86_64_fbsd.c \ + eelf_x86_64_haiku.c \ +diff -ruN binutils-2.44/ld/Makefile.in binutils-2.44-banan_os/ld/Makefile.in +--- binutils-2.44/ld/Makefile.in 2025-02-02 02:00:00.000000000 +0200 ++++ binutils-2.44-banan_os/ld/Makefile.in 2025-06-19 11:14:27.198888034 +0300 +@@ -788,6 +788,7 @@ + eelf32xtensa.c \ + eelf32z80.c \ + eelf_i386.c \ ++ eelf_i386_banan_os.c \ + eelf_i386_be.c \ + eelf_i386_fbsd.c \ + eelf_i386_haiku.c \ +@@ -969,6 +970,7 @@ + eelf64tilegx_be.c \ + eelf_mipsel_haiku.c \ + eelf_x86_64.c \ ++ eelf_x86_64_banan_os.c \ + eelf_x86_64_cloudabi.c \ + eelf_x86_64_fbsd.c \ + eelf_x86_64_haiku.c \ +@@ -1476,6 +1478,7 @@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf64tilegx.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf64tilegx_be.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf_i386.Po@am__quote@ ++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf_i386_banan_os.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf_i386_be.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf_i386_fbsd.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf_i386_haiku.Po@am__quote@ +@@ -1486,6 +1489,7 @@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf_mipsel_haiku.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf_s390.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf_x86_64.Po@am__quote@ ++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf_x86_64_banan_os.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf_x86_64_cloudabi.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf_x86_64_fbsd.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf_x86_64_haiku.Po@am__quote@ diff --git a/toolchain/build.sh b/toolchain/build.sh index 004f8e7e..0df1dfa8 100755 --- a/toolchain/build.sh +++ b/toolchain/build.sh @@ -1,11 +1,11 @@ #!/bin/bash set -e -BINUTILS_VERSION="binutils-2.39" +BINUTILS_VERSION="binutils-2.44" BINUTILS_TAR="$BINUTILS_VERSION.tar.gz" BINUTILS_URL="https://ftp.gnu.org/gnu/binutils/$BINUTILS_TAR" -GCC_VERSION="gcc-12.2.0" +GCC_VERSION="gcc-15.1.0" GCC_TAR="$GCC_VERSION.tar.gz" GCC_URL="https://ftp.gnu.org/gnu/gcc/$GCC_VERSION/$GCC_TAR" diff --git a/toolchain/gcc-15.1.0.patch b/toolchain/gcc-15.1.0.patch new file mode 100644 index 00000000..c98e0c10 --- /dev/null +++ b/toolchain/gcc-15.1.0.patch @@ -0,0 +1,219 @@ +diff -ruN gcc-15.1.0/config.sub gcc-15.1.0-banan_os/config.sub +--- gcc-15.1.0/config.sub 2025-04-25 11:17:59.000000000 +0300 ++++ gcc-15.1.0-banan_os/config.sub 2025-06-19 11:29:44.368548733 +0300 +@@ -1749,7 +1749,7 @@ + | onefs* | tirtos* | phoenix* | fuchsia* | redox* | bme* \ + | midnightbsd* | amdhsa* | unleashed* | emscripten* | wasi* \ + | nsk* | powerunix* | genode* | zvmoe* | qnx* | emx* | zephyr* \ +- | fiwix* ) ++ | fiwix* | banan_os* ) + ;; + # This one is extra strict with allowed versions + sco3.2v2 | sco3.2v[4-9]* | sco5v6*) +diff -ruN gcc-15.1.0/fixincludes/mkfixinc.sh gcc-15.1.0-banan_os/fixincludes/mkfixinc.sh +--- gcc-15.1.0/fixincludes/mkfixinc.sh 2025-04-25 11:17:59.000000000 +0300 ++++ gcc-15.1.0-banan_os/fixincludes/mkfixinc.sh 2025-06-19 11:30:13.427343038 +0300 +@@ -11,6 +11,7 @@ + + # Check for special fix rules for particular targets + case $machine in ++ *-*-banan_os* | \ + i?86-*-cygwin* | \ + *-mingw32* | \ + powerpc-*-eabisim* | \ +diff -ruN gcc-15.1.0/gcc/config/banan_os.h gcc-15.1.0-banan_os/gcc/config/banan_os.h +--- gcc-15.1.0/gcc/config/banan_os.h 1970-01-01 02:00:00.000000000 +0200 ++++ gcc-15.1.0-banan_os/gcc/config/banan_os.h 2025-06-19 11:30:53.316059523 +0300 +@@ -0,0 +1,35 @@ ++/* Useful if you wish to make target-specific GCC changes. */ ++#undef TARGET_BANAN_OS ++#define TARGET_BANAN_OS 1 ++ ++/* Default arguments you want when running your ++ *-banan_os-gcc toolchain */ ++#undef LIB_SPEC ++#define LIB_SPEC "-lc" /* link against C standard library */ ++ ++/* Files that are linked before user code. ++ The %s tells GCC to look for these files in the library directory. */ ++#undef STARTFILE_SPEC ++#define STARTFILE_SPEC "%{!shared:crt0.o%s} crti.o%s %{shared|static-pie|!no-pie:crtbeginS.o%s; :crtbegin.o%s}" ++ ++/* Files that are linked after user code. */ ++#undef ENDFILE_SPEC ++#define ENDFILE_SPEC "%{shared|static-pie|!no-pie:crtendS.o%s; :crtend.o%s} crtn.o%s" ++ ++#undef LINK_SPEC ++#define LINK_SPEC "%{shared:-shared} %{static:-static} %{!shared: %{!static: %{rdynamic:-export-dynamic}}}" ++ ++/* We don't have separate math library so don't link it. */ ++#undef MATH_LIBRARY ++#define MATH_LIBRARY "" ++ ++/* Additional predefined macros. */ ++#undef TARGET_OS_CPP_BUILTINS ++#define TARGET_OS_CPP_BUILTINS() \ ++ do { \ ++ builtin_define ("__banan_os__"); \ ++ builtin_define ("__unix__"); \ ++ builtin_assert ("system=banan_os"); \ ++ builtin_assert ("system=unix"); \ ++ builtin_assert ("system=posix"); \ ++ } while(0); +diff -ruN gcc-15.1.0/gcc/config/banan_os.opt gcc-15.1.0-banan_os/gcc/config/banan_os.opt +--- gcc-15.1.0/gcc/config/banan_os.opt 1970-01-01 02:00:00.000000000 +0200 ++++ gcc-15.1.0-banan_os/gcc/config/banan_os.opt 2025-06-19 11:31:29.325802503 +0300 +@@ -0,0 +1,32 @@ ++; banan_os options. ++ ++; Copyright (C) 2025 Oskari Alaranta ++; ++; This file is part of GCC. ++; ++; GCC is free software; you can redistribute it and/or modify it under ++; the terms of the GNU General Public License as published by the Free ++; Software Foundation; either version 3, or (at your option) any later ++; version. ++; ++; GCC is distributed in the hope that it will be useful, but WITHOUT ANY ++; WARRANTY; without even the implied warranty of MERCHANTABILITY or ++; FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ++; for more details. ++; ++; You should have received a copy of the GNU General Public License ++; along with GCC; see the file COPYING3. If not see ++; . ++ ++; See the GCC internals manual (options.texi) for a description of ++; this file's format. ++ ++; Please try to keep this file in ASCII collating order. ++ ++posix ++Driver ++ ++pthread ++Driver ++ ++; This comment is to ensure we retain the blank line above. +diff -ruN gcc-15.1.0/gcc/config/banan_os.opt.urls gcc-15.1.0-banan_os/gcc/config/banan_os.opt.urls +--- gcc-15.1.0/gcc/config/banan_os.opt.urls 1970-01-01 02:00:00.000000000 +0200 ++++ gcc-15.1.0-banan_os/gcc/config/banan_os.opt.urls 2025-06-19 11:31:29.325802503 +0300 +@@ -0,0 +1 @@ ++; Not sure what to put here but this works +diff -ruN gcc-15.1.0/gcc/config.gcc gcc-15.1.0-banan_os/gcc/config.gcc +--- gcc-15.1.0/gcc/config.gcc 2025-04-25 11:18:00.000000000 +0300 ++++ gcc-15.1.0-banan_os/gcc/config.gcc 2025-06-19 11:32:50.391220522 +0300 +@@ -723,6 +723,14 @@ + + # Common parts for widely ported systems. + case ${target} in ++*-*-banan_os*) ++ gas=yes ++ gnu_ld=yes ++ default_use_cxa_atexit=yes ++ extra_options="${extra_options} banan_os.opt" ++ use_gcc_stdint=provide ++ tmake_file="t-slibgcc" ++ ;; + *-*-darwin*) + tmake_file="t-darwin " + tm_file="${tm_file} darwin.h" +@@ -1972,6 +1980,12 @@ + tm_file="${tm_file} i386/unix.h i386/att.h elfos.h newlib-stdint.h i386/i386elf.h i386/x86-64.h i386/rdos.h i386/rdos64.h" + tmake_file="i386/t-i386elf t-svr4" + ;; ++i[34567]86-*-banan_os*) ++ tm_file="${tm_file} i386/unix.h i386/att.h elfos.h glibc-stdint.h i386/i386elf.h banan_os.h" ++ ;; ++x86_64-*-banan_os*) ++ tm_file="${tm_file} i386/unix.h i386/att.h elfos.h glibc-stdint.h i386/i386elf.h i386/x86-64.h banan_os.h" ++ ;; + i[34567]86-*-dragonfly*) + tm_file="${tm_file} i386/unix.h i386/att.h elfos.h dragonfly.h dragonfly-stdint.h i386/dragonfly.h" + tmake_file="${tmake_file} i386/t-crtstuff" +diff -ruN gcc-15.1.0/libgcc/config/t-slibgcc gcc-15.1.0-banan_os/libgcc/config/t-slibgcc +--- gcc-15.1.0/libgcc/config/t-slibgcc 2025-04-25 11:18:04.000000000 +0300 ++++ gcc-15.1.0-banan_os/libgcc/config/t-slibgcc 2025-06-19 11:34:04.674683603 +0300 +@@ -26,7 +26,6 @@ + SHLIB_OBJS = @shlib_objs@ + SHLIB_DIR = @multilib_dir@ + SHLIB_SLIBDIR_QUAL = @shlib_slibdir_qual@ +-SHLIB_LC = -lc + SHLIB_MAKE_SOLINK = $(LN_S) $(SHLIB_SONAME) $(SHLIB_DIR)/$(SHLIB_SOLINK) + SHLIB_INSTALL_SOLINK = $(LN_S) $(SHLIB_SONAME) \ + $(DESTDIR)$(slibdir)$(SHLIB_SLIBDIR_QUAL)/$(SHLIB_SOLINK) +diff -ruN gcc-15.1.0/libgcc/config.host gcc-15.1.0-banan_os/libgcc/config.host +--- gcc-15.1.0/libgcc/config.host 2025-04-25 11:18:04.000000000 +0300 ++++ gcc-15.1.0-banan_os/libgcc/config.host 2025-06-19 11:33:42.354845264 +0300 +@@ -627,6 +627,14 @@ + fixed_point=no + fi + ;; ++i[34567]86-*-banan_os*) ++ extra_parts="$extra_parts crti.o crtbegin.o crtbeginS.o crtend.o crtendS.o crtn.o" ++ tmake_file="$tmake_file i386/t-crtstuff t-crtstuff-pic t-libgcc-pic t-slibgcc" ++ ;; ++x86_64-*-banan_os*) ++ extra_parts="$extra_parts crti.o crtbegin.o crtbeginS.o crtend.o crtendS.o crtn.o" ++ tmake_file="$tmake_file i386/t-crtstuff t-crtstuff-pic t-libgcc-pic t-slibgcc" ++ ;; + bfin*-elf*) + tmake_file="bfin/t-bfin bfin/t-crtlibid bfin/t-crtstuff t-libgcc-pic t-fdpbit" + extra_parts="$extra_parts crtbeginS.o crtendS.o crti.o crtn.o crtlibid.o" +diff -ruN gcc-15.1.0/libstdc++-v3/acinclude.m4 gcc-15.1.0-banan_os/libstdc++-v3/acinclude.m4 +--- gcc-15.1.0/libstdc++-v3/acinclude.m4 2025-04-25 11:18:05.000000000 +0300 ++++ gcc-15.1.0-banan_os/libstdc++-v3/acinclude.m4 2025-06-19 11:34:58.939289470 +0300 +@@ -1792,7 +1792,7 @@ + ac_has_nanosleep=yes + ac_has_sched_yield=yes + ;; +- freebsd*|netbsd*|dragonfly*|rtems*) ++ freebsd*|netbsd*|dragonfly*|rtems*|banan_os*) + ac_has_clock_monotonic=yes + ac_has_clock_realtime=yes + ac_has_nanosleep=yes +diff -ruN gcc-15.1.0/libstdc++-v3/configure gcc-15.1.0-banan_os/libstdc++-v3/configure +--- gcc-15.1.0/libstdc++-v3/configure 2025-04-25 11:18:05.000000000 +0300 ++++ gcc-15.1.0-banan_os/libstdc++-v3/configure 2025-06-19 11:37:41.265102481 +0300 +@@ -15789,8 +15789,8 @@ if test "$enable_shared" = yes; then + glibcxx_compiler_shared_flag="-D_GLIBCXX_SHARED" + + else +- glibcxx_lt_pic_flag= +- glibcxx_compiler_pic_flag= ++ glibcxx_lt_pic_flag="-prefer-pic" ++ glibcxx_compiler_pic_flag="$lt_prog_compiler_pic_CXX" + glibcxx_compiler_shared_flag= + fi + +@@ -21377,7 +21377,7 @@ + ac_has_nanosleep=yes + ac_has_sched_yield=yes + ;; +- freebsd*|netbsd*|dragonfly*|rtems*) ++ freebsd*|netbsd*|dragonfly*|rtems*|banan_os*) + ac_has_clock_monotonic=yes + ac_has_clock_realtime=yes + ac_has_nanosleep=yes +@@ -28654,7 +28654,7 @@ + # This is a freestanding configuration; there is nothing to do here. + ;; + +- avr*-*-*) ++ avr*-*-* | *banan_os*) + $as_echo "#define HAVE_ACOSF 1" >>confdefs.h + + $as_echo "#define HAVE_ASINF 1" >>confdefs.h +diff -ruN gcc-15.1.0/libstdc++-v3/crossconfig.m4 gcc-15.1.0-banan_os/libstdc++-v3/crossconfig.m4 +--- gcc-15.1.0/libstdc++-v3/crossconfig.m4 2025-04-25 11:18:05.000000000 +0300 ++++ gcc-15.1.0-banan_os/libstdc++-v3/crossconfig.m4 2025-06-19 11:36:53.954449540 +0300 +@@ -9,7 +9,7 @@ + # This is a freestanding configuration; there is nothing to do here. + ;; + +- avr*-*-*) ++ avr*-*-* | *banan_os*) + AC_DEFINE(HAVE_ACOSF) + AC_DEFINE(HAVE_ASINF) + AC_DEFINE(HAVE_ATAN2F)