Make improvements

- Introduce portable sched_getcpu() api
- Support GCC's __target_clones__ feature
- Make fma() go faster on x86 in default mode
- Remove some asan checks from core libraries
- WinMain() now ensures $HOME and $USER are defined
This commit is contained in:
Justine Tunney 2024-02-01 03:39:46 -08:00
parent d5225a693b
commit 2ab9e9f7fd
No known key found for this signature in database
GPG key ID: BE714B4575D6E328
192 changed files with 2809 additions and 932 deletions

View file

@ -20,6 +20,7 @@
#include "libc/dce.h"
#include "libc/errno.h"
#include "libc/runtime/runtime.h"
#include "libc/sysv/consts/auxv.h"
#include "libc/sysv/consts/madv.h"
#include "libc/sysv/consts/map.h"
#include "libc/sysv/consts/o.h"
@ -63,7 +64,9 @@ TEST(madvise, subPages) {
char *p;
ASSERT_NE(MAP_FAILED, (p = mmap(0, FRAMESIZE, PROT_READ | PROT_WRITE,
MAP_PRIVATE | MAP_ANONYMOUS, -1, 0)));
ASSERT_SYS(0, 0, madvise(p + 4096, FRAMESIZE - 4096, MADV_WILLNEED));
ASSERT_SYS(0, 0,
madvise(p + getauxval(AT_PAGESZ), FRAMESIZE - getauxval(AT_PAGESZ),
MADV_WILLNEED));
ASSERT_SYS(0, 0, munmap(p, FRAMESIZE));
}

View file

@ -20,13 +20,13 @@
#include "libc/calls/calls.h"
#include "libc/dce.h"
#include "libc/errno.h"
#include "libc/serialize.h"
#include "libc/limits.h"
#include "libc/log/libfatal.internal.h"
#include "libc/macros.internal.h"
#include "libc/runtime/memtrack.internal.h"
#include "libc/runtime/runtime.h"
#include "libc/runtime/symbols.internal.h"
#include "libc/serialize.h"
#include "libc/stdio/rand.h"
#include "libc/stdio/stdio.h"
#include "libc/str/str.h"

View file

@ -96,6 +96,10 @@ TEST(gc, torture) {
for (i = 0; i < n; ++i) EXPECT_SYS(0, 0, pthread_join(t[i], 0));
}
#if defined(__GNUC__) && __GNUC__ >= 12
#pragma GCC diagnostic ignored "-Winfinite-recursion"
#endif
void crawl2(jmp_buf jb, const char *path) {
if (!strcmp(path, "/") || !strcmp(path, ".")) gclongjmp(jb, 1);
crawl2(jb, gc(xdirname(path)));

View file

@ -31,6 +31,8 @@ _Thread_local long y[1] = {40};
_Alignas(A) _Thread_local long a;
dontubsan void *Worker(void *arg) {
ASSERT_EQ(A, _Alignof(a));
ASSERT_EQ(0, (uintptr_t)&a & (_Alignof(a) - 1));
ASSERT_EQ(42, x + y[0] + z);
ASSERT_EQ(0, (intptr_t)&a & (A - 1));
if (IsAsan()) {
@ -41,6 +43,7 @@ dontubsan void *Worker(void *arg) {
TEST(tls, test) {
ASSERT_EQ(A, _Alignof(a));
ASSERT_EQ(0, (uintptr_t)&a & (_Alignof(a) - 1));
ASSERT_EQ(0, sizeof(struct CosmoTib) % A);
ASSERT_EQ(0, (intptr_t)__get_tls() & (A - 1));
EXPECT_EQ(2, z);

View file

@ -21,7 +21,6 @@
#include "libc/errno.h"
#include "libc/limits.h"
#include "libc/mem/gc.h"
#include "libc/mem/gc.h"
#include "libc/mem/mem.h"
#include "libc/runtime/runtime.h"
#include "libc/runtime/zipos.internal.h"

View file

@ -35,6 +35,10 @@ TEST(xstrcat, pointerAbuse) {
EXPECT_STREQ("hi there\n", gc(xstrcat("hi", ' ', "there", '\n')));
}
#if defined(__GNUC__) && __GNUC__ >= 12
#pragma GCC diagnostic ignored "-Wuse-after-free"
#endif
int hard_static(void) {
char *b, *p;
p = b = malloc(16);