enable --std=c99 compilation; fix mingw compilation
This commit is contained in:
parent
a9686d6ecf
commit
5805c39916
@ -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__))
|
(defined(__x86_64__) || defined(__i386__) || defined(__arm__) || defined(__aarch64__))
|
||||||
#if defined(__x86_64__) || defined(__i386__)
|
#if defined(__x86_64__) || defined(__i386__)
|
||||||
static inline void mi_atomic_yield(void) {
|
static inline void mi_atomic_yield(void) {
|
||||||
asm volatile ("pause" ::: "memory");
|
__asm__ volatile ("pause" ::: "memory");
|
||||||
}
|
}
|
||||||
#elif defined(__arm__) || defined(__aarch64__)
|
#elif defined(__arm__) || defined(__aarch64__)
|
||||||
static inline void mi_atomic_yield(void) {
|
static inline void mi_atomic_yield(void) {
|
||||||
asm volatile("yield");
|
__asm__ volatile("yield");
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#elif defined(__wasi__)
|
#elif defined(__wasi__)
|
||||||
|
@ -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
|
__asm__("movq %%fs:%1, %0" : "=r" (res) : "m" (*((void**)ofs)) : ); // x86_64 Linux, BSD uses FS
|
||||||
#elif defined(__arm__)
|
#elif defined(__arm__)
|
||||||
void** tcb; UNUSED(ofs);
|
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];
|
res = tcb[slot];
|
||||||
#elif defined(__aarch64__)
|
#elif defined(__aarch64__)
|
||||||
void** tcb; UNUSED(ofs);
|
void** tcb; UNUSED(ofs);
|
||||||
asm volatile ("mrs %0, tpidr_el0" : "=r" (tcb));
|
__asm__ volatile ("mrs %0, tpidr_el0" : "=r" (tcb));
|
||||||
res = tcb[slot];
|
res = tcb[slot];
|
||||||
#endif
|
#endif
|
||||||
return res;
|
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
|
__asm__("movq %1,%%fs:%1" : "=m" (*((void**)ofs)) : "rn" (value) : ); // x86_64 Linux, BSD uses FS
|
||||||
#elif defined(__arm__)
|
#elif defined(__arm__)
|
||||||
void** tcb; UNUSED(ofs);
|
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;
|
tcb[slot] = value;
|
||||||
#elif defined(__aarch64__)
|
#elif defined(__aarch64__)
|
||||||
void** tcb; UNUSED(ofs);
|
void** tcb; UNUSED(ofs);
|
||||||
asm volatile ("mrs %0, tpidr_el0" : "=r" (tcb));
|
__asm__ volatile ("mrs %0, tpidr_el0" : "=r" (tcb));
|
||||||
tcb[slot] = value;
|
tcb[slot] = value;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -198,26 +198,26 @@ static void mi_segment_protect(mi_segment_t* segment, bool protect, mi_os_tld_t*
|
|||||||
// add/remove guard pages
|
// add/remove guard pages
|
||||||
if (MI_SECURE != 0) {
|
if (MI_SECURE != 0) {
|
||||||
// in secure mode, we set up a protected page in between the segment info and the page data
|
// 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();
|
const size_t os_psize = _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((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_page_size == 0);
|
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_page_size, os_page_size, protect);
|
mi_segment_protect_range((uint8_t*)segment + segment->segment_info_size - os_psize, os_psize, protect);
|
||||||
if (MI_SECURE <= 1 || segment->capacity == 1) {
|
if (MI_SECURE <= 1 || segment->capacity == 1) {
|
||||||
// and protect the last (or only) page too
|
// and protect the last (or only) page too
|
||||||
mi_assert_internal(MI_SECURE <= 1 || segment->page_kind >= MI_PAGE_LARGE);
|
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) {
|
if (protect && !segment->mem_is_committed) {
|
||||||
// ensure secure page 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 {
|
else {
|
||||||
// or protect every page
|
// or protect every page
|
||||||
const size_t page_size = mi_segment_page_size(segment);
|
const size_t page_size = mi_segment_page_size(segment);
|
||||||
for (size_t i = 0; i < segment->capacity; i++) {
|
for (size_t i = 0; i < segment->capacity; i++) {
|
||||||
if (segment->pages[i].is_committed) {
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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 {
|
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
|
// wrap the output function to be line buffered
|
||||||
char buf[256];
|
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;
|
mi_output_fun* out = &mi_buffered_out;
|
||||||
void* arg = &buffer;
|
void* arg = &buffer;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user