Bot releases are hidden (Show)
Published by jart 5 months ago
Published by jart 5 months ago
Published by jart 5 months ago
Published by jart 5 months ago
Published by jart 6 months ago
nil
. (#1149)Published by jart 7 months ago
Published by jart 8 months ago
This release fixes two issues with the recent 3.3.1 cosmocc release.
_Float16
type__STRICT_ANSI__
Please see the previous release for the latest cosmos and further details.
Published by jart 8 months ago
This release fixes regressions introduced by v3.3, squashes additional bugs,
makes reliability and quality improvements, makes math better, and introduces
the getcpu()
system call.
*scanf()
fixes to make TeX work (#1109)apelink
in some edge cases (#1106)Published by jart 8 months ago
Cosmopolitan Libc makes C a build-once run-anywhere language, like Java, except it doesn't need an interpreter or virtual machine. Instead, it reconfigures stock GCC and Clang to output a POSIX-approved polyglot format that runs natively on Linux + Mac + Windows + FreeBSD + OpenBSD + NetBSD + BIOS with the best possible performance and the tiniest footprint imaginable. For further details, read Cosmopolitan Third Edition, the Cosmo README, and the Cosmopolitan Toolchain README.
This release upgrades us to GCC 12.3 and binutils 2.42. The GNU linker
appears to have changed things so that only a single de-duplicated str
table is present in the binary, and it gets placed wherever the linker
wants, regardless of what the linker script says. To cope with that we
need to stop using .ident to embed licenses. As such, this change does
significant work to revamp how third party licenses are defined in the
codebase, using .section .notice,"aR",@progbits
.
This new GCC 12.3 toolchain has support for GNU indirect functions. It
lets us support __target_clones__
for the first time. It is used for
optimizing the performance of libc string functions such as strlen and
friends so far on x86, by ensuring AVX systems favor a second codepath
that uses VEX encoding. It shaves some latency off certain operations.
It's a useful feature to have for scientific computing for the reasons
explained by the test/libcxx/openmp_test.cc example which compiles for
fifteen different microarchitectures. Thanks to the upgrades, it's now
also possible to use newer instruction sets, such as AVX512FP16, VNNI.
Experimental support has been added for OpenMP, which lets you whip up
multithreaded mathematical code very easily. It works on all supported
platforms for simple examples like openmp_test.cc but you may run into
issues on MacOS ARM64 with more complicated usage.
Cosmo now uses the %gs register on x86 by default for TLS. Doing it is
helpful for any program that links cosmo_dlopen()
. Such programs had
to recompile their binaries at startup to change the TLS instructions.
That's not great, since it means every page in the executable needs to
be faulted. The work of rewriting TLS-related x86 opcodes, is moved to
fixupobj.com instead. This is great news for MacOS x86 users, since we
previously needed to morph the binary every time for that platform but
now that's no longer necessary. The only platforms where we need fixup
of TLS x86 opcodes at runtime are now Windows, OpenBSD, and NetBSD. On
Windows we morph TLS to point deeper into the TIB, based on a TlsAlloc
assignment, and on OpenBSD/NetBSD we morph %gs back into %fs since the
kernels do not allow us to specify a value for the %gs register.
OpenBSD users are now required to use APE Loader to run Cosmo binaries
and assimilation is no longer possible. OpenBSD kernel needs to change
to allow programs to specify a value for the %gs register, or it needs
to stop marking executable pages loaded by the kernel as mimmutable().
__constructor__
, .ctor, .init_array, and .preinit_array so they behave the exact same way as glibc.$HOME
and $USER
are always defined.complex.h
header now works and support is added for struct ipv6_mreq
(#1100)MODE=dbg
support is now restored, as of c1e18e790__static_yoink("blink_linux_aarch64")
, and __static_yoink("blink_xnu_aarch64")
, have been removed. Please build blink from source on your platform to use blink to run cosmo binaries.pthread_create()
will no longer raise an assertion error if it fails, as of 8ebe2e902__cxa_thread_atexit
prototype has been fixed in #1088dontthrow
, to save on size.Cosmopolitan no longer distributes cosmo binaries for QuickJS, because
Fabrice Bellard is now doing it himself on his website. You should use
his binaries instead: https://bellard.org/quickjs/
Published by jart 9 months ago
Cosmopolitan Libc makes C a build-once run-anywhere language, like Java, except it doesn't need an interpreter or virtual machine. Instead, it reconfigures stock GCC and Clang to output a POSIX-approved polyglot format that runs natively on Linux + Mac + Windows + FreeBSD + OpenBSD + NetBSD + BIOS with the best possible performance and the tiniest footprint imaginable. For further details, read Cosmopolitan Third Edition, the Cosmo README, and the Cosmopolitan Toolchain README.
This v3.2.4 release of Cosmopolitan introduces C++ exceptions and RTTI,
which can be enabled by passing the -fexceptions
and/or -rtti
flags
to your cosmocc
compiler.
If C is your preferred language, then you can use Cosmopolitan garbage
collection via our new gc()
macro. To enable this feature, you need to
pass the -mcosmo
flag to cosmocc. For example, to say gc(malloc(32))
means that memory will be reclaimed when your function returns, and it
will be reclaimed by pthread_exit()
too. There's also defer() which is
generalized and allows any callback. Pointers exist on a shadow stack.
gc()
functionHere's some additional developments since the last release:
Published by jart 10 months ago
This release introduces two new features:
Your cosmo_dlsym() function now returns the raw symbols. You need to
update your code to call cosmo_dltramp() on the result, otherwise it
will crash on Windows.
The following fixes have been implemented:
-z execstack
on LinuxPublished by jart 10 months ago
Function pointers are now safer when using dynamically linked libraries.
Published by jart 10 months ago
Published by jart 10 months ago
Cosmopolitan Libc makes C a build-once run-anywhere language, like Java, except it doesn't need an interpreter or virtual machine. Instead, it reconfigures stock GCC and Clang to output a POSIX-approved polyglot format that runs natively on Linux + Mac + Windows + FreeBSD + OpenBSD + NetBSD + BIOS with the best possible performance and the tiniest footprint imaginable. For further details, read Cosmopolitan Third Edition, the Cosmo README, and the Cosmopolitan Toolchain README.
Our latest 3.2 release features exciting fixes and improvements.
We've fixed important threading bugs on /zip/...
file descriptors.
We now have a hack that lets you use cosmo binaries as a login shell.
Setuid security is improved. Executable path self-detection is better.
There's a new APE loader version as a result. If you have a systemwide
APE loader install, it's recommended that you upgrade, but not required.
Our public header files now have better open source compatibility.
gid_t
and uid_t
in passwd.h
(#995)tcgetpgrp
and tcsetpgrp
decls to unistd.h
(#996) (#997)Published by jart 11 months ago
Published by jart 11 months ago
make
work right on aarch64Published by jart 11 months ago
(win32 error 0)
Published by jart 11 months ago
Cosmopolitan Libc makes C a build-once run-anywhere language, like Java, except it doesn't need an interpreter or virtual machine. Instead, it reconfigures stock GCC and Clang to output a POSIX-approved polyglot format that runs natively on Linux + Mac + Windows + FreeBSD + OpenBSD + NetBSD + BIOS with the best possible performance and the tiniest footprint imaginable.
This release fixes issues with the 3.0.x series. A new cosmo_dlopen()
function is now provided that's good enough to load nontrivial dynamic libraries on all platforms except OpenBSD. Cosmos binaries are now being distributed on our new online service https://cosmo.zip/ that's operated by the Cosmopolitan authors. This release was made possible thanks to the testing and contribution efforts of our GitHub and Discord communities https://discord.gg/FwAVVu7eJ4. Thank you!
cosmocc
toolchain#include <shared_mutex>
args
replace ...
only at the end of file (#909)If you use zsh and have trouble running APE programs try sh -c ./prog
or simply upgrade to zsh 5.9+ (since we patched it two years ago). The same is the case for Python subprocess
, old versions of fish, etc.
Some Linux systems are configured to launch MZ executables under WINE or run-detectors
. You can fix that by registering APE with binfmt_misc
:
sudo wget -O /usr/bin/ape https://cosmo.zip/pub/cosmos/bin/ape-$(uname -m).elf
sudo sh -c "echo ':APE:M::MZqFpD::/usr/bin/ape:' >/proc/sys/fs/binfmt_misc/register"
sudo sh -c "echo ':APE-jart:M::jartsr::/usr/bin/ape:' >/proc/sys/fs/binfmt_misc/register"
If things still aren't working, it's also possible to disable binfmt_misc
as follows:
sudo sh -c 'echo -1 > /proc/sys/fs/binfmt_misc/cli' # remove Ubuntu's MZ interpreter
sudo sh -c 'echo -1 > /proc/sys/fs/binfmt_misc/status' # remove ALL binfmt_misc entries
WSL tries to run MZ executables as WIN32 binaries within the WSL environment. In order to make it safe to use Cosmopolitan software on WSL, run this:
sudo sh -c "echo -1 > /proc/sys/fs/binfmt_misc/WSLInterop"
Published by jart 12 months ago
getifaddrs()
024be3b009d500970168e41f375ff8f0c79c80b0dlopen()
support 5e8c928f1a37349a8c72f0b6aae5e535eace3f41getcwd()
on Windows which was causing weirdness with bash
1eb6484c9c89b3cf85cd9f235aef70e1e5ed1776M-x package-list-packages
will work on Windows/usr/local/bin/ape
(instead of /usr/bin/ape
) on Apple Silicon for systemwide APE.longjmp()
safe d7917ea076df24967ec578c5dabe1ce30b93793d\n
in /zip/.args
files 585c86e2a439d5df23595b249eb28554764ec6b4cosmocc -dumpmachine
workIf you've used ape-install
or ape/ape-install.sh
in the past (to install the system-wide APE Loader) then you need to run it again so that your system can use APE Loader v1.9. This new release of APE Loader fixes bugs. Apple M1 systems need it to run the APE binaries in this release..It's also backwards compatible with all APE and static ELF binaries ever made with Cosmo. Any of your own programs which you've compiled before on Apple Silicon which use execve()
may need to be recompiled in order to run the latest APE executables unless you've installed a system-wide APE Loader.
It's recommended that cosmocc
users run:
cd /opt/cosmo
rm -rf o/third_party/gcc
unzip -vl cosmocc-0.0.18.zip
To get the latest build of Cosmopolitan's toolchain.
Published by jart 12 months ago
Release notes: https://justine.lol/cosmo3/