--- a/config.sub +++ b/config.sub @@ -1749,7 +1749,7 @@ | onefs* | tirtos* | phoenix* | fuchsia* | redox* | bme* \ | midnightbsd* | amdhsa* | unleashed* | emscripten* | wasi* \ | nsk* | powerunix* | genode* | zvmoe* | qnx* | emx* | zephyr* \ - | fiwix* ) + | fiwix* | montauk* ) ;; # This one is extra strict with allowed versions sco3.2v2 | sco3.2v[4-9]* | sco5v6*) --- a/gcc/config.gcc +++ b/gcc/config.gcc @@ -1935,6 +1935,12 @@ x86_64-*-elf*) tm_file="${tm_file} i386/unix.h i386/att.h elfos.h newlib-stdint.h i386/i386elf.h i386/x86-64.h" ;; +x86_64-*-montauk*) + tm_file="${tm_file} i386/unix.h i386/att.h elfos.h newlib-stdint.h i386/i386elf.h i386/x86-64.h montauk.h" + # The Montauk libc has no stdint.h of its own (programs normally use + # the freestanding kernel headers), so GCC must provide one. + use_gcc_stdint=provide + ;; x86_64-*-rtems*) tm_file="${tm_file} i386/unix.h i386/att.h elfos.h newlib-stdint.h i386/i386elf.h i386/x86-64.h i386/rtemself.h rtems.h" ;; --- a/libgcc/config.host +++ b/libgcc/config.host @@ -741,6 +741,10 @@ i[34567]86-*-elf*) tmake_file="$tmake_file i386/t-crtstuff t-crtstuff-pic t-libgcc-pic" ;; +x86_64-*-montauk*) + tmake_file="$tmake_file i386/t-crtstuff t-crtstuff-pic t-libgcc-pic" + extra_parts="crtbegin.o crtend.o" + ;; x86_64-*-elf* | x86_64-*-rtems*) tmake_file="$tmake_file i386/t-crtstuff t-crtstuff-pic t-libgcc-pic" case ${host} in --- a/fixincludes/mkfixinc.sh +++ b/fixincludes/mkfixinc.sh @@ -20,6 +20,7 @@ powerpcle-*-eabisim* | \ powerpcle-*-eabi* | \ *-*-vxworks7* | \ + *-montauk* | \ *-musl* ) # IF there is no include fixing, # THEN create a no-op fixer and exit --- a/libstdc++-v3/configure +++ b/libstdc++-v3/configure @@ -27340,6 +27340,9 @@ # on a hosted environment. if test "x${with_newlib}" = "xyes"; then os_include_dir="os/newlib" + case "${host}" in + *-montauk*) os_include_dir="os/generic" ;; # Montauk libc is not newlib + esac $as_echo "#define HAVE_HYPOT 1" >>confdefs.h --- a/gcc/collect2.cc +++ b/gcc/collect2.cc @@ -1049,6 +1049,26 @@ prefix_from_env ("COMPILER_PATH", &cpath); prefix_from_env ("PATH", &path); +#ifdef __montauk__ + /* Keep a fallback for early boot and deliberately minimal environments. + Derive the compiler search path from argv[0]: the driver invokes + collect2 by its full path (the kernel provides the real exec path in + argv[0]), and `ld` lives in the same libexec directory. Also seed PATH + with the SDK bin directories when the caller did not provide one. */ + + if (cpath.plist == NULL && argv[0] != NULL) + { + const char *slash = strrchr (argv[0], '/'); + if (slash != NULL) + add_prefix (&cpath, xstrndup (argv[0], slash - argv[0] + 1)); + } + if (path.plist == NULL) + { + add_prefix (&path, "/sdk/x86_64-montauk/bin/"); + add_prefix (&path, "/sdk/bin/"); + } +#endif + /* Try to discover a valid linker/nm/strip to use. */ /* Maybe we know the right file to use (if not cross). */