wasm_loader_common.c 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. /*
  2. * Copyright (C) 2024 Amazon Inc. All rights reserved.
  3. * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
  4. */
  5. #include "wasm_loader_common.h"
  6. #include "bh_log.h"
  7. #include "../interpreter/wasm.h"
  8. static void
  9. set_error_buf(char *error_buf, uint32 error_buf_size, const char *string,
  10. bool is_aot)
  11. {
  12. if (error_buf != NULL) {
  13. snprintf(error_buf, error_buf_size, "%s module load failed: %s",
  14. is_aot ? "AOT" : "WASM", string);
  15. }
  16. }
  17. bool
  18. wasm_memory_check_flags(const uint8 mem_flag, char *error_buf,
  19. uint32 error_buf_size, bool is_aot)
  20. {
  21. /* Check whether certain features indicated by mem_flag are enabled in
  22. * runtime */
  23. if (mem_flag > MAX_PAGE_COUNT_FLAG) {
  24. #if WASM_ENABLE_SHARED_MEMORY == 0
  25. if (mem_flag & SHARED_MEMORY_FLAG) {
  26. LOG_VERBOSE("shared memory flag was found, please enable shared "
  27. "memory, lib-pthread or lib-wasi-threads");
  28. set_error_buf(error_buf, error_buf_size, "invalid limits flags",
  29. is_aot);
  30. return false;
  31. }
  32. #endif
  33. #if WASM_ENABLE_MEMORY64 == 0
  34. if (mem_flag & MEMORY64_FLAG) {
  35. LOG_VERBOSE("memory64 flag was found, please enable memory64");
  36. set_error_buf(error_buf, error_buf_size, "invalid limits flags",
  37. is_aot);
  38. return false;
  39. }
  40. #endif
  41. }
  42. if (mem_flag > MAX_PAGE_COUNT_FLAG + SHARED_MEMORY_FLAG + MEMORY64_FLAG) {
  43. set_error_buf(error_buf, error_buf_size, "invalid limits flags",
  44. is_aot);
  45. return false;
  46. }
  47. else if ((mem_flag & SHARED_MEMORY_FLAG)
  48. && !(mem_flag & MAX_PAGE_COUNT_FLAG)) {
  49. set_error_buf(error_buf, error_buf_size,
  50. "shared memory must have maximum", is_aot);
  51. return false;
  52. }
  53. return true;
  54. }