|
|
@@ -6,6 +6,10 @@
|
|
|
#include "platform_api_extension.h"
|
|
|
#include "platform_api_vmcore.h"
|
|
|
|
|
|
+#if defined(CONFIG_ARCH_USE_TEXT_HEAP)
|
|
|
+#include <nuttx/arch.h>
|
|
|
+#endif
|
|
|
+
|
|
|
int
|
|
|
bh_platform_init()
|
|
|
{
|
|
|
@@ -37,6 +41,12 @@ os_free(void *ptr)
|
|
|
void *
|
|
|
os_mmap(void *hint, size_t size, int prot, int flags)
|
|
|
{
|
|
|
+#if defined(CONFIG_ARCH_USE_TEXT_HEAP)
|
|
|
+ if ((prot & MMAP_PROT_EXEC) != 0) {
|
|
|
+ return up_textheap_memalign(sizeof(void *), size);
|
|
|
+ }
|
|
|
+#endif
|
|
|
+
|
|
|
if ((uint64)size >= UINT32_MAX)
|
|
|
return NULL;
|
|
|
return malloc((uint32)size);
|
|
|
@@ -45,6 +55,12 @@ os_mmap(void *hint, size_t size, int prot, int flags)
|
|
|
void
|
|
|
os_munmap(void *addr, size_t size)
|
|
|
{
|
|
|
+#if defined(CONFIG_ARCH_USE_TEXT_HEAP)
|
|
|
+ if (up_textheap_heapmember(addr)) {
|
|
|
+ up_textheap_free(addr);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+#endif
|
|
|
return free(addr);
|
|
|
}
|
|
|
|