Work around QEMU bugs

This commit is contained in:
Justine Tunney 2024-07-07 15:42:46 -07:00
parent f7780de24b
commit f590e96abd
No known key found for this signature in database
GPG key ID: BE714B4575D6E328
4 changed files with 12 additions and 6 deletions

View file

@ -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));

View file

@ -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) \

View file

@ -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) {

View file

@ -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;
}
/* -------------------------------- */