#if ENABLE_UNIT_TESTS #include "../../../external/Catch/catch.hpp" #include "../../Clang/ClangMapFileParser.h" #include using namespace mapfileparser; static const char* mockMapFile = "# Path: /var/folders/8v/wyyvr8zd5rn3l9nfxz1dv4pw0000gn/T/il2cpp tests/csharp/SourceAssembly/GeneratedSources/_test.exe\n\ # Arch: i386\n\ # Object files:\n\ [0] linker synthesized\n\ [1] /usr/lib/libSystem.dylib\n\ [2] /usr/lib/libc++.dylib\n\ [3] /var/folders/8v/wyyvr8zd5rn3l9nfxz1dv4pw0000gn/T/il2cpp_cache/F14BC2A7F7430F841ABE66A030997030.o\n\ [4] /var/folders/8v/wyyvr8zd5rn3l9nfxz1dv4pw0000gn/T/il2cpp_cache/51181665DE4ABD7FD9F780396E0CD80A.o\n\ # Sections:\n\ # Address\tSize\t\tSegment\tSection\n\ 0x00001F40\t0x00DDC22F\t__TEXT\t__text\n\ 0x00DDE170\t0x000009C6\t__TEXT\t__symbol_stub\n\ 0x00DDEB38\t0x0000098A\t__TEXT\t__stub_helper\n\ 0x00DDF4C4\t0x000FFD68\t__TEXT\t__gcc_except_tab\n\ 0x00EDF230\t0x0004CF94\t__TEXT\t__const\n\ 0x00F2C1C4\t0x00053A85\t__TEXT\t__cstring\n\ 0x00F7FC49\t0x00029CA8\t__TEXT\t__unwind_info\n\ 0x00FA98F8\t0x000AF708\t__TEXT\t__eh_frame\n\ 0x01059000\t0x00015ABC\t__DATA\t__nl_symbol_ptr\n\ 0x0106EABC\t0x00000684\t__DATA\t__la_symbol_ptr\n\ 0x0106F140\t0x0000006C\t__DATA\t__mod_init_func\n\ 0x0106F1B0\t0x0023B008\t__DATA\t__data\n\ 0x012AA1B8\t0x0005D044\t__DATA\t__const\n\ 0x01307200\t0x00020454\t__DATA\t__common\n\ 0x01327658\t0x0000AB48\t__DATA\t__bss\n\ # Symbols:\n\ # Address\tSize\t\tFile Name\n\ 0x00DDE170\t0x00000006[1] __NSGetEnviron2\n\ 0x00001F40\t0x000000D0 [ 3] _U3CRegisterObjectU3Ec__AnonStorey2__ctor_m12113\n\ 0x00002010\t0x00000020 [ 3] __ZL37il2cpp_codegen_method_info_from_indexj\n\ 0x00DDE170\t0x00000006[1] __NSGetEnviron\n\ 0x00DDE176\t0x00000006[1] __Unwind_Resume\n\ 0x00002030\t0x00000120 [ 4] _U3CRegisterObjectU3Ec__AnonStorey2_U3CU3Em__1_m12114\n\ # Dead Stripped Symbols:\n\ <> \t0x00000060\t[ 2] l_OBJC_PROTOCOL_$_NSObject\n\ <> \t0x00000008\t[ 2] l_OBJC_LABEL_PROTOCOL_$_NSObject\n\ "; TEST_CASE("Parsing_Clang_MapFile_ContainsExpectedSectionsAndSymbols") { std::stringstream ss(mockMapFile); ClangMapFileParser parser; MapFile mapFile = parser.Parse(ss); REQUIRE(15 == mapFile.sections.size()); Section section = mapFile.sections[0]; REQUIRE(0x00001F40 == section.start); REQUIRE(0x00DDC22F == section.length); REQUIRE("__text" == section.name); REQUIRE("__TEXT" == section.segmentName); section = mapFile.sections[14]; REQUIRE(0x01327658 == section.start); REQUIRE(0x0000AB48 == section.length); REQUIRE("__bss" == section.name); REQUIRE("__DATA" == section.segmentName); REQUIRE(3 == mapFile.symbols.size()); Symbol symbol = mapFile.symbols[0]; REQUIRE(0x00001F40 == symbol.start); REQUIRE(0x000000D0 == symbol.length); REQUIRE("_U3CRegisterObjectU3Ec__AnonStorey2__ctor_m12113" == symbol.name); REQUIRE(kSegmentTypeCode == symbol.segmentType); REQUIRE("/var/folders/8v/wyyvr8zd5rn3l9nfxz1dv4pw0000gn/T/il2cpp_cache/F14BC2A7F7430F841ABE66A030997030.o" == symbol.objectFile); symbol = mapFile.symbols[2]; REQUIRE(0x00002030 == symbol.start); REQUIRE(0x00000120 == symbol.length); REQUIRE("_U3CRegisterObjectU3Ec__AnonStorey2_U3CU3Em__1_m12114" == symbol.name); REQUIRE(kSegmentTypeCode == symbol.segmentType); REQUIRE("/var/folders/8v/wyyvr8zd5rn3l9nfxz1dv4pw0000gn/T/il2cpp_cache/51181665DE4ABD7FD9F780396E0CD80A.o" == symbol.objectFile); } #endif // ENABLE_UNIT_TESTS