avoid trying to use mremap outside of Linux

This commit is contained in:
Daniel Micay 2019-07-05 21:59:44 -04:00
parent 934ab4cb59
commit a32e26b8e9
3 changed files with 10 additions and 0 deletions

View File

@ -1416,6 +1416,7 @@ EXPORT void *h_realloc(void *old, size_t size) {
return old; return old;
} }
#ifdef HAVE_COMPATIBLE_MREMAP
static const bool vma_merging_reliable = false; static const bool vma_merging_reliable = false;
if (vma_merging_reliable) { if (vma_merging_reliable) {
// in-place growth // in-place growth
@ -1465,6 +1466,7 @@ EXPORT void *h_realloc(void *old, size_t size) {
thread_seal_metadata(); thread_seal_metadata();
return new; return new;
} }
#endif
} }
} }

View File

@ -68,6 +68,7 @@ int memory_protect_rw_metadata(void *ptr, size_t size) {
return memory_protect_prot(ptr, size, PROT_READ|PROT_WRITE, get_metadata_key()); return memory_protect_prot(ptr, size, PROT_READ|PROT_WRITE, get_metadata_key());
} }
#ifdef HAVE_COMPATIBLE_MREMAP
int memory_remap(void *old, size_t old_size, size_t new_size) { int memory_remap(void *old, size_t old_size, size_t new_size) {
void *ptr = mremap(old, old_size, new_size, 0); void *ptr = mremap(old, old_size, new_size, 0);
if (unlikely(ptr == MAP_FAILED)) { if (unlikely(ptr == MAP_FAILED)) {
@ -89,6 +90,7 @@ int memory_remap_fixed(void *old, size_t old_size, void *new, size_t new_size) {
} }
return 0; return 0;
} }
#endif
void memory_set_name(UNUSED void *ptr, UNUSED size_t size, UNUSED const char *name) { void memory_set_name(UNUSED void *ptr, UNUSED size_t size, UNUSED const char *name) {
#ifdef LABEL_MEMORY #ifdef LABEL_MEMORY

View File

@ -3,6 +3,10 @@
#include <stddef.h> #include <stddef.h>
#ifdef __linux__
#define HAVE_COMPATIBLE_MREMAP
#endif
int get_metadata_key(void); int get_metadata_key(void);
void *memory_map(size_t size); void *memory_map(size_t size);
@ -11,8 +15,10 @@ int memory_unmap(void *ptr, size_t size);
int memory_protect_ro(void *ptr, size_t size); int memory_protect_ro(void *ptr, size_t size);
int memory_protect_rw(void *ptr, size_t size); int memory_protect_rw(void *ptr, size_t size);
int memory_protect_rw_metadata(void *ptr, size_t size); int memory_protect_rw_metadata(void *ptr, size_t size);
#ifdef HAVE_COMPATIBLE_MREMAP
int memory_remap(void *old, size_t old_size, size_t new_size); int memory_remap(void *old, size_t old_size, size_t new_size);
int memory_remap_fixed(void *old, size_t old_size, void *new, size_t new_size); int memory_remap_fixed(void *old, size_t old_size, void *new, size_t new_size);
#endif
void memory_set_name(void *ptr, size_t size, const char *name); void memory_set_name(void *ptr, size_t size, const char *name);
#endif #endif