| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161 |
- /*
- * Copyright (C) 2019 Intel Corporation. All rights reserved.
- * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
- */
- #include "gtest/gtest.h"
- #include "bh_platform.h"
- #include <fstream>
- #include "test_helper.h"
- #include "aot_export.h"
- class CustomSectionTest : public testing::Test
- {
- protected:
- // You should make the members protected s.t. they can be
- // accessed from sub-classes.
- // virtual void SetUp() will be called before each test is run. You
- // should define it if you need to initialize the variables.
- // Otherwise, this can be skipped.
- virtual void SetUp() {}
- // virtual void TearDown() will be called after each test is run.
- // You should define it if there is cleanup work to do. Otherwise,
- // you don't have to provide it.
- //
- virtual void TearDown() {}
- public:
- WAMRRuntimeRAII<1 * 1024 * 1024> runtime;
- };
- TEST_F(CustomSectionTest, get_custom_section_from_wasm_module_t)
- {
- uint32_t length, len_from_aot;
- const uint8_t *content, *content_from_aot;
- std::ifstream wasm_file("wasm-apps/app.wasm", std::ios::binary);
- std::vector<unsigned char> buffer(std::istreambuf_iterator<char>(wasm_file),
- {});
- {
- WAMRModule module(buffer.data(), buffer.size());
- aot_comp_data_t comp_data = NULL;
- aot_comp_context_t comp_ctx = NULL;
- std::vector<const char *> sections_to_emit{
- "name",
- ".debug_info",
- ".debug_abbrev",
- /* skip ".debug_line" section in AoT module */
- ".debug_str",
- "producers",
- };
- AOTCompOption option = { 0 };
- option.custom_sections = (char **)sections_to_emit.data();
- option.custom_sections_count = 5;
- {
- /* Compile an AoT module */
- comp_data = aot_create_comp_data(module.get(), NULL, false);
- EXPECT_NE(comp_data, nullptr);
- comp_ctx = aot_create_comp_context(comp_data, &option);
- EXPECT_NE(comp_ctx, nullptr);
- EXPECT_TRUE(aot_compile_wasm(comp_ctx));
- EXPECT_TRUE(aot_emit_aot_file(comp_ctx, comp_data, "temp.aot"));
- }
- std::ifstream aot_file("temp.aot", std::ios::binary);
- std::vector<unsigned char> aot_buffer(
- std::istreambuf_iterator<char>(aot_file), {});
- WAMRModule aot_module(aot_buffer.data(), aot_buffer.size());
- /* name */
- content =
- wasm_runtime_get_custom_section(module.get(), "name", &length);
- EXPECT_NE(content, nullptr);
- EXPECT_GT(length, 0);
- /* TODO: aot_emit_name_section don't
- EMIT_U32(AOT_CUSTOM_SECTION_RAW);*
- EMIT_STR("name");
- but instead
- EMIT_U32(AOT_CUSTOM_SECTION_NAME);
- can't use get_custom_section to get it
- */
- // content_from_aot = wasm_runtime_get_custom_section(
- // aot_module.get(), "name", &len_from_aot);
- // EXPECT_NE(content_from_aot, nullptr);
- // EXPECT_EQ(len_from_aot, length);
- // EXPECT_EQ(memcmp(content_from_aot, content, length), 0);
- /* .debug_info */
- content = wasm_runtime_get_custom_section(module.get(), ".debug_info",
- &length);
- EXPECT_NE(content, nullptr);
- EXPECT_GT(length, 0);
- content_from_aot = wasm_runtime_get_custom_section(
- aot_module.get(), ".debug_info", &len_from_aot);
- EXPECT_NE(content_from_aot, nullptr);
- EXPECT_EQ(len_from_aot, length);
- EXPECT_EQ(memcmp(content_from_aot, content, length), 0);
- /* .debug_abbrev */
- content = wasm_runtime_get_custom_section(module.get(), ".debug_abbrev",
- &length);
- EXPECT_NE(content, nullptr);
- EXPECT_GT(length, 0);
- content_from_aot = wasm_runtime_get_custom_section(
- aot_module.get(), ".debug_abbrev", &len_from_aot);
- EXPECT_NE(content_from_aot, nullptr);
- EXPECT_EQ(len_from_aot, length);
- EXPECT_EQ(memcmp(content_from_aot, content, length), 0);
- /* .debug_line */
- content = wasm_runtime_get_custom_section(module.get(), ".debug_line",
- &length);
- EXPECT_NE(content, nullptr);
- EXPECT_GT(length, 0);
- content_from_aot = wasm_runtime_get_custom_section(
- aot_module.get(), ".debug_line", &len_from_aot);
- EXPECT_EQ(content_from_aot, nullptr);
- /* .debug_str */
- content = wasm_runtime_get_custom_section(module.get(), ".debug_str",
- &length);
- EXPECT_NE(content, nullptr);
- EXPECT_GT(length, 0);
- content_from_aot = wasm_runtime_get_custom_section(
- aot_module.get(), ".debug_str", &len_from_aot);
- EXPECT_NE(content_from_aot, nullptr);
- EXPECT_EQ(len_from_aot, length);
- EXPECT_EQ(memcmp(content_from_aot, content, length), 0);
- /* producers */
- content =
- wasm_runtime_get_custom_section(module.get(), "producers", &length);
- EXPECT_NE(content, nullptr);
- EXPECT_GT(length, 0);
- content_from_aot = wasm_runtime_get_custom_section(
- aot_module.get(), "producers", &len_from_aot);
- EXPECT_NE(content_from_aot, nullptr);
- EXPECT_EQ(len_from_aot, length);
- EXPECT_EQ(memcmp(content_from_aot, content, length), 0);
- /* Not exist */
- content = wasm_runtime_get_custom_section(module.get(), "producers1",
- &length);
- EXPECT_EQ(content, nullptr);
- content_from_aot = wasm_runtime_get_custom_section(
- aot_module.get(), "producers1", &len_from_aot);
- EXPECT_EQ(content_from_aot, nullptr);
- }
- }
|