| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- /*
- * Copyright (C) 2024 Amazon Inc. All rights reserved.
- * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
- */
- #include "wasm_loader_common.h"
- #include "bh_log.h"
- #include "../interpreter/wasm.h"
- static void
- set_error_buf(char *error_buf, uint32 error_buf_size, const char *string,
- bool is_aot)
- {
- if (error_buf != NULL) {
- snprintf(error_buf, error_buf_size, "%s module load failed: %s",
- is_aot ? "AOT" : "WASM", string);
- }
- }
- bool
- wasm_memory_check_flags(const uint8 mem_flag, char *error_buf,
- uint32 error_buf_size, bool is_aot)
- {
- /* Check whether certain features indicated by mem_flag are enabled in
- * runtime */
- if (mem_flag > MAX_PAGE_COUNT_FLAG) {
- #if WASM_ENABLE_SHARED_MEMORY == 0
- if (mem_flag & SHARED_MEMORY_FLAG) {
- LOG_VERBOSE("shared memory flag was found, please enable shared "
- "memory, lib-pthread or lib-wasi-threads");
- set_error_buf(error_buf, error_buf_size, "invalid limits flags",
- is_aot);
- return false;
- }
- #endif
- #if WASM_ENABLE_MEMORY64 == 0
- if (mem_flag & MEMORY64_FLAG) {
- LOG_VERBOSE("memory64 flag was found, please enable memory64");
- set_error_buf(error_buf, error_buf_size, "invalid limits flags",
- is_aot);
- return false;
- }
- #endif
- }
- if (mem_flag > MAX_PAGE_COUNT_FLAG + SHARED_MEMORY_FLAG + MEMORY64_FLAG) {
- set_error_buf(error_buf, error_buf_size, "invalid limits flags",
- is_aot);
- return false;
- }
- else if ((mem_flag & SHARED_MEMORY_FLAG)
- && !(mem_flag & MAX_PAGE_COUNT_FLAG)) {
- set_error_buf(error_buf, error_buf_size,
- "shared memory must have maximum", is_aot);
- return false;
- }
- return true;
- }
|