From b9d6e6e348539f40511cc556c791f280c5475104 Mon Sep 17 00:00:00 2001 From: Justine Tunney <jtunney@gmail.com> Date: Sat, 30 Mar 2024 21:46:08 -0700 Subject: [PATCH] Standardize on -fsigned-char MaGuess on Discord pointed out the fact that cosmocc contradicts itself on the signedness of `char`. It's up to each platform to choose one, so the cosmo platform shall choose signed. The rationale is it makes the C language syntax more internally similar. `char` should be `signed char` for the same reason `int` means `signed int`. It's recommended that you still assume `char` could go either way since that's portable thinking. But if you want to assume we'll always have signed char, that's ok too. --- build/definitions.mk | 1 + tool/cosmocc/bin/cosmocc | 2 +- tool/cosmocc/bin/cosmocross | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/build/definitions.mk b/build/definitions.mk index b7c825184..9bc6d8c15 100644 --- a/build/definitions.mk +++ b/build/definitions.mk @@ -127,6 +127,7 @@ ifeq ($(ARCH), aarch64) DEFAULT_COPTS += \ -ffixed-x18 \ -ffixed-x28 \ + -fsigned-char \ -mno-outline-atomics endif diff --git a/tool/cosmocc/bin/cosmocc b/tool/cosmocc/bin/cosmocc index ae71ffeba..4951546df 100755 --- a/tool/cosmocc/bin/cosmocc +++ b/tool/cosmocc/bin/cosmocc @@ -265,7 +265,7 @@ LDFLAGS_X86_64="$LDFLAGS -L$BIN/../x86_64-linux-cosmo/lib -Wl,-T,$BIN/../x86_64- LDLIBS_X86_64="-lcosmo" CRT_AARCH64="$BIN/../aarch64-linux-cosmo/lib/crt.o" -CPPFLAGS_AARCH64="$CPPFLAGS" +CPPFLAGS_AARCH64="$CPPFLAGS -fsigned-char" CFLAGS_AARCH64="$CFLAGS -ffixed-x18 -ffixed-x28 -mno-outline-atomics" LDFLAGS_AARCH64="$LDFLAGS -L$BIN/../aarch64-linux-cosmo/lib -Wl,-T,$BIN/../aarch64-linux-cosmo/lib/aarch64.lds -Wl,-z,common-page-size=16384 -Wl,-z,max-page-size=16384" LDLIBS_AARCH64="-lcosmo" diff --git a/tool/cosmocc/bin/cosmocross b/tool/cosmocc/bin/cosmocross index d89d75971..78304cda8 100755 --- a/tool/cosmocc/bin/cosmocross +++ b/tool/cosmocc/bin/cosmocross @@ -84,6 +84,7 @@ if [ x"$ARCH" = x"x86_64" ]; then elif [ x"$ARCH" = x"aarch64" ]; then OBJCOPYFLAGS="-S" PAGESZ=16384 + CPPFLAGS="$CPPFLAGS -fsigned-char" CFLAGS="$CFLAGS -ffixed-x18 -ffixed-x28 -mno-outline-atomics" LDFLAGS="$LDFLAGS -Wl,-T,$BIN/../$ARCH-linux-cosmo/lib/aarch64.lds" else