From 226375933ae8c376870cb85b121a91d9269ef616 Mon Sep 17 00:00:00 2001 From: Justine Tunney Date: Sun, 18 Jun 2023 05:39:31 -0700 Subject: [PATCH] Implement more toolchain fixes --- libc/calls/calls.h | 2 +- libc/calls/unveil.c | 1 + libc/fmt/conv.h | 3 --- libc/fmt/libgen.h | 11 +++++++++++ libc/integral/c.inc | 12 +++++------- libc/intrin/kprintf.greg.c | 7 +++++++ libc/isystem/libgen.h | 3 +-- libc/libc.mk | 1 - libc/log/vflogf.c | 3 ++- libc/x/xbasename.c | 2 +- libc/x/xdirname.c | 2 +- test/libc/calls/getcwd_test.c | 2 +- test/libc/fmt/basename_test.c | 4 ++-- test/libc/fmt/dirname_test.c | 6 ++---- test/libc/fmt/stripexts_test.c | 1 + third_party/chibicc/chibicc.c | 3 ++- third_party/chibicc/preprocess.c | 1 + third_party/chibicc/pybind.c | 1 + third_party/make/job.c | 1 + third_party/python/Python/import.c | 3 ++- third_party/sed/main.c | 1 + tool/build/ar.c | 1 + tool/build/compile.c | 1 + tool/build/cp.c | 1 + tool/build/mv.c | 1 + tool/build/runit.c | 1 + tool/build/runitd.c | 1 + tool/build/zipobj.c | 1 + tool/decode/elf.c | 1 + tool/decode/macho.c | 1 + tool/decode/pe2.c | 1 + tool/decode/zip.c | 1 + tool/scripts/cosmoc++ | 11 ++++++++--- tool/scripts/cosmocc | 7 +++++-- tool/viz/fontspace.c | 1 + 35 files changed, 69 insertions(+), 31 deletions(-) create mode 100644 libc/fmt/libgen.h diff --git a/libc/calls/calls.h b/libc/calls/calls.h index dbcabc411..5aad0b335 100644 --- a/libc/calls/calls.h +++ b/libc/calls/calls.h @@ -139,6 +139,7 @@ int pipe(int[hasatleast 2]); int pipe2(int[hasatleast 2], int); int posix_fadvise(int, int64_t, int64_t, int); int posix_madvise(void *, uint64_t, int); +int prctl(int, ...); int raise(int); int reboot(int); int remove(const char *); @@ -211,7 +212,6 @@ int memfd_create(const char *, unsigned int); int personality(uint64_t); int pivot_root(const char *, const char *); int pledge(const char *, const char *); -int prctl(int, ...); int seccomp(unsigned, unsigned, void *); int sys_iopl(int); int sys_mlock(const void *, size_t); diff --git a/libc/calls/unveil.c b/libc/calls/unveil.c index 637fbd3e0..f80f3d772 100644 --- a/libc/calls/unveil.c +++ b/libc/calls/unveil.c @@ -30,6 +30,7 @@ #include "libc/dce.h" #include "libc/errno.h" #include "libc/fmt/conv.h" +#include "libc/fmt/libgen.h" #include "libc/intrin/kprintf.h" #include "libc/intrin/strace.internal.h" #include "libc/macros.internal.h" diff --git a/libc/fmt/conv.h b/libc/fmt/conv.h index 4190804ad..019bb0d24 100644 --- a/libc/fmt/conv.h +++ b/libc/fmt/conv.h @@ -86,9 +86,6 @@ libcesque nosideeffect; │ cosmopolitan § conversion » manipulation ─╬─│┼ ╚────────────────────────────────────────────────────────────────────────────│*/ -char *dirname(char *); -char *basename(char *); - #ifdef COSMO char *stripext(char *); char *stripexts(char *); diff --git a/libc/fmt/libgen.h b/libc/fmt/libgen.h new file mode 100644 index 000000000..ebf0c4b3b --- /dev/null +++ b/libc/fmt/libgen.h @@ -0,0 +1,11 @@ +#ifndef COSMOPOLITAN_LIBC_FMT_LIBGEN_H_ +#define COSMOPOLITAN_LIBC_FMT_LIBGEN_H_ +#if !(__ASSEMBLER__ + __LINKER__ + 0) +COSMOPOLITAN_C_START_ + +char *dirname(char *); +char *basename(char *); + +COSMOPOLITAN_C_END_ +#endif /* !(__ASSEMBLER__ + __LINKER__ + 0) */ +#endif /* COSMOPOLITAN_LIBC_FMT_LIBGEN_H_ */ diff --git a/libc/integral/c.inc b/libc/integral/c.inc index 52009d484..1901a009d 100644 --- a/libc/integral/c.inc +++ b/libc/integral/c.inc @@ -89,23 +89,21 @@ #endif #ifndef __cplusplus +#pragma GCC push_options +#pragma GCC diagnostic ignored "-Wc++-compat" #define HAVE_STDBOOL_H 1 #if __STDC_VERSION__ + 0 >= 201112 typedef _Bool bool; -#define true ((bool)+1) -#define false ((bool)+0) #else #define bool int +#endif #define true 1 #define false 0 -#endif -#endif - -#ifndef __cplusplus typedef __WCHAR_TYPE__ wchar_t; typedef __CHAR16_TYPE__ char16_t; typedef __CHAR32_TYPE__ char32_t; -#endif +#pragma GCC pop_options +#endif /* __cplusplus */ #define _LIBCPP_STDINT_H diff --git a/libc/intrin/kprintf.greg.c b/libc/intrin/kprintf.greg.c index 9505c8141..e165ab596 100644 --- a/libc/intrin/kprintf.greg.c +++ b/libc/intrin/kprintf.greg.c @@ -396,6 +396,13 @@ privileged static size_t kformat(char *b, size_t n, const char *fmt, *p++ = 'm'; ansi = 1; } +#ifdef __x86_64__ + } else if (IsLinux()) { + asm volatile("syscall" + : "=a"(x) + : "0"(__NR_getpid) + : "rcx", "rdx", "r11", "memory"); +#endif } else { x = 666; } diff --git a/libc/isystem/libgen.h b/libc/isystem/libgen.h index 6f50df147..7ecc0a37b 100644 --- a/libc/isystem/libgen.h +++ b/libc/isystem/libgen.h @@ -1,5 +1,4 @@ #ifndef _LIBGEN_H #define _LIBGEN_H -#include "libc/fmt/conv.h" - +#include "libc/fmt/libgen.h" #endif /* _LIBGEN_H */ diff --git a/libc/libc.mk b/libc/libc.mk index de254707c..1e2e68276 100644 --- a/libc/libc.mk +++ b/libc/libc.mk @@ -24,7 +24,6 @@ o/$(MODE)/libc: o/$(MODE)/libc/calls \ o/$(MODE)/libc/sock \ o/$(MODE)/libc/stdio \ o/$(MODE)/libc/str \ - o/$(MODE)/libc/stubs \ o/$(MODE)/libc/sysv \ o/$(MODE)/libc/testlib \ o/$(MODE)/libc/thread \ diff --git a/libc/log/vflogf.c b/libc/log/vflogf.c index a07915d4d..5d1f29a4c 100644 --- a/libc/log/vflogf.c +++ b/libc/log/vflogf.c @@ -18,13 +18,13 @@ ╚─────────────────────────────────────────────────────────────────────────────*/ #include "libc/calls/blockcancel.internal.h" #include "libc/calls/calls.h" -#include "libc/stdio/dprintf.h" #include "libc/calls/struct/stat.h" #include "libc/calls/struct/timeval.h" #include "libc/dce.h" #include "libc/errno.h" #include "libc/fmt/conv.h" #include "libc/fmt/fmt.h" +#include "libc/fmt/libgen.h" #include "libc/intrin/bits.h" #include "libc/intrin/safemacros.internal.h" #include "libc/intrin/strace.internal.h" @@ -33,6 +33,7 @@ #include "libc/math.h" #include "libc/nexgen32e/nexgen32e.h" #include "libc/runtime/runtime.h" +#include "libc/stdio/dprintf.h" #include "libc/stdio/lock.internal.h" #include "libc/stdio/stdio.h" #include "libc/str/str.h" diff --git a/libc/x/xbasename.c b/libc/x/xbasename.c index 7e74da57f..edf97680d 100644 --- a/libc/x/xbasename.c +++ b/libc/x/xbasename.c @@ -16,7 +16,7 @@ │ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │ │ PERFORMANCE OF THIS SOFTWARE. │ ╚─────────────────────────────────────────────────────────────────────────────*/ -#include "libc/fmt/conv.h" +#include "libc/fmt/libgen.h" #include "libc/mem/gc.internal.h" #include "libc/mem/mem.h" #include "libc/x/x.h" diff --git a/libc/x/xdirname.c b/libc/x/xdirname.c index f8c49dcb0..cb728a877 100644 --- a/libc/x/xdirname.c +++ b/libc/x/xdirname.c @@ -16,7 +16,7 @@ │ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │ │ PERFORMANCE OF THIS SOFTWARE. │ ╚─────────────────────────────────────────────────────────────────────────────*/ -#include "libc/fmt/conv.h" +#include "libc/fmt/libgen.h" #include "libc/mem/mem.h" #include "libc/x/x.h" diff --git a/test/libc/calls/getcwd_test.c b/test/libc/calls/getcwd_test.c index e795d650a..badfeb1c3 100644 --- a/test/libc/calls/getcwd_test.c +++ b/test/libc/calls/getcwd_test.c @@ -17,8 +17,8 @@ │ PERFORMANCE OF THIS SOFTWARE. │ ╚─────────────────────────────────────────────────────────────────────────────*/ #include "libc/calls/calls.h" -#include "libc/fmt/conv.h" #include "libc/fmt/fmt.h" +#include "libc/fmt/libgen.h" #include "libc/log/check.h" #include "libc/macros.internal.h" #include "libc/mem/gc.internal.h" diff --git a/test/libc/fmt/basename_test.c b/test/libc/fmt/basename_test.c index c81f5edfe..153177d18 100644 --- a/test/libc/fmt/basename_test.c +++ b/test/libc/fmt/basename_test.c @@ -16,10 +16,10 @@ │ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │ │ PERFORMANCE OF THIS SOFTWARE. │ ╚─────────────────────────────────────────────────────────────────────────────*/ +#include "libc/fmt/libgen.h" #include "libc/intrin/bits.h" -#include "libc/fmt/conv.h" -#include "libc/mem/mem.h" #include "libc/mem/gc.internal.h" +#include "libc/mem/mem.h" #include "libc/testlib/testlib.h" #define BASENAME(x) basename(gc(strdup(x))) diff --git a/test/libc/fmt/dirname_test.c b/test/libc/fmt/dirname_test.c index d634d6da3..552936573 100644 --- a/test/libc/fmt/dirname_test.c +++ b/test/libc/fmt/dirname_test.c @@ -16,11 +16,9 @@ │ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │ │ PERFORMANCE OF THIS SOFTWARE. │ ╚─────────────────────────────────────────────────────────────────────────────*/ -#include "libc/fmt/conv.h" -#include "libc/fmt/fmt.h" -#include "libc/log/log.h" -#include "libc/mem/mem.h" +#include "libc/fmt/libgen.h" #include "libc/mem/gc.internal.h" +#include "libc/mem/mem.h" #include "libc/testlib/testlib.h" TEST(dirname, test) { diff --git a/test/libc/fmt/stripexts_test.c b/test/libc/fmt/stripexts_test.c index c1fc1d11c..b5e05b966 100644 --- a/test/libc/fmt/stripexts_test.c +++ b/test/libc/fmt/stripexts_test.c @@ -18,6 +18,7 @@ ╚─────────────────────────────────────────────────────────────────────────────*/ #include "libc/fmt/conv.h" #include "libc/fmt/fmt.h" +#include "libc/fmt/libgen.h" #include "libc/mem/gc.internal.h" #include "libc/testlib/testlib.h" #include "libc/x/x.h" diff --git a/third_party/chibicc/chibicc.c b/third_party/chibicc/chibicc.c index b9be1d6af..7072c0305 100644 --- a/third_party/chibicc/chibicc.c +++ b/third_party/chibicc/chibicc.c @@ -1,12 +1,13 @@ +#include "third_party/chibicc/chibicc.h" #include "libc/calls/calls.h" #include "libc/calls/struct/sigaction.h" #include "libc/calls/struct/siginfo.h" #include "libc/calls/ucontext.h" +#include "libc/fmt/libgen.h" #include "libc/mem/gc.internal.h" #include "libc/runtime/runtime.h" #include "libc/sysv/consts/sig.h" #include "libc/x/xasprintf.h" -#include "third_party/chibicc/chibicc.h" asm(".ident\t\"\\n\\n\ chibicc (MIT/ISC License)\\n\ diff --git a/third_party/chibicc/preprocess.c b/third_party/chibicc/preprocess.c index afec7b4cf..f0209a23f 100644 --- a/third_party/chibicc/preprocess.c +++ b/third_party/chibicc/preprocess.c @@ -22,6 +22,7 @@ // standard's wording: // https://github.com/rui314/chibicc/wiki/cpp.algo.pdf +#include "libc/fmt/libgen.h" #include "libc/log/libfatal.internal.h" #include "libc/mem/arena.h" #include "libc/runtime/runtime.h" diff --git a/third_party/chibicc/pybind.c b/third_party/chibicc/pybind.c index f4e308642..5d1682939 100644 --- a/third_party/chibicc/pybind.c +++ b/third_party/chibicc/pybind.c @@ -17,6 +17,7 @@ │ PERFORMANCE OF THIS SOFTWARE. │ ╚─────────────────────────────────────────────────────────────────────────────*/ #include "libc/fmt/conv.h" +#include "libc/fmt/libgen.h" #include "libc/intrin/bits.h" #include "libc/log/libfatal.internal.h" #include "libc/mem/gc.h" diff --git a/third_party/make/job.c b/third_party/make/job.c index 17fe1bc90..9c8042057 100644 --- a/third_party/make/job.c +++ b/third_party/make/job.c @@ -37,6 +37,7 @@ this program. If not, see . */ #include "libc/fmt/conv.h" #include "libc/fmt/fmt.h" #include "libc/fmt/itoa.h" +#include "libc/fmt/libgen.h" #include "libc/intrin/bits.h" #include "libc/intrin/promises.internal.h" #include "libc/intrin/safemacros.internal.h" diff --git a/third_party/python/Python/import.c b/third_party/python/Python/import.c index 13f8c2fc5..c51e65fd4 100644 --- a/third_party/python/Python/import.c +++ b/third_party/python/Python/import.c @@ -4,10 +4,12 @@ │ Python 3 │ │ https://docs.python.org/3/license.html │ ╚─────────────────────────────────────────────────────────────────────────────*/ +#include "third_party/python/Include/import.h" #include "libc/calls/calls.h" #include "libc/calls/struct/stat.h" #include "libc/calls/struct/stat.macros.h" #include "libc/fmt/conv.h" +#include "libc/fmt/libgen.h" #include "libc/intrin/bits.h" #include "libc/macros.internal.h" #include "libc/mem/alg.h" @@ -27,7 +29,6 @@ #include "third_party/python/Include/eval.h" #include "third_party/python/Include/fileutils.h" #include "third_party/python/Include/frameobject.h" -#include "third_party/python/Include/import.h" #include "third_party/python/Include/listobject.h" #include "third_party/python/Include/longobject.h" #include "third_party/python/Include/marshal.h" diff --git a/third_party/sed/main.c b/third_party/sed/main.c index 02d4510bb..3c5a4af02 100644 --- a/third_party/sed/main.c +++ b/third_party/sed/main.c @@ -35,6 +35,7 @@ #include "libc/calls/calls.h" #include "libc/calls/struct/stat.h" #include "libc/fmt/fmt.h" +#include "libc/fmt/libgen.h" #include "libc/log/bsd.h" #include "libc/runtime/runtime.h" #include "libc/stdio/stdio.h" diff --git a/tool/build/ar.c b/tool/build/ar.c index 6db33b3fa..d74ebfb83 100644 --- a/tool/build/ar.c +++ b/tool/build/ar.c @@ -25,6 +25,7 @@ #include "libc/errno.h" #include "libc/fmt/conv.h" #include "libc/fmt/itoa.h" +#include "libc/fmt/libgen.h" #include "libc/intrin/bits.h" #include "libc/intrin/safemacros.internal.h" #include "libc/log/check.h" diff --git a/tool/build/compile.c b/tool/build/compile.c index 8dd479c89..2e44c76c0 100644 --- a/tool/build/compile.c +++ b/tool/build/compile.c @@ -32,6 +32,7 @@ #include "libc/errno.h" #include "libc/fmt/conv.h" #include "libc/fmt/itoa.h" +#include "libc/fmt/libgen.h" #include "libc/fmt/magnumstrs.internal.h" #include "libc/intrin/bits.h" #include "libc/intrin/kprintf.h" diff --git a/tool/build/cp.c b/tool/build/cp.c index 8fed73998..cc576e353 100644 --- a/tool/build/cp.c +++ b/tool/build/cp.c @@ -22,6 +22,7 @@ #include "libc/errno.h" #include "libc/fmt/conv.h" #include "libc/fmt/fmt.h" +#include "libc/fmt/libgen.h" #include "libc/fmt/magnumstrs.internal.h" #include "libc/mem/gc.h" #include "libc/runtime/runtime.h" diff --git a/tool/build/mv.c b/tool/build/mv.c index c5362ca63..3d35af18d 100644 --- a/tool/build/mv.c +++ b/tool/build/mv.c @@ -21,6 +21,7 @@ #include "libc/errno.h" #include "libc/fmt/conv.h" #include "libc/fmt/fmt.h" +#include "libc/fmt/libgen.h" #include "libc/fmt/magnumstrs.internal.h" #include "libc/mem/gc.h" #include "libc/runtime/runtime.h" diff --git a/tool/build/runit.c b/tool/build/runit.c index cba2f3b90..6c42ca539 100644 --- a/tool/build/runit.c +++ b/tool/build/runit.c @@ -25,6 +25,7 @@ #include "libc/dns/dns.h" #include "libc/errno.h" #include "libc/fmt/conv.h" +#include "libc/fmt/libgen.h" #include "libc/intrin/bits.h" #include "libc/intrin/safemacros.internal.h" #include "libc/limits.h" diff --git a/tool/build/runitd.c b/tool/build/runitd.c index 6b5f494ab..b95b0b730 100644 --- a/tool/build/runitd.c +++ b/tool/build/runitd.c @@ -23,6 +23,7 @@ #include "libc/dce.h" #include "libc/errno.h" #include "libc/fmt/conv.h" +#include "libc/fmt/libgen.h" #include "libc/intrin/bits.h" #include "libc/log/check.h" #include "libc/log/log.h" diff --git a/tool/build/zipobj.c b/tool/build/zipobj.c index e84096f50..aebbc9b9f 100644 --- a/tool/build/zipobj.c +++ b/tool/build/zipobj.c @@ -20,6 +20,7 @@ #include "libc/calls/struct/stat.h" #include "libc/elf/def.h" #include "libc/fmt/conv.h" +#include "libc/fmt/libgen.h" #include "libc/intrin/kprintf.h" #include "libc/limits.h" #include "libc/log/check.h" diff --git a/tool/decode/elf.c b/tool/decode/elf.c index 3909dcd95..e0dd81a14 100644 --- a/tool/decode/elf.c +++ b/tool/decode/elf.c @@ -24,6 +24,7 @@ #include "libc/elf/struct/shdr.h" #include "libc/errno.h" #include "libc/fmt/conv.h" +#include "libc/fmt/libgen.h" #include "libc/intrin/bits.h" #include "libc/intrin/safemacros.internal.h" #include "libc/log/check.h" diff --git a/tool/decode/macho.c b/tool/decode/macho.c index 04a6e4caf..109d71675 100644 --- a/tool/decode/macho.c +++ b/tool/decode/macho.c @@ -20,6 +20,7 @@ #include "libc/calls/calls.h" #include "libc/calls/struct/stat.h" #include "libc/fmt/conv.h" +#include "libc/fmt/libgen.h" #include "libc/intrin/safemacros.internal.h" #include "libc/macho.internal.h" #include "libc/runtime/runtime.h" diff --git a/tool/decode/pe2.c b/tool/decode/pe2.c index 8dc780431..f9b755ef0 100644 --- a/tool/decode/pe2.c +++ b/tool/decode/pe2.c @@ -19,6 +19,7 @@ #include "libc/calls/calls.h" #include "libc/calls/struct/stat.h" #include "libc/fmt/conv.h" +#include "libc/fmt/libgen.h" #include "libc/intrin/bits.h" #include "libc/intrin/safemacros.internal.h" #include "libc/mem/gc.h" diff --git a/tool/decode/zip.c b/tool/decode/zip.c index 8b66bf48d..51fe87284 100644 --- a/tool/decode/zip.c +++ b/tool/decode/zip.c @@ -19,6 +19,7 @@ #include "libc/calls/calls.h" #include "libc/calls/struct/stat.h" #include "libc/fmt/conv.h" +#include "libc/fmt/libgen.h" #include "libc/intrin/bits.h" #include "libc/intrin/safemacros.internal.h" #include "libc/log/check.h" diff --git a/tool/scripts/cosmoc++ b/tool/scripts/cosmoc++ index 6e7c9693c..711349a0f 100755 --- a/tool/scripts/cosmoc++ +++ b/tool/scripts/cosmoc++ @@ -67,6 +67,7 @@ EOF exit 0 fi +ORIGINAL="$0 $*" PLATFORM="-D__COSMOPOLITAN__" PREDEF="-include libc/integral/normalize.inc" CCFLAGS="-fdata-sections -ffunction-sections -fno-pie -mno-tls-direct-seg-refs -mno-red-zone -fportcosmo" @@ -131,6 +132,10 @@ for x; do # this toolchain is intended for building other people's code # we don't need the compiler's assistance to be more portable continue + elif [ x"$x" = x"-static-libstdc++" ]; then + continue + elif [ x"$x" = x"-static-libgcc" ]; then + continue elif [ x"$x" != x"${x#-O}" ]; then OPT=$x elif [ x"$x" = x"-c" ]; then @@ -160,8 +165,8 @@ for x; do set -- "$@" "$x" done -if [ $RELOCATABLE -eq 0 ]; then - APEFLAGS= +if [ $RELOCATABLE -eq 1 ]; then + APEFLAGS="-r" fi if [ x"$MODE" = x"nox87" ]; then @@ -183,7 +188,7 @@ else fi set -- "$CXX" "$@" -printf '(cd %s; %s)\n' "$PWD" "$*" >>/tmp/build.log +printf '# %s\n(cd %s; %s)\n' "$ORIGINAL" "$PWD" "$*" >>/tmp/build.log "$@" || exit if [ -n "$OUTPUT" ] && [ -f "$OUTPUT" ]; then diff --git a/tool/scripts/cosmocc b/tool/scripts/cosmocc index 665d1ccf1..8a625add8 100755 --- a/tool/scripts/cosmocc +++ b/tool/scripts/cosmocc @@ -67,6 +67,7 @@ EOF exit 0 fi +ORIGINAL="$0 $*" PLATFORM="-D__COSMOPOLITAN__" PREDEF="-include libc/integral/normalize.inc" CCFLAGS="-fdata-sections -ffunction-sections -fno-pie -mno-tls-direct-seg-refs -mno-red-zone -fportcosmo" @@ -131,6 +132,8 @@ for x; do # this toolchain is intended for building other people's code # we don't need the compiler's assistance to be more portable continue + elif [ x"$x" = x"-static-libgcc" ]; then + continue elif [ x"$x" != x"${x#-O}" ]; then OPT=$x elif [ x"$x" = x"-c" ]; then @@ -161,7 +164,7 @@ for x; do done if [ $RELOCATABLE -eq 1 ]; then - APEFLAGS= + APEFLAGS="-r" fi if [ x"$MODE" = x"nox87" ]; then @@ -183,7 +186,7 @@ else fi set -- "$CC" "$@" -printf '(cd %s; %s)\n' "$PWD" "$*" >>/tmp/build.log +printf '# %s\n(cd %s; %s)\n' "$ORIGINAL" "$PWD" "$*" >>/tmp/build.log "$@" || exit if [ -n "$OUTPUT" ] && [ -f "$OUTPUT" ]; then diff --git a/tool/viz/fontspace.c b/tool/viz/fontspace.c index 9439703ca..c950c7425 100644 --- a/tool/viz/fontspace.c +++ b/tool/viz/fontspace.c @@ -21,6 +21,7 @@ #include "libc/calls/struct/winsize.h" #include "libc/calls/termios.h" #include "libc/fmt/conv.h" +#include "libc/fmt/libgen.h" #include "libc/intrin/bsr.h" #include "libc/log/libfatal.internal.h" #include "libc/log/log.h"