mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-02-07 06:53:33 +00:00
Work around QEMU bugs
This commit is contained in:
parent
f7780de24b
commit
f590e96abd
4 changed files with 12 additions and 6 deletions
|
@ -61,6 +61,8 @@ TEST(madvise, short) {
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(madvise, zero) {
|
TEST(madvise, zero) {
|
||||||
|
if (IsQemuUser())
|
||||||
|
return; // doesn't validate flags
|
||||||
char *p;
|
char *p;
|
||||||
ASSERT_NE(MAP_FAILED, (p = mmap(0, getpagesize(), PROT_READ | PROT_WRITE,
|
ASSERT_NE(MAP_FAILED, (p = mmap(0, getpagesize(), PROT_READ | PROT_WRITE,
|
||||||
MAP_PRIVATE | MAP_ANONYMOUS, -1, 0)));
|
MAP_PRIVATE | MAP_ANONYMOUS, -1, 0)));
|
||||||
|
@ -86,7 +88,7 @@ TEST(madvise, madvWillNeed_unmappedRegion) {
|
||||||
ASSERT_SYS(0, 0, munmap(p + getgransize(), getgransize()));
|
ASSERT_SYS(0, 0, munmap(p + getgransize(), getgransize()));
|
||||||
if (IsXnu())
|
if (IsXnu())
|
||||||
ASSERT_SYS(EINVAL, -1, madvise(p, getgransize() * 3, MADV_WILLNEED));
|
ASSERT_SYS(EINVAL, -1, madvise(p, getgransize() * 3, MADV_WILLNEED));
|
||||||
else if (IsBsd() || IsWindows())
|
else if (IsBsd() || IsWindows() || IsQemuUser())
|
||||||
ASSERT_SYS(0, 0, madvise(p, getgransize() * 3, MADV_WILLNEED));
|
ASSERT_SYS(0, 0, madvise(p, getgransize() * 3, MADV_WILLNEED));
|
||||||
else
|
else
|
||||||
ASSERT_SYS(ENOMEM, -1, madvise(p, getgransize() * 3, MADV_WILLNEED));
|
ASSERT_SYS(ENOMEM, -1, madvise(p, getgransize() * 3, MADV_WILLNEED));
|
||||||
|
@ -102,7 +104,7 @@ TEST(madvise, madvFree_unmappedRegion) {
|
||||||
ASSERT_SYS(EINVAL, -1, madvise(p, getgransize() * 3, MADV_FREE));
|
ASSERT_SYS(EINVAL, -1, madvise(p, getgransize() * 3, MADV_FREE));
|
||||||
else if (IsNetbsd() || IsOpenbsd())
|
else if (IsNetbsd() || IsOpenbsd())
|
||||||
ASSERT_SYS(EFAULT, -1, madvise(p, getgransize() * 3, MADV_FREE));
|
ASSERT_SYS(EFAULT, -1, madvise(p, getgransize() * 3, MADV_FREE));
|
||||||
else if (IsFreebsd() || IsWindows())
|
else if (IsFreebsd() || IsWindows() || IsQemuUser())
|
||||||
ASSERT_SYS(0, 0, madvise(p, getgransize() * 3, MADV_FREE));
|
ASSERT_SYS(0, 0, madvise(p, getgransize() * 3, MADV_FREE));
|
||||||
else
|
else
|
||||||
ASSERT_SYS(ENOMEM, -1, madvise(p, getgransize() * 3, MADV_FREE));
|
ASSERT_SYS(ENOMEM, -1, madvise(p, getgransize() * 3, MADV_FREE));
|
||||||
|
|
|
@ -44,6 +44,7 @@ TEST_LIBC_INTRIN_DIRECTDEPS = \
|
||||||
TOOL_VIZ_LIB \
|
TOOL_VIZ_LIB \
|
||||||
THIRD_PARTY_COMPILER_RT \
|
THIRD_PARTY_COMPILER_RT \
|
||||||
THIRD_PARTY_NSYNC \
|
THIRD_PARTY_NSYNC \
|
||||||
|
THIRD_PARTY_OPENMP \
|
||||||
THIRD_PARTY_XED
|
THIRD_PARTY_XED
|
||||||
|
|
||||||
TEST_LIBC_INTRIN_DEPS := \
|
TEST_LIBC_INTRIN_DEPS := \
|
||||||
|
@ -76,6 +77,10 @@ $(TEST_LIBC_INTRIN_OBJS): private \
|
||||||
CFLAGS += \
|
CFLAGS += \
|
||||||
-fno-builtin
|
-fno-builtin
|
||||||
|
|
||||||
|
$(TEST_LIBC_INTRIN_OBJS): private \
|
||||||
|
CXXFLAGS += \
|
||||||
|
-fopenmp
|
||||||
|
|
||||||
.PHONY: o/$(MODE)/test/libc/intrin
|
.PHONY: o/$(MODE)/test/libc/intrin
|
||||||
o/$(MODE)/test/libc/intrin: \
|
o/$(MODE)/test/libc/intrin: \
|
||||||
$(TEST_LIBC_INTRIN_BINS) \
|
$(TEST_LIBC_INTRIN_BINS) \
|
||||||
|
|
|
@ -190,7 +190,7 @@ BENCH(bulk_free, bench) {
|
||||||
|
|
||||||
#define ITERATIONS 1000
|
#define ITERATIONS 1000
|
||||||
#define THREADS 10
|
#define THREADS 10
|
||||||
#define SIZE (256 * 1024)
|
#define SIZE (2 * 1024 * 1024)
|
||||||
|
|
||||||
void *Worker(void *arg) {
|
void *Worker(void *arg) {
|
||||||
for (int i = 0; i < ITERATIONS; ++i) {
|
for (int i = 0; i < ITERATIONS; ++i) {
|
||||||
|
|
5
third_party/nsync/common.c
vendored
5
third_party/nsync/common.c
vendored
|
@ -142,7 +142,7 @@ static void free_waiters_push (waiter *w) {
|
||||||
w->next_free = atomic_load_explicit (&free_waiters, memory_order_relaxed);
|
w->next_free = atomic_load_explicit (&free_waiters, memory_order_relaxed);
|
||||||
while (!atomic_compare_exchange_weak_explicit (&free_waiters, &w->next_free, w,
|
while (!atomic_compare_exchange_weak_explicit (&free_waiters, &w->next_free, w,
|
||||||
memory_order_acq_rel, memory_order_relaxed))
|
memory_order_acq_rel, memory_order_relaxed))
|
||||||
backoff = pthread_delay_np(free_waiters, backoff);
|
backoff = pthread_delay_np (free_waiters, backoff);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void free_waiters_populate (void) {
|
static void free_waiters_populate (void) {
|
||||||
|
@ -188,12 +188,11 @@ static waiter *free_waiters_pop (void) {
|
||||||
if (atomic_compare_exchange_weak_explicit (&free_waiters, &w, w->next_free,
|
if (atomic_compare_exchange_weak_explicit (&free_waiters, &w, w->next_free,
|
||||||
memory_order_acq_rel, memory_order_relaxed))
|
memory_order_acq_rel, memory_order_relaxed))
|
||||||
return w;
|
return w;
|
||||||
backoff = pthread_delay_np(free_waiters, backoff);
|
backoff = pthread_delay_np (free_waiters, backoff);
|
||||||
} else {
|
} else {
|
||||||
free_waiters_populate ();
|
free_waiters_populate ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return w;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------- */
|
/* -------------------------------- */
|
||||||
|
|
Loading…
Reference in a new issue