shared-platform: Remove dependency on shared-utils' bh_memory_remap_slow (#3153)

As an original design rule, the code in `core/shared/platform` should not
rely on the code in `core/share/utils`. In the current implementation,
platform layer calls function `bh_memory_remap_slow` in utils layer.

This PR adds inline function `os_mremap_slow` in platform_api_vmcore.h,
and lets os_remap call it if mremap fails. And remove bh_memutils.h/c as
as they are unused.

And resolve the compilation warning in wamrc:
```bash
core/shared/platform/common/posix/posix_memmap.c:255:16:
warning: implicit declaration of function ‘bh_memory_remap_slow’
  255 |         return bh_memory_remap_slow(old_addr, old_size, new_size);
```
This commit is contained in:
Wenyong Huang 2024-02-17 13:44:33 +08:00 committed by GitHub
parent 3a0e86454e
commit b6adec373e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 22 additions and 69 deletions

View File

@ -3,10 +3,10 @@
* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
*/ */
#include "bh_memutils.h" #include "platform_api_vmcore.h"
void * void *
os_mremap(void *old_addr, size_t old_size, size_t new_size) os_mremap(void *old_addr, size_t old_size, size_t new_size)
{ {
return bh_memory_remap_slow(old_addr, old_size, new_size); return os_mremap_slow(old_addr, old_size, new_size);
} }

View File

@ -25,6 +25,7 @@ list (REMOVE_AT CMAKE_REQUIRED_DEFINITIONS 0)
if(MREMAP_EXISTS) if(MREMAP_EXISTS)
add_definitions (-DWASM_HAVE_MREMAP=1) add_definitions (-DWASM_HAVE_MREMAP=1)
add_definitions (-D_GNU_SOURCE)
else() else()
add_definitions (-DWASM_HAVE_MREMAP=0) add_definitions (-DWASM_HAVE_MREMAP=0)
include (${CMAKE_CURRENT_LIST_DIR}/../memory/platform_api_memory.cmake) include (${CMAKE_CURRENT_LIST_DIR}/../memory/platform_api_memory.cmake)

View File

@ -3,12 +3,6 @@
* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
*/ */
#if !defined(_GNU_SOURCE) && WASM_HAVE_MREMAP != 0
/* Enable mremap */
#define _GNU_SOURCE
#include "bh_memutils.h"
#endif
#include "platform_api_vmcore.h" #include "platform_api_vmcore.h"
#if defined(__APPLE__) || defined(__MACH__) #if defined(__APPLE__) || defined(__MACH__)
@ -252,7 +246,7 @@ os_mremap(void *old_addr, size_t old_size, size_t new_size)
#if BH_ENABLE_TRACE_MMAP != 0 #if BH_ENABLE_TRACE_MMAP != 0
os_printf("mremap failed: %d\n", errno); os_printf("mremap failed: %d\n", errno);
#endif #endif
return bh_memory_remap_slow(old_addr, old_size, new_size); return os_mremap_slow(old_addr, old_size, new_size);
} }
return ptr; return ptr;

View File

@ -142,6 +142,24 @@ os_munmap(void *addr, size_t size);
int int
os_mprotect(void *addr, size_t size, int prot); os_mprotect(void *addr, size_t size, int prot);
static inline void *
os_mremap_slow(void *old_addr, size_t old_size, size_t new_size)
{
void *new_memory = os_mmap(NULL, new_size, MMAP_PROT_WRITE | MMAP_PROT_READ,
0, os_get_invalid_handle());
if (!new_memory) {
return NULL;
}
/*
* bh_memcpy_s can't be used as it doesn't support values bigger than
* UINT32_MAX
*/
memcpy(new_memory, old_addr, new_size < old_size ? new_size : old_size);
os_munmap(old_addr, old_size);
return new_memory;
}
/* Doesn't guarantee that protection flags will be preserved. /* Doesn't guarantee that protection flags will be preserved.
os_mprotect() must be called after remapping. */ os_mprotect() must be called after remapping. */
void * void *

View File

@ -1,24 +0,0 @@
/*
* Copyright (C) 2024 Amazon Inc. All rights reserved.
* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
*/
#include "bh_memutils.h"
void *
bh_memory_remap_slow(void *old_addr, size_t old_size, size_t new_size)
{
void *new_memory =
os_mmap(NULL, new_size, MMAP_PROT_WRITE | MMAP_PROT_READ, 0, -1);
if (!new_memory) {
return NULL;
}
/*
* bh_memcpy_s can't be used as it doesn't support values bigger than
* UINT32_MAX
*/
memcpy(new_memory, old_addr, new_size < old_size ? new_size : old_size);
os_munmap(old_addr, old_size);
return new_memory;
}

View File

@ -1,35 +0,0 @@
/*
* Copyright (C) 2024 Amazon Inc. All rights reserved.
* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
*/
#ifndef _BH_MEMUTILS_H
#define _BH_MEMUTILS_H
#include "bh_platform.h"
#ifdef __cplusplus
extern "C" {
#endif
/**
* Remaps memory by mapping a new region, copying data from the old
* region and umapping the old region.
*
* Unless the behavior is desired, in most cases os_mremap should be used
* as it's at worst equally slow as this function, and on some platforms
* (e.g. posix with mremap) os_mremap will perform better.
*
* @param old_addr an old address.
* @param old_size a size of the old address.
* @param new_size a size of the new memory region.
* @return a pointer to the new memory region.
*/
void *
bh_memory_remap_slow(void *old_addr, size_t old_size, size_t new_size);
#ifdef __cplusplus
}
#endif
#endif /* end of _BH_MEMUTILS_H */

View File

@ -437,7 +437,6 @@ CSRCS += nuttx_platform.c \
bh_hashmap.c \ bh_hashmap.c \
bh_list.c \ bh_list.c \
bh_log.c \ bh_log.c \
bh_memutils.c \
bh_queue.c \ bh_queue.c \
bh_vector.c \ bh_vector.c \
bh_read_file.c \ bh_read_file.c \