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) {
|
||||
if (IsQemuUser())
|
||||
return; // doesn't validate flags
|
||||
char *p;
|
||||
ASSERT_NE(MAP_FAILED, (p = mmap(0, getpagesize(), PROT_READ | PROT_WRITE,
|
||||
MAP_PRIVATE | MAP_ANONYMOUS, -1, 0)));
|
||||
|
@ -86,7 +88,7 @@ TEST(madvise, madvWillNeed_unmappedRegion) {
|
|||
ASSERT_SYS(0, 0, munmap(p + getgransize(), getgransize()));
|
||||
if (IsXnu())
|
||||
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));
|
||||
else
|
||||
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));
|
||||
else if (IsNetbsd() || IsOpenbsd())
|
||||
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));
|
||||
else
|
||||
ASSERT_SYS(ENOMEM, -1, madvise(p, getgransize() * 3, MADV_FREE));
|
||||
|
|
|
@ -44,6 +44,7 @@ TEST_LIBC_INTRIN_DIRECTDEPS = \
|
|||
TOOL_VIZ_LIB \
|
||||
THIRD_PARTY_COMPILER_RT \
|
||||
THIRD_PARTY_NSYNC \
|
||||
THIRD_PARTY_OPENMP \
|
||||
THIRD_PARTY_XED
|
||||
|
||||
TEST_LIBC_INTRIN_DEPS := \
|
||||
|
@ -76,6 +77,10 @@ $(TEST_LIBC_INTRIN_OBJS): private \
|
|||
CFLAGS += \
|
||||
-fno-builtin
|
||||
|
||||
$(TEST_LIBC_INTRIN_OBJS): private \
|
||||
CXXFLAGS += \
|
||||
-fopenmp
|
||||
|
||||
.PHONY: o/$(MODE)/test/libc/intrin
|
||||
o/$(MODE)/test/libc/intrin: \
|
||||
$(TEST_LIBC_INTRIN_BINS) \
|
||||
|
|
|
@ -190,7 +190,7 @@ BENCH(bulk_free, bench) {
|
|||
|
||||
#define ITERATIONS 1000
|
||||
#define THREADS 10
|
||||
#define SIZE (256 * 1024)
|
||||
#define SIZE (2 * 1024 * 1024)
|
||||
|
||||
void *Worker(void *arg) {
|
||||
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);
|
||||
while (!atomic_compare_exchange_weak_explicit (&free_waiters, &w->next_free, w,
|
||||
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) {
|
||||
|
@ -188,12 +188,11 @@ static waiter *free_waiters_pop (void) {
|
|||
if (atomic_compare_exchange_weak_explicit (&free_waiters, &w, w->next_free,
|
||||
memory_order_acq_rel, memory_order_relaxed))
|
||||
return w;
|
||||
backoff = pthread_delay_np(free_waiters, backoff);
|
||||
backoff = pthread_delay_np (free_waiters, backoff);
|
||||
} else {
|
||||
free_waiters_populate ();
|
||||
}
|
||||
}
|
||||
return w;
|
||||
}
|
||||
|
||||
/* -------------------------------- */
|
||||
|
|
Loading…
Reference in a new issue