merge with dev

This commit is contained in:
Daan 2021-10-20 09:56:03 -07:00
commit de00de96fd
3 changed files with 21 additions and 8 deletions

View file

@ -166,7 +166,10 @@ endif()
# Compiler flags # Compiler flags
if(CMAKE_C_COMPILER_ID MATCHES "AppleClang|Clang|GNU") if(CMAKE_C_COMPILER_ID MATCHES "AppleClang|Clang|GNU")
list(APPEND mi_cflags -Wall -Wextra -Wno-unknown-pragmas -Wstrict-prototypes -fvisibility=hidden) list(APPEND mi_cflags -Wall -Wextra -Wno-unknown-pragmas -fvisibility=hidden)
if(NOT MI_USE_CXX)
list(APPEND mi_cflags -Wstrict-prototypes)
endif()
if(CMAKE_C_COMPILER_ID MATCHES "GNU") if(CMAKE_C_COMPILER_ID MATCHES "GNU")
list(APPEND mi_cflags -Wno-invalid-memory-model) list(APPEND mi_cflags -Wno-invalid-memory-model)
endif() endif()

View file

@ -189,6 +189,10 @@ static malloc_zone_t* mi_get_default_zone()
} }
} }
#if defined(__GNUC__) && !defined(__clang__)
#pragma GCC diagnostic ignored "-Wmissing-field-initializers"
#endif
static malloc_introspection_t mi_introspect = { static malloc_introspection_t mi_introspect = {
.enumerator = &intro_enumerator, .enumerator = &intro_enumerator,
.good_size = &intro_good_size, .good_size = &intro_good_size,
@ -199,23 +203,23 @@ static malloc_introspection_t mi_introspect = {
.force_unlock = &intro_force_unlock, .force_unlock = &intro_force_unlock,
#if defined(MAC_OS_X_VERSION_10_6) && \ #if defined(MAC_OS_X_VERSION_10_6) && \
MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6 MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6
.zone_locked = &intro_zone_locked,
.statistics = &intro_statistics, .statistics = &intro_statistics,
.zone_locked = &intro_zone_locked,
#endif #endif
}; };
static malloc_zone_t mi_malloc_zone = { static malloc_zone_t mi_malloc_zone = {
.size = &zone_size, .size = &zone_size,
.zone_name = "mimalloc",
.introspect = &mi_introspect,
.malloc = &zone_malloc, .malloc = &zone_malloc,
.calloc = &zone_calloc, .calloc = &zone_calloc,
.valloc = &zone_valloc, .valloc = &zone_valloc,
.free = &zone_free, .free = &zone_free,
.realloc = &zone_realloc, .realloc = &zone_realloc,
.destroy = &zone_destroy, .destroy = &zone_destroy,
.zone_name = "mimalloc",
.batch_malloc = &zone_batch_malloc, .batch_malloc = &zone_batch_malloc,
.batch_free = &zone_batch_free, .batch_free = &zone_batch_free,
.introspect = &mi_introspect,
#if defined(MAC_OS_X_VERSION_10_6) && \ #if defined(MAC_OS_X_VERSION_10_6) && \
MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6 MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6
// switch to version 9 on OSX 10.6 to support memalign. // switch to version 9 on OSX 10.6 to support memalign.
@ -243,16 +247,22 @@ __attribute__((used)) static struct {
}; };
#endif #endif
static void __attribute__((constructor(0))) _mi_macos_override_malloc() {
#if defined(__clang__)
__attribute__((constructor(0)))
#else
__attribute__((constructor)) // seems not supported by g++-11 on the M1
#endif
static void _mi_macos_override_malloc() {
malloc_zone_t* purgeable_zone = NULL; malloc_zone_t* purgeable_zone = NULL;
#if defined(MAC_OS_X_VERSION_10_6) && \ #if defined(MAC_OS_X_VERSION_10_6) && \
MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6 MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6
// force the purgeable zone to exist to avoid strange bugs // force the purgeable zone to exist to avoid strange bugs
if (malloc_default_purgeable_zone) { if (malloc_default_purgeable_zone) {
purgeable_zone = malloc_default_purgeable_zone(); purgeable_zone = malloc_default_purgeable_zone();
} }
#endif #endif
// Register our zone. // Register our zone.
// thomcc: I think this is still needed to put us in the zone list. // thomcc: I think this is still needed to put us in the zone list.

View file

@ -324,7 +324,7 @@ bool mi_manage_os_memory(void* start, size_t size, bool is_committed, bool is_la
// the bitmaps are already zero initialized due to os_alloc // the bitmaps are already zero initialized due to os_alloc
// initialize committed bitmap? // initialize committed bitmap?
if (arena->blocks_committed != NULL && is_committed) { if (arena->blocks_committed != NULL && is_committed) {
memset(arena->blocks_committed, 0xFF, fields*sizeof(mi_bitmap_field_t)); memset((void*)arena->blocks_committed, 0xFF, fields*sizeof(mi_bitmap_field_t)); // cast to void* to avoid atomic warning
} }
// and claim leftover blocks if needed (so we never allocate there) // and claim leftover blocks if needed (so we never allocate there)
ptrdiff_t post = (fields * MI_BITMAP_FIELD_BITS) - bcount; ptrdiff_t post = (fields * MI_BITMAP_FIELD_BITS) - bcount;