diff --git a/include/mimalloc-atomic.h b/include/mimalloc-atomic.h index 722b6ad6..b6b06cbc 100644 --- a/include/mimalloc-atomic.h +++ b/include/mimalloc-atomic.h @@ -270,11 +270,11 @@ static inline void mi_atomic_maxi64(volatile int64_t* p, int64_t x) { (defined(__x86_64__) || defined(__i386__) || defined(__arm__) || defined(__aarch64__)) #if defined(__x86_64__) || defined(__i386__) static inline void mi_atomic_yield(void) { - asm volatile ("pause" ::: "memory"); + __asm__ volatile ("pause" ::: "memory"); } #elif defined(__arm__) || defined(__aarch64__) static inline void mi_atomic_yield(void) { - asm volatile("yield"); + __asm__ volatile("yield"); } #endif #elif defined(__wasi__) diff --git a/include/mimalloc-internal.h b/include/mimalloc-internal.h index 2dc7e36a..146bf5c0 100644 --- a/include/mimalloc-internal.h +++ b/include/mimalloc-internal.h @@ -703,11 +703,11 @@ static inline void* mi_tls_slot(size_t slot) mi_attr_noexcept { __asm__("movq %%fs:%1, %0" : "=r" (res) : "m" (*((void**)ofs)) : ); // x86_64 Linux, BSD uses FS #elif defined(__arm__) void** tcb; UNUSED(ofs); - asm volatile ("mrc p15, 0, %0, c13, c0, 3\nbic %0, %0, #3" : "=r" (tcb)); + __asm__ volatile ("mrc p15, 0, %0, c13, c0, 3\nbic %0, %0, #3" : "=r" (tcb)); res = tcb[slot]; #elif defined(__aarch64__) void** tcb; UNUSED(ofs); - asm volatile ("mrs %0, tpidr_el0" : "=r" (tcb)); + __asm__ volatile ("mrs %0, tpidr_el0" : "=r" (tcb)); res = tcb[slot]; #endif return res; @@ -724,11 +724,11 @@ static inline void mi_tls_slot_set(size_t slot, void* value) mi_attr_noexcept { __asm__("movq %1,%%fs:%1" : "=m" (*((void**)ofs)) : "rn" (value) : ); // x86_64 Linux, BSD uses FS #elif defined(__arm__) void** tcb; UNUSED(ofs); - asm volatile ("mrc p15, 0, %0, c13, c0, 3\nbic %0, %0, #3" : "=r" (tcb)); + __asm__ volatile ("mrc p15, 0, %0, c13, c0, 3\nbic %0, %0, #3" : "=r" (tcb)); tcb[slot] = value; #elif defined(__aarch64__) void** tcb; UNUSED(ofs); - asm volatile ("mrs %0, tpidr_el0" : "=r" (tcb)); + __asm__ volatile ("mrs %0, tpidr_el0" : "=r" (tcb)); tcb[slot] = value; #endif } diff --git a/src/segment.c b/src/segment.c index 8a5ba8c0..371a83a3 100644 --- a/src/segment.c +++ b/src/segment.c @@ -198,26 +198,26 @@ static void mi_segment_protect(mi_segment_t* segment, bool protect, mi_os_tld_t* // add/remove guard pages if (MI_SECURE != 0) { // in secure mode, we set up a protected page in between the segment info and the page data - const size_t os_page_size = _mi_os_page_size(); - mi_assert_internal((segment->segment_info_size - os_page_size) >= (sizeof(mi_segment_t) + ((segment->capacity - 1) * sizeof(mi_page_t)))); - mi_assert_internal(((uintptr_t)segment + segment->segment_info_size) % os_page_size == 0); - mi_segment_protect_range((uint8_t*)segment + segment->segment_info_size - os_page_size, os_page_size, protect); + const size_t os_psize = _mi_os_page_size(); + mi_assert_internal((segment->segment_info_size - os_psize) >= (sizeof(mi_segment_t) + ((segment->capacity - 1) * sizeof(mi_page_t)))); + mi_assert_internal(((uintptr_t)segment + segment->segment_info_size) % os_psize == 0); + mi_segment_protect_range((uint8_t*)segment + segment->segment_info_size - os_psize, os_psize, protect); if (MI_SECURE <= 1 || segment->capacity == 1) { // and protect the last (or only) page too mi_assert_internal(MI_SECURE <= 1 || segment->page_kind >= MI_PAGE_LARGE); - uint8_t* start = (uint8_t*)segment + segment->segment_size - os_page_size; + uint8_t* start = (uint8_t*)segment + segment->segment_size - os_psize; if (protect && !segment->mem_is_committed) { // ensure secure page is committed - _mi_mem_commit(start, os_page_size, NULL, tld); + _mi_mem_commit(start, os_psize, NULL, tld); } - mi_segment_protect_range(start, os_page_size, protect); + mi_segment_protect_range(start, os_psize, protect); } else { // or protect every page const size_t page_size = mi_segment_page_size(segment); for (size_t i = 0; i < segment->capacity; i++) { if (segment->pages[i].is_committed) { - mi_segment_protect_range((uint8_t*)segment + (i+1)*page_size - os_page_size, os_page_size, protect); + mi_segment_protect_range((uint8_t*)segment + (i+1)*page_size - os_psize, os_psize, protect); } } } diff --git a/src/stats.c b/src/stats.c index 203bad81..6f12454e 100644 --- a/src/stats.c +++ b/src/stats.c @@ -278,7 +278,8 @@ static void mi_process_info(mi_msecs_t* utime, mi_msecs_t* stime, size_t* peak_r static void _mi_stats_print(mi_stats_t* stats, mi_msecs_t elapsed, mi_output_fun* out0, void* arg0) mi_attr_noexcept { // wrap the output function to be line buffered char buf[256]; - buffered_t buffer = { out0, arg0, buf, 0, 255 }; + buffered_t buffer = { out0, arg0, NULL, 0, 255 }; + buffer.buf = buf; mi_output_fun* out = &mi_buffered_out; void* arg = &buffer;