Lines Matching +full:0 +full:x2030

3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
36 size_t WhichMsg = 0;
56 EXPECT_EQ(empty1.Dir, 0u);
57 EXPECT_EQ(empty1.Base, 0u);
89 const uint64_t StartAddr = 0x1000;
90 const uint64_t EndAddr = 0x1100;
108 FunctionInfo A1(0x1000, 0x100, NameOffset);
109 FunctionInfo A2(0x1000, 0x100, NameOffset);
115 B.Range = {0x1001, B.endAddress()};
119 B.Range = {B.startAddress(), B.startAddress() + 0x101};
128 B.Range = {A2.startAddress() + 0x1000, A2.endAddress() + 0x1000};
148 AddressRange(StartAddr, StartAddr + 0x10));
161 AddressRange(StartAddr, StartAddr + 0x10));
175 FIWithLinesWithHigherAddress.OptLineTable->get(0).Addr += 0x10;
199 const uint64_t BaseAddr = 0x100;
201 "0x00000000: missing FunctionInfo Size");
202 FW.writeU32(0x100); // Function size.
204 "0x00000004: missing FunctionInfo Name");
206 FW.writeU32(0);
208 "0x00000004: invalid FunctionInfo Name value 0x00000000");
209 // Modify the Name to be 0x00000001, which is a valid value.
210 FW.fixup32(0x00000001, 4);
212 "0x00000008: missing FunctionInfo InfoType value");
216 "0x0000000c: missing FunctionInfo InfoType length");
218 FW.writeU32(0); // LineTableInfo InfoType data length.
220 "0x00000008: unsupported InfoType 7");
235 const uint64_t FuncAddr = 0x1000;
236 const uint64_t FuncSize = 0x100;
237 const uint32_t InvalidName = 0;
268 ASSERT_EQ(ExpectedOffset.get(), 0ULL);
282 LineEntry Line0(FuncAddr + 0x000, FileIdx, 10);
283 LineEntry Line1(FuncAddr + 0x010, FileIdx, 11);
284 LineEntry Line2(FuncAddr + 0x100, FileIdx, 1000);
295 Inline1.Ranges.insert(AddressRange(FuncAddr + 0x10, FuncAddr + 0x30));
303 constexpr uint64_t FuncAddr = 0x1000;
304 constexpr uint64_t FuncSize = 0x100;
342 const uint64_t BaseAddr = Inline.Ranges[0].start();
374 Inline.Ranges.empty() ? 0 : Inline.Ranges[0].start();
383 II.Ranges.insert(AddressRange(0x1000, 0x2000));
398 // Root [0x100-0x200) (no name, file, or line)
399 // Inline1 [0x150-0x160) Name = 1, File = 1, Line = 11
400 // Inline1Sub1 [0x152-0x155) Name = 2, File = 2, Line = 22
401 // Inline1Sub2 [0x157-0x158) Name = 3, File = 3, Line = 33
403 Root.Ranges.insert(AddressRange(0x100, 0x200));
405 Inline1.Ranges.insert(AddressRange(0x150, 0x160));
410 Inline1Sub1.Ranges.insert(AddressRange(0x152, 0x155));
415 Inline1Sub2.Ranges.insert(AddressRange(0x157, 0x158));
424 EXPECT_FALSE(Root.getInlineStack(0x50));
426 // Verify that we get no inline stacks for addresses out of [0x100-0x200)
427 EXPECT_FALSE(Root.getInlineStack(Root.Ranges[0].start() - 1));
428 EXPECT_FALSE(Root.getInlineStack(Root.Ranges[0].end()));
431 // [0x100-0x200) but not in [0x150-0x160)
432 EXPECT_FALSE(Root.getInlineStack(Inline1.Ranges[0].start() - 1));
433 EXPECT_FALSE(Root.getInlineStack(Inline1.Ranges[0].end()));
436 // [[0x150-0x160)) but not in [0x152-0x155) or [0x157-0x158)
437 auto InlineInfos = Root.getInlineStack(Inline1.Ranges[0].start());
440 ASSERT_EQ(*InlineInfos->at(0), Inline1);
441 InlineInfos = Root.getInlineStack(Inline1.Ranges[0].end() - 1);
444 ASSERT_EQ(*InlineInfos->at(0), Inline1);
447 // [0x152-0x155)
448 InlineInfos = Root.getInlineStack(Inline1Sub1.Ranges[0].start());
451 ASSERT_EQ(*InlineInfos->at(0), Inline1Sub1);
453 InlineInfos = Root.getInlineStack(Inline1Sub1.Ranges[0].end() - 1);
456 ASSERT_EQ(*InlineInfos->at(0), Inline1Sub1);
460 // [0x157-0x158)
461 InlineInfos = Root.getInlineStack(Inline1Sub2.Ranges[0].start());
464 ASSERT_EQ(*InlineInfos->at(0), Inline1Sub2);
466 InlineInfos = Root.getInlineStack(Inline1Sub2.Ranges[0].end() - 1);
469 ASSERT_EQ(*InlineInfos->at(0), Inline1Sub2);
490 ContainsEmpty.Ranges.insert({0x100, 0x200});
499 ChildNotContained.Ranges.insert({0x100, 0x200});
501 ChildNotContainedChild.Ranges.insert({0x200, 0x300});
516 const uint64_t BaseAddr = 0x100;
518 "0x00000000: missing InlineInfo address ranges data");
520 Ranges.insert({BaseAddr, BaseAddr+0x100});
523 "0x00000004: missing InlineInfo uint8_t indicating children");
524 FW.writeU8(0);
526 "0x00000005: missing InlineInfo uint32_t for name");
527 FW.writeU32(0);
529 "0x00000009: missing ULEB128 for InlineInfo call file");
530 FW.writeU8(0);
532 "0x0000000a: missing ULEB128 for InlineInfo call line");
537 const uint64_t ValidAddr = 0x1000;
538 const uint64_t InvalidFileIdx = 0;
562 StringTable StrTab(StringRef("\0Hello\0World\0", 13));
564 EXPECT_EQ(StrTab.getString(0), "");
580 const uint64_t MinULEB = 0;
582 const uint8_t U8 = 0x10;
583 const uint16_t U16 = 0x1122;
584 const uint32_t U32 = 0x12345678;
585 const uint64_t U64 = 0x33445566778899aa;
593 FW.writeU32(0);
605 uint64_t Offset = 0;
633 const uint64_t BaseAddr = 0x1000;
634 const AddressRange Range1(0x1000, 0x1010);
635 const AddressRange Range2(0x1020, 0x1030);
643 uint64_t Offset = 0;
663 uint64_t Offset = 0;
673 const uint64_t BaseAddr = 0x1000;
680 Ranges.insert(AddressRange(0x1000, 0x1010));
684 Ranges.insert(AddressRange(0x1020, 0x1030));
685 Ranges.insert(AddressRange(0x1050, 0x1070));
694 const uint64_t BaseAddr = LT[0].Addr;
708 const uint64_t StartAddr = 0x1000;
711 LineEntry Line0(StartAddr+0x000, FileIdx, 10);
712 LineEntry Line1(StartAddr+0x010, FileIdx, 11);
713 LineEntry Line2(StartAddr+0x100, FileIdx, 1000);
715 ASSERT_EQ(LT.size(), (size_t)0);
720 LT.push(LineEntry(StartAddr+0x120, FileIdx, 900));
721 LT.push(LineEntry(StartAddr+0x120, FileIdx, 2000));
722 LT.push(LineEntry(StartAddr+0x121, FileIdx, 2001));
723 LT.push(LineEntry(StartAddr+0x122, FileIdx, 2002));
724 LT.push(LineEntry(StartAddr+0x123, FileIdx, 2003));
728 ASSERT_EQ(LT[0], Line0);
739 ASSERT_EQ(LT.size(), (size_t)0);
784 const uint64_t BaseAddr = 0x100;
786 "0x00000000: missing LineTable MinDelta");
789 "0x00000001: missing LineTable MaxDelta");
792 "0x00000002: missing LineTable FirstLine");
795 "0x00000003: EOF found before EndSequence");
799 "0x00000004: EOF found before SetFile value");
804 "0x00000006: EOF found before AdvancePC value");
809 "0x00000008: EOF found before AdvanceLine value");
814 const uint64_t BaseAddr = 0x1000;
826 LineEntry Line0(BaseAddr+0x000, FileIdx, 10);
827 LineEntry Line1(BaseAddr+0x010, FileIdx, 11);
830 checkError("LineEntry has address 0x1000 which is less than the function "
831 "start address 0x1010", LT.encode(FW, BaseAddr+0x10));
871 H.BaseAddress = 0x1000;
873 H.StrtabOffset= 0x2000;
874 H.StrtabSize = 0x1000;
875 for (size_t i=0; i<GSYM_MAX_UUID_SIZE; ++i) {
879 H.UUID[i] = 0;
887 TestHeaderEncodeError(H, "invalid GSYM magic 0x0000000c");
909 TestHeaderDecodeError(OutStrm.str(), "invalid GSYM magic 0x0000000c");
965 const uint64_t FuncAddr = 0x1000;
966 const uint64_t FuncSize = 0x100;
1042 constexpr uint64_t BaseAddr = 0x1000;
1046 GC.addFunctionInfo(FunctionInfo(BaseAddr+0x00, 0x10, Func1Name));
1047 GC.addFunctionInfo(FunctionInfo(BaseAddr+0x20, 0x10, Func2Name));
1065 constexpr uint64_t BaseAddr = 0x1000;
1069 GC.addFunctionInfo(FunctionInfo(BaseAddr+0x000, 0x100, Func1Name));
1070 GC.addFunctionInfo(FunctionInfo(BaseAddr+0x200, 0x100, Func2Name));
1088 constexpr uint64_t BaseAddr = 0x1000;
1092 GC.addFunctionInfo(FunctionInfo(BaseAddr+0x000, 0x100, Func1Name));
1093 GC.addFunctionInfo(FunctionInfo(BaseAddr+0x20000, 0x100, Func2Name));
1111 constexpr uint64_t BaseAddr = 0x1000;
1115 GC.addFunctionInfo(FunctionInfo(BaseAddr+0x000, 0x100, Func1Name));
1116 GC.addFunctionInfo(FunctionInfo(BaseAddr+0x100000000, 0x100, Func2Name));
1148 constexpr uint64_t BaseAddr = 0x1000;
1150 constexpr uint64_t Func2Addr = BaseAddr+0x20;
1151 constexpr uint64_t FuncSize = 0x10;
1167 VerifyFunctionInfoError(GR, Func1Addr-1, "address 0xfff is not in GSYM");
1174 "address 0x1010 is not in GSYM");
1175 VerifyFunctionInfoError(GR, Func2Addr-1, "address 0x101f is not in GSYM");
1181 "address 0x1030 is not in GSYM");
1192 FunctionInfo FI(0x1000, 0x100, GC.insertString("main"));
1197 FI.OptLineTable->push(LineEntry(0x1000, MainFileIndex, 5));
1198 FI.OptLineTable->push(LineEntry(0x1010, FooFileIndex, 10));
1199 FI.OptLineTable->push(LineEntry(0x1012, FooFileIndex, 20));
1200 FI.OptLineTable->push(LineEntry(0x1014, FooFileIndex, 11));
1201 FI.OptLineTable->push(LineEntry(0x1016, FooFileIndex, 30));
1202 FI.OptLineTable->push(LineEntry(0x1018, FooFileIndex, 12));
1203 FI.OptLineTable->push(LineEntry(0x1020, MainFileIndex, 8));
1209 FI.Inline->Ranges.insert(AddressRange(0x1010, 0x1020));
1214 Inline2.Ranges.insert(AddressRange(0x1012, 0x1014));
1220 Inline3.Ranges.insert(AddressRange(0x1016, 0x1018));
1235 auto LR = GR->lookup(0x1000);
1239 LR = GR->lookup(0x100F);
1244 LR = GR->lookup(0x1010);
1251 LR = GR->lookup(0x1012);
1258 LR = GR->lookup(0x1014);
1264 LR = GR->lookup(0x1016);
1271 LR = GR->lookup(0x1018);
1277 LR = GR->lookup(0x1020);
1295 - Code: 0x00000001
1307 - Code: 0x00000002
1321 - AbbrCode: 0x00000001
1323 - Value: 0x0000000000000001
1324 - Value: 0x0000000000001000
1325 - Value: 0x0000000000002000
1326 - Value: 0x0000000000000004
1327 - AbbrCode: 0x00000002
1329 - Value: 0x000000000000000D
1330 - Value: 0x0000000000001000
1331 - Value: 0x0000000000002000
1332 - AbbrCode: 0x00000000
1355 auto ExpFI = GR->getFunctionInfo(0x1000);
1357 ASSERT_EQ(ExpFI->Range, AddressRange(0x1000, 0x2000));
1373 - Code: 0x00000001
1385 - Code: 0x00000002
1399 - AbbrCode: 0x00000001
1401 - Value: 0x0000000000000001
1402 - Value: 0x0000000000001000
1403 - Value: 0x0000000000001000
1404 - Value: 0x0000000000000004
1405 - AbbrCode: 0x00000002
1407 - Value: 0x000000000000000D
1408 - Value: 0x0000000000001000
1409 - Value: 0x0000000000001000
1410 - AbbrCode: 0x00000000
1433 auto ExpFI = GR->getFunctionInfo(0x1000);
1435 ASSERT_EQ(ExpFI->Range, AddressRange(0x1000, 0x2000));
1455 - Code: 0x00000001
1467 - Code: 0x00000002
1473 - Code: 0x00000003
1483 - Code: 0x00000004
1497 - AbbrCode: 0x00000001
1499 - Value: 0x0000000000000001
1500 - Value: 0x0000000000001000
1501 - Value: 0x0000000000002000
1502 - Value: 0x0000000000000004
1503 - AbbrCode: 0x00000002
1505 - Value: 0x000000000000000D
1506 - AbbrCode: 0x00000003
1508 - Value: 0x0000000000000011
1509 - Value: 0x0000000000001000
1510 - Value: 0x0000000000002000
1511 - AbbrCode: 0x00000004
1513 - Value: 0x0000000000000016
1514 - Value: 0x0000000000000022
1515 - Value: 0x0000000000000001
1516 - AbbrCode: 0x00000000
1517 - AbbrCode: 0x00000000
1518 - AbbrCode: 0x00000000
1541 auto ExpFI = GR->getFunctionInfo(0x1000);
1543 ASSERT_EQ(ExpFI->Range, AddressRange(0x1000, 0x2000));
1572 - Code: 0x00000001
1584 - Code: 0x00000002
1598 - AbbrCode: 0x00000001
1600 - Value: 0x0000000000000001
1601 - Value: 0x0000000000001000
1602 - Value: 0x0000000000001000
1603 - Value: 0x0000000000000004
1604 - AbbrCode: 0x00000002
1606 - Value: 0x000000000000000D
1607 - Value: 0x0000000000001000
1608 - Value: 0x0000000000001000
1609 - AbbrCode: 0x00000002
1611 - Value: 0x0000000000000012
1612 - Value: 0x0000000000000000
1613 - Value: 0x0000000000000100
1614 - AbbrCode: 0x00000002
1616 - Value: 0x0000000000000020
1617 - Value: 0x0000000000000000
1618 - Value: 0x0000000000000040
1619 - AbbrCode: 0x00000000
1630 // Only allow addresses between [0x1000 - 0x2000) to be linked into the
1633 TextRanges.insert(AddressRange(0x1000, 0x2000));
1647 auto ExpFI = GR->getFunctionInfo(0x1000);
1649 ASSERT_EQ(ExpFI->Range, AddressRange(0x1000, 0x2000));
1662 TextRanges.insert(AddressRange(0x1000, 0x2000));
1664 GC.addFunctionInfo(FunctionInfo(0x1500, 0, GC.insertString("symbol")));
1676 auto ExpFI = GR->getFunctionInfo(0x1500);
1678 ASSERT_EQ(ExpFI->Range, AddressRange(0x1500, 0x2000));
1696 - Code: 0x00000001
1710 - Code: 0x00000002
1720 - Code: 0x00000003
1738 - AbbrCode: 0x00000001
1740 - Value: 0x0000000000000001
1741 - Value: 0x0000000000001000
1742 - Value: 0x0000000000001000
1743 - Value: 0x0000000000000004
1744 - Value: 0x0000000000000000
1745 - AbbrCode: 0x00000002
1747 - Value: 0x000000000000000D
1748 - Value: 0x0000000000001000
1749 - Value: 0x0000000000001000
1750 - AbbrCode: 0x00000003
1752 - Value: 0x0000000000000012
1753 - Value: 0x0000000000001100
1754 - Value: 0x0000000000000100
1755 - Value: 0x0000000000000001
1756 - Value: 0x000000000000000A
1757 - AbbrCode: 0x00000000
1758 - AbbrCode: 0x00000000
1768 StandardOpcodeLengths: [ 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1 ]
1774 ModTime: 0
1775 Length: 0
1778 ModTime: 0
1779 Length: 0
1846 auto ExpFI = GR->getFunctionInfo(0x1000);
1848 ASSERT_EQ(ExpFI->Range, AddressRange(0x1000, 0x2000));
1855 auto LR = GR->lookup(0x1000);
1859 LR = GR->lookup(0x1100-1);
1864 LR = GR->lookup(0x1100);
1869 LR = GR->lookup(0x1180-1);
1874 LR = GR->lookup(0x1180);
1879 LR = GR->lookup(0x1200-1);
1884 LR = GR->lookup(0x1200);
1906 // 0x0000000b: DW_TAG_compile_unit
1908 // DW_AT_low_pc (0x0000000000001000)
1909 // DW_AT_high_pc (0x0000000000002000)
1911 // DW_AT_stmt_list (0x00000000)
1913 // 0x00000022: DW_TAG_subprogram
1915 // DW_AT_low_pc (0x0000000000001000)
1916 // DW_AT_high_pc (0x0000000000002000)
1918 // 0x00000033: DW_TAG_subprogram
1920 // DW_AT_low_pc (0x0000000000002000)
1921 // DW_AT_high_pc (0x0000000000003000)
1925 // 0x00000046: DW_TAG_subprogram
1927 // DW_AT_low_pc (0x0000000000003000)
1928 // DW_AT_high_pc (0x0000000000004000)
1930 // 0x00000057: DW_TAG_subprogram
1932 // DW_AT_low_pc (0x0000000000004000)
1933 // DW_AT_high_pc (0x0000000000005000)
1937 // 0x0000006a: NULL
1949 - Code: 0x00000001
1963 - Code: 0x00000002
1973 - Code: 0x00000003
1991 - AbbrCode: 0x00000001
1993 - Value: 0x0000000000000001
1994 - Value: 0x0000000000001000
1995 - Value: 0x0000000000001000
1996 - Value: 0x0000000000000004
1997 - Value: 0x0000000000000000
1998 - AbbrCode: 0x00000002
2000 - Value: 0x000000000000000D
2001 - Value: 0x0000000000001000
2002 - Value: 0x0000000000001000
2003 - AbbrCode: 0x00000003
2005 - Value: 0x000000000000001B
2006 - Value: 0x0000000000002000
2007 - Value: 0x0000000000001000
2008 - Value: 0x0000000000000001
2009 - Value: 0x0000000000000014
2010 - AbbrCode: 0x00000002
2012 - Value: 0x000000000000002B
2013 - Value: 0x0000000000003000
2014 - Value: 0x0000000000001000
2015 - AbbrCode: 0x00000003
2017 - Value: 0x000000000000003C
2018 - Value: 0x0000000000004000
2019 - Value: 0x0000000000001000
2020 - Value: 0x0000000000000001
2021 - Value: 0x0000000000000028
2022 - AbbrCode: 0x00000000
2032 StandardOpcodeLengths: [ 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1 ]
2038 ModTime: 0
2039 Length: 0
2047 Data: 0
2049 Data: 0
2054 Data: 0
2056 Data: 0
2062 Data: 0
2069 Data: 0
2071 Data: 0
2076 Data: 0
2078 Data: 0
2084 Data: 0
2108 auto ExpFI = GR->getFunctionInfo(0x1000);
2110 ASSERT_EQ(ExpFI->Range, AddressRange(0x1000, 0x2000));
2117 EXPECT_EQ(ExpFI->OptLineTable->first()->Addr, 0x1000u);
2120 ExpFI = GR->getFunctionInfo(0x2000);
2122 ASSERT_EQ(ExpFI->Range, AddressRange(0x2000, 0x3000));
2129 EXPECT_EQ(ExpFI->OptLineTable->first()->Addr, 0x2000u);
2132 ExpFI = GR->getFunctionInfo(0x3000);
2134 ASSERT_EQ(ExpFI->Range, AddressRange(0x3000, 0x4000));
2140 ExpFI = GR->getFunctionInfo(0x4000);
2142 ASSERT_EQ(ExpFI->Range, AddressRange(0x4000, 0x5000));
2149 EXPECT_EQ(ExpFI->OptLineTable->first()->Addr, 0x4000u);
2164 // 0x0000000b: DW_TAG_compile_unit
2166 // DW_AT_low_pc (0x0000000000001000)
2167 // DW_AT_high_pc (0x0000000000002000)
2170 // 0x0000001a: DW_TAG_subprogram
2172 // DW_AT_low_pc (0x0000000000001000)
2173 // DW_AT_high_pc (0x0000000000002000)
2175 // 0x00000027: DW_TAG_subprogram
2177 // DW_AT_low_pc (0x00000000ffffffff)
2178 // DW_AT_high_pc (0x0000000100000000)
2180 // 0x00000034: DW_TAG_subprogram
2182 // DW_AT_low_pc (0x0000000000003000)
2183 // DW_AT_high_pc (0x0000000000003000)
2185 // 0x00000041: DW_TAG_subprogram
2187 // DW_AT_low_pc (0x0000000000004000)
2188 // DW_AT_high_pc (0x0000000000003fff)
2190 // 0x0000004e: NULL
2202 - Code: 0x00000001
2214 - Code: 0x00000002
2224 - Code: 0x00000003
2238 - AbbrCode: 0x00000001
2240 - Value: 0x0000000000000001
2241 - Value: 0x0000000000001000
2242 - Value: 0x0000000000001000
2243 - Value: 0x0000000000000004
2244 - AbbrCode: 0x00000002
2246 - Value: 0x000000000000000D
2247 - Value: 0x0000000000001000
2248 - Value: 0x0000000000001000
2249 - AbbrCode: 0x00000002
2251 - Value: 0x0000000000000012
2252 - Value: 0x00000000FFFFFFFF
2253 - Value: 0x0000000000000001
2254 - AbbrCode: 0x00000003
2256 - Value: 0x000000000000001C
2257 - Value: 0x0000000000003000
2258 - Value: 0x0000000000003000
2259 - AbbrCode: 0x00000003
2261 - Value: 0x0000000000000026
2262 - Value: 0x0000000000004000
2263 - Value: 0x0000000000003FFF
2264 - AbbrCode: 0x00000000
2288 auto ExpFI = GR->getFunctionInfo(0x1000);
2290 ASSERT_EQ(ExpFI->Range, AddressRange(0x1000, 0x2000));
2305 // 0x0000000b: DW_TAG_compile_unit
2307 // DW_AT_low_pc (0x0000000000001000)
2308 // DW_AT_high_pc (0x0000000000002000)
2311 // 0x0000001e: DW_TAG_subprogram
2313 // DW_AT_low_pc (0x0000000000001000)
2314 // DW_AT_high_pc (0x0000000000002000)
2316 // 0x0000002f: DW_TAG_subprogram
2318 // DW_AT_low_pc (0xffffffffffffffff)
2319 // DW_AT_high_pc (0x0000000000000000)
2321 // 0x00000040: DW_TAG_subprogram
2323 // DW_AT_low_pc (0x0000000000003000)
2324 // DW_AT_high_pc (0x0000000000003000)
2326 // 0x00000055: DW_TAG_subprogram
2328 // DW_AT_low_pc (0x0000000000004000)
2329 // DW_AT_high_pc (0x0000000000003fff)
2331 // 0x0000006a: NULL
2343 - Code: 0x00000001
2355 - Code: 0x00000002
2365 - Code: 0x00000003
2379 - AbbrCode: 0x00000001
2381 - Value: 0x0000000000000001
2382 - Value: 0x0000000000001000
2383 - Value: 0x0000000000001000
2384 - Value: 0x0000000000000004
2385 - AbbrCode: 0x00000002
2387 - Value: 0x000000000000000D
2388 - Value: 0x0000000000001000
2389 - Value: 0x0000000000001000
2390 - AbbrCode: 0x00000002
2392 - Value: 0x0000000000000012
2393 - Value: 0xFFFFFFFFFFFFFFFF
2394 - Value: 0x0000000000000001
2395 - AbbrCode: 0x00000003
2397 - Value: 0x000000000000001C
2398 - Value: 0x0000000000003000
2399 - Value: 0x0000000000003000
2400 - AbbrCode: 0x00000003
2402 - Value: 0x0000000000000026
2403 - Value: 0x0000000000004000
2404 - Value: 0x0000000000003FFF
2405 - AbbrCode: 0x00000000
2429 auto ExpFI = GR->getFunctionInfo(0x1000);
2431 ASSERT_EQ(ExpFI->Range, AddressRange(0x1000, 0x2000));
2443 constexpr uint64_t BaseAddr = 0x1000;
2447 GC.addFunctionInfo(FunctionInfo(BaseAddr, 0, Func1Name));
2448 GC.addFunctionInfo(FunctionInfo(BaseAddr, 0, Func2Name));
2466 FunctionInfo FI(FuncAddr, 0x30, GC.insertString(FuncName));
2470 FI.OptLineTable->push(LineEntry(FuncAddr+0x00, SourceFileIdx, 5));
2471 FI.OptLineTable->push(LineEntry(FuncAddr+0x10, HeaderFileIdx, 10));
2472 FI.OptLineTable->push(LineEntry(FuncAddr+0x12, HeaderFileIdx, 20));
2473 FI.OptLineTable->push(LineEntry(FuncAddr+0x14, HeaderFileIdx, 11));
2474 FI.OptLineTable->push(LineEntry(FuncAddr+0x16, HeaderFileIdx, 30));
2475 FI.OptLineTable->push(LineEntry(FuncAddr+0x18, HeaderFileIdx, 12));
2476 FI.OptLineTable->push(LineEntry(FuncAddr+0x20, SourceFileIdx, 8));
2486 FI.Inline->Ranges.insert(AddressRange(FuncAddr + 0x10, FuncAddr + 0x20));
2491 Inline2.Ranges.insert(AddressRange(FuncAddr + 0x12, FuncAddr + 0x14));
2497 Inline3.Ranges.insert(AddressRange(FuncAddr + 0x16, FuncAddr + 0x18));
2526 GC.setBaseAddress(0);
2527 AddFunctionInfo(GC, "main", 0x1000, "/tmp/main.c", "/tmp/main.h");
2528 AddFunctionInfo(GC, "foo", 0x2000, "/tmp/foo.c", "/tmp/foo.h");
2529 AddFunctionInfo(GC, "bar", 0x3000, "/tmp/bar.c", "/tmp/bar.h");
2530 AddFunctionInfo(GC, "baz", 0x4000, "/tmp/baz.c", "/tmp/baz.h");
2541 // GC1000 and GR1000 are for [0x1000-0x1030)
2542 // GC2000 and GR2000 are for [0x2000-0x2030)
2543 // GC3000 and GR3000 are for [0x3000-0x3030)
2544 // GC4000 and GR4000 are for [0x4000-0x4030)
2548 size_t FuncIdx = 0;
2558 ASSERT_EQ(FuncIdx, (size_t)0);
2596 // Verify that all lookups match the range [0x1000-0x1030) when doing lookups
2599 for (uint64_t Addr = 0x1000; Addr < 0x1030; ++Addr) {
2609 ASSERT_THAT_EXPECTED(GR1000->lookup(0x2000), Failed());
2610 ASSERT_THAT_EXPECTED(GR1000->lookup(0x3000), Failed());
2611 ASSERT_THAT_EXPECTED(GR1000->lookup(0x4000), Failed());
2614 // Verify that all lookups match the range [0x2000-0x2030) when doing lookups
2617 for (uint64_t Addr = 0x2000; Addr < 0x2030; ++Addr) {
2627 ASSERT_THAT_EXPECTED(GR2000->lookup(0x1000), Failed());
2628 ASSERT_THAT_EXPECTED(GR2000->lookup(0x3000), Failed());
2629 ASSERT_THAT_EXPECTED(GR2000->lookup(0x4000), Failed());
2633 // Verify that all lookups match the range [0x3000-0x3030) when doing lookups
2636 for (uint64_t Addr = 0x3000; Addr < 0x3030; ++Addr) {
2646 ASSERT_THAT_EXPECTED(GR3000->lookup(0x1000), Failed());
2647 ASSERT_THAT_EXPECTED(GR3000->lookup(0x2000), Failed());
2648 ASSERT_THAT_EXPECTED(GR3000->lookup(0x4000), Failed());
2651 // Verify that all lookups match the range [0x4000-0x4030) when doing lookups
2654 for (uint64_t Addr = 0x4000; Addr < 0x4030; ++Addr) {
2658 // Lookup in the GsymReader for that contains 0x4000
2665 ASSERT_THAT_EXPECTED(GR4000->lookup(0x1000), Failed());
2666 ASSERT_THAT_EXPECTED(GR4000->lookup(0x2000), Failed());
2667 ASSERT_THAT_EXPECTED(GR4000->lookup(0x3000), Failed());
2678 AddFunctionInfo(GC, "main", 0x1000, "/tmp/main.c", "/tmp/main.h");
2679 AddFunctionInfo(GC, "foo", 0x2000, "/tmp/foo.c", "/tmp/foo.h");
2680 AddFunctionInfo(GC, "bar", 0x3000, "/tmp/bar.c", "/tmp/bar.h");
2681 AddFunctionInfo(GC, "baz", 0x4000, "/tmp/baz.c", "/tmp/baz.h");
2692 // GC1000 and GR1000 are for [0x1000-0x1030)
2693 // GC2000 and GR2000 are for [0x2000-0x2030)
2694 // GC3000 and GR3000 are for [0x3000-0x3030)
2695 // GC4000 and GR4000 are for [0x4000-0x4030)
2699 size_t FuncIdx = 0;
2709 ASSERT_EQ(FuncIdx, (size_t)0);
2747 // Verify that all lookups match the range [0x1000-0x1030) when doing lookups
2750 for (uint64_t Addr = 0x1000; Addr < 0x1030; ++Addr) {
2760 ASSERT_THAT_EXPECTED(GR1000->lookup(0x2000), Failed());
2761 ASSERT_THAT_EXPECTED(GR1000->lookup(0x3000), Failed());
2762 ASSERT_THAT_EXPECTED(GR1000->lookup(0x4000), Failed());
2765 // Verify that all lookups match the range [0x2000-0x2030) when doing lookups
2768 for (uint64_t Addr = 0x2000; Addr < 0x2030; ++Addr) {
2778 ASSERT_THAT_EXPECTED(GR2000->lookup(0x1000), Failed());
2779 ASSERT_THAT_EXPECTED(GR2000->lookup(0x3000), Failed());
2780 ASSERT_THAT_EXPECTED(GR2000->lookup(0x4000), Failed());
2784 // Verify that all lookups match the range [0x3000-0x3030) when doing lookups
2787 for (uint64_t Addr = 0x3000; Addr < 0x3030; ++Addr) {
2797 ASSERT_THAT_EXPECTED(GR3000->lookup(0x1000), Failed());
2798 ASSERT_THAT_EXPECTED(GR3000->lookup(0x2000), Failed());
2799 ASSERT_THAT_EXPECTED(GR3000->lookup(0x4000), Failed());
2802 // Verify that all lookups match the range [0x4000-0x4030) when doing lookups
2805 for (uint64_t Addr = 0x4000; Addr < 0x4030; ++Addr) {
2809 // Lookup in the GsymReader for that contains 0x4000
2816 ASSERT_THAT_EXPECTED(GR4000->lookup(0x1000), Failed());
2817 ASSERT_THAT_EXPECTED(GR4000->lookup(0x2000), Failed());
2818 ASSERT_THAT_EXPECTED(GR4000->lookup(0x3000), Failed());
2830 // 0x0000000b: DW_TAG_compile_unit
2833 // DW_AT_stmt_list (0x00000000)
2835 // 0x00000015: DW_TAG_subprogram
2837 // DW_AT_low_pc (0x0000000000001000)
2838 // DW_AT_high_pc (0x0000000000002000)
2840 // 0x0000002a: DW_TAG_inlined_subroutine
2842 // DW_AT_low_pc (0x0000000000000fff)
2843 // DW_AT_high_pc (0x0000000000001001)
2847 // 0x00000041: DW_TAG_inlined_subroutine
2849 // DW_AT_low_pc (0x0000000000001010)
2850 // DW_AT_high_pc (0x0000000000001100)
2854 // 0x00000058: DW_TAG_inlined_subroutine
2856 // DW_AT_low_pc (0x0000000000001000)
2857 // DW_AT_high_pc (0x0000000000001100)
2861 // 0x0000006f: DW_TAG_inlined_subroutine
2863 // DW_AT_low_pc (0x0000000000001020)
2864 // DW_AT_high_pc (0x0000000000001030)
2868 // 0x00000086: NULL
2870 // 0x00000087: NULL
2872 // 0x00000088: NULL
2884 - ID: 0
2886 - Code: 0x1
2896 - Code: 0x2
2906 - Code: 0x3
2920 - Code: 0x4
2935 - Length: 0x85
2937 AbbrevTableID: 0
2938 AbbrOffset: 0x0
2941 - AbbrCode: 0x1
2943 - Value: 0x1
2944 - Value: 0x2
2945 - Value: 0x0
2946 - AbbrCode: 0x2
2948 - Value: 0xF
2949 - Value: 0x1000
2950 - Value: 0x2000
2951 - AbbrCode: 0x3
2953 - Value: 0x13
2954 - Value: 0xFFF
2955 - Value: 0x1001
2956 - Value: 0x1
2957 - Value: 0xA
2958 - AbbrCode: 0x4
2960 - Value: 0x1C
2961 - Value: 0x1010
2962 - Value: 0x1100
2963 - Value: 0x1
2964 - Value: 0xB
2965 - AbbrCode: 0x3
2967 - Value: 0x23
2968 - Value: 0x1000
2969 - Value: 0x1100
2970 - Value: 0x1
2971 - Value: 0xC
2972 - AbbrCode: 0x3
2974 - Value: 0x2C
2975 - Value: 0x1020
2976 - Value: 0x1030
2977 - Value: 0x1
2978 - Value: 0xD
2979 - AbbrCode: 0x0
2980 - AbbrCode: 0x0
2981 - AbbrCode: 0x0
2991 StandardOpcodeLengths: [ 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1 ]
2997 ModTime: 0
2998 Length: 0
3006 Data: 0
3008 Data: 0
3013 Data: 0
3015 Data: 0
3020 Data: 0
3022 Data: 0
3027 Data: 0
3029 Data: 0
3034 Data: 0
3036 Data: 0
3041 Data: 0
3045 Data: 0
3069 auto ExpFI = GR->getFunctionInfo(0x1000);
3071 ASSERT_EQ(ExpFI->Range, AddressRange(0x1000, 0x2000));
3077 "error: inlined function DIE at 0x0000002a has a range [0x0000000000000fff "
3078 "- 0x0000000000001001) that isn't contained in any parent address ranges, "
3080 "error: inlined function DIE at 0x00000058 has a range [0x0000000000001000 "
3081 "- 0x0000000000001100) that isn't contained in any parent address ranges, "
3095 EXPECT_EQ(ExpFI->Inline->CallFile, 0u);
3096 EXPECT_EQ(ExpFI->Inline->CallLine, 0u);
3103 InlineInfo &Inline1 = ExpFI->Inline->Children[0];
3114 InlineInfo &Inline2 = Inline1.Children[0];
3119 EXPECT_EQ(Inline2.Children.size(), 0u);
3130 // 0x0000000b: DW_TAG_compile_unit
3133 // DW_AT_stmt_list (0x00000000)
3135 // 0x00000015: DW_TAG_subprogram
3137 // DW_AT_low_pc (0x0000000000001000)
3138 // DW_AT_high_pc (0x0000000000001050)
3140 // 0x0000002a: DW_TAG_inlined_subroutine
3142 // DW_AT_low_pc (0x0000000000001100)
3143 // DW_AT_high_pc (0x0000000000001200)
3147 // 0x00000047: NULL
3149 // 0x00000048: NULL
3158 - ID: 0
3160 - Code: 0x1
3170 - Code: 0x2
3180 - Code: 0x3
3195 - Length: 0x45
3197 AbbrevTableID: 0
3198 AbbrOffset: 0x0
3201 - AbbrCode: 0x1
3203 - Value: 0x1
3204 - Value: 0x2
3205 - Value: 0x0
3206 - AbbrCode: 0x2
3208 - Value: 0xF
3209 - Value: 0x1000
3210 - Value: 0x1050
3211 - AbbrCode: 0x3
3213 - Value: 0x13
3214 - Value: 0x1100
3215 - Value: 0x1200
3216 - Value: 0x1
3217 - Value: 0xB
3218 - AbbrCode: 0x0
3219 - AbbrCode: 0x0
3229 StandardOpcodeLengths: [ 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1 ]
3235 ModTime: 0
3236 Length: 0
3244 Data: 0
3246 Data: 0
3251 Data: 0
3253 Data: 0
3258 Data: 0
3260 Data: 0
3265 Data: 0
3267 Data: 0
3273 Data: 0
3297 auto ExpFI = GR->getFunctionInfo(0x1000);
3299 ASSERT_EQ(ExpFI->Range, AddressRange(0x1000, 0x1050));
3305 "error: inlined function DIE at 0x0000002a has a range [0x0000000000001100"
3306 " - 0x0000000000001200) that isn't contained in any parent address ranges,"
3331 // 0x0000000b: DW_TAG_compile_unit
3334 // DW_AT_stmt_list (0x00000000)
3336 // 0x00000015: DW_TAG_subprogram
3338 // DW_AT_low_pc (0x0000000000001000)
3339 // DW_AT_high_pc (0x0000000000001050)
3341 // 0x0000002a: DW_TAG_subprogram
3343 // DW_AT_low_pc (0x0000000000002000)
3344 // DW_AT_high_pc (0x0000000000002050)
3346 // 0x0000003f: NULL
3347 // 0x00000040: Compile Unit: length = 0x0000003c, format = DWARF32, version = 0x0004, abbr_offset = 0x0000, addr_size = 0x08 (next unit at 0x00000080)
3349 // 0x0000004b: DW_TAG_compile_unit
3352 // DW_AT_stmt_list (0x00000043)
3354 // 0x00000055: DW_TAG_subprogram
3356 // DW_AT_low_pc (0x0000000000001000)
3357 // DW_AT_high_pc (0x0000000000001050)
3359 // 0x0000006a: DW_TAG_subprogram
3361 // DW_AT_low_pc (0x0000000000002000)
3362 // DW_AT_high_pc (0x0000000000002050)
3364 // 0x0000007f: NULL
3373 - ID: 0
3375 - Code: 0x1
3385 - Code: 0x2
3396 - Length: 0x3C
3398 AbbrevTableID: 0
3399 AbbrOffset: 0x0
3402 - AbbrCode: 0x1
3404 - Value: 0x1
3405 - Value: 0x2
3406 - Value: 0x0
3407 - AbbrCode: 0x2
3409 - Value: 0xF
3410 - Value: 0x1000
3411 - Value: 0x1050
3412 - AbbrCode: 0x2
3414 - Value: 0x13
3415 - Value: 0x2000
3416 - Value: 0x2050
3417 - AbbrCode: 0x0
3418 - Length: 0x3C
3420 AbbrevTableID: 0
3421 AbbrOffset: 0x0
3424 - AbbrCode: 0x1
3426 - Value: 0x1
3427 - Value: 0x2
3428 - Value: 0x43
3429 - AbbrCode: 0x2
3431 - Value: 0xF
3432 - Value: 0x1000
3433 - Value: 0x1050
3434 - AbbrCode: 0x2
3436 - Value: 0x13
3437 - Value: 0x2000
3438 - Value: 0x2050
3439 - AbbrCode: 0x0
3449 StandardOpcodeLengths: [ 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1 ]
3455 ModTime: 0
3456 Length: 0
3464 Data: 0
3466 Data: 0
3471 Data: 0
3475 Data: 0
3484 StandardOpcodeLengths: [ 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1 ]
3490 ModTime: 0
3491 Length: 0
3499 Data: 0
3501 Data: 0
3506 Data: 0
3510 Data: 0
3535 auto ExpFI = GR->getFunctionInfo(0x1000);
3537 ASSERT_EQ(ExpFI->Range, AddressRange(0x1000, 0x1050));
3544 auto ExpFI2 = GR->getFunctionInfo(0x2000);
3546 ASSERT_EQ(ExpFI2->Range, AddressRange(0x2000, 0x2050));
3565 // 0x0000000b: DW_TAG_compile_unit
3568 // DW_AT_stmt_list (0x00000000)
3570 // 0x00000015: DW_TAG_subprogram
3572 // DW_AT_ranges (0x00000000
3573 // [0x0000000000001000, 0x0000000000001050)
3574 // [0x0000000000002000, 0x0000000000002050))
3576 // 0x0000001e: DW_TAG_inlined_subroutine
3578 // DW_AT_ranges (0x00000030
3579 // [0x0000000000001010, 0x0000000000001040)
3580 // [0x0000000000002010, 0x0000000000002040))
3584 // 0x0000002f: DW_TAG_inlined_subroutine
3586 // DW_AT_ranges (0x00000060
3587 // [0x0000000000001015, 0x0000000000001020)
3588 // [0x0000000000002015, 0x0000000000002020))
3592 // 0x00000040: NULL
3594 // 0x00000041: NULL
3596 // 0x00000042: NULL
3606 - ID: 0
3608 - Code: 0x1
3618 - Code: 0x2
3626 - Code: 0x3
3638 - Code: 0x4
3651 - Offset: 0x0
3652 AddrSize: 0x8
3654 - LowOffset: 0x1000
3655 HighOffset: 0x1050
3656 - LowOffset: 0x2000
3657 HighOffset: 0x2050
3658 - Offset: 0x30
3659 AddrSize: 0x8
3661 - LowOffset: 0x1010
3662 HighOffset: 0x1040
3663 - LowOffset: 0x2010
3664 HighOffset: 0x2040
3665 - Offset: 0x60
3666 AddrSize: 0x8
3668 - LowOffset: 0x1015
3669 HighOffset: 0x1020
3670 - LowOffset: 0x2015
3671 HighOffset: 0x2020
3673 - Length: 0x3F
3675 AbbrevTableID: 0
3676 AbbrOffset: 0x0
3679 - AbbrCode: 0x1
3681 - Value: 0x1
3682 - Value: 0x2
3683 - Value: 0x0
3684 - AbbrCode: 0x2
3686 - Value: 0xF
3687 - Value: 0x0
3688 - AbbrCode: 0x3
3690 - Value: 0x13
3691 - Value: 0x30
3692 - Value: 0x1
3693 - Value: 0xB
3694 - AbbrCode: 0x4
3696 - Value: 0x1B
3697 - Value: 0x60
3698 - Value: 0x2
3699 - Value: 0x15
3700 - AbbrCode: 0x0
3701 - AbbrCode: 0x0
3702 - AbbrCode: 0x0
3712 StandardOpcodeLengths: [ 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1 ]
3718 ModTime: 0
3719 Length: 0
3722 ModTime: 0
3723 Length: 0
3731 Data: 0
3733 Data: 0
3740 Data: 0
3742 Data: 0
3747 Data: 0
3749 Data: 0
3756 Data: 0
3760 Data: 0
3767 Data: 0
3769 Data: 0
3775 Data: 0
3780 Data: 0
3782 Data: 0
3790 Data: 0
3815 auto ExpFI = GR->getFunctionInfo(0x1000);
3817 ASSERT_EQ(ExpFI->Range, AddressRange(0x1000, 0x1050));
3824 auto ExpFI2 = GR->getFunctionInfo(0x2000);
3826 ASSERT_EQ(ExpFI2->Range, AddressRange(0x2000, 0x2050));
3845 // 0x0000000b: DW_TAG_compile_unit
3848 // DW_AT_stmt_list (0x00000000)
3850 // 0x00000015: DW_TAG_subprogram
3852 // DW_AT_low_pc (0x0000000000001000)
3853 // DW_AT_high_pc (0x0000000000001050)
3855 // 0x0000002a: DW_TAG_inlined_subroutine
3857 // DW_AT_low_pc (0x0000000000001010)
3858 // DW_AT_high_pc (0x0000000000001010)
3862 // 0x00000047: NULL
3864 // 0x00000048: NULL
3873 - ID: 0
3875 - Code: 0x1
3885 - Code: 0x2
3895 - Code: 0x3
3910 - Length: 0x45
3912 AbbrevTableID: 0
3913 AbbrOffset: 0x0
3916 - AbbrCode: 0x1
3918 - Value: 0x1
3919 - Value: 0x2
3920 - Value: 0x0
3921 - AbbrCode: 0x2
3923 - Value: 0xF
3924 - Value: 0x1000
3925 - Value: 0x1050
3926 - AbbrCode: 0x3
3928 - Value: 0x13
3929 - Value: 0x1010
3930 - Value: 0x1010
3931 - Value: 0x1
3932 - Value: 0xB
3933 - AbbrCode: 0x0
3934 - AbbrCode: 0x0
3944 StandardOpcodeLengths: [ 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1 ]
3950 ModTime: 0
3951 Length: 0
3954 ModTime: 0
3955 Length: 0
3963 Data: 0
3965 Data: 0
3972 Data: 0
3974 Data: 0
3979 Data: 0
3981 Data: 0
3988 Data: 0
3992 Data: 0
4017 auto ExpFI = GR->getFunctionInfo(0x1000);
4019 ASSERT_EQ(ExpFI->Range, AddressRange(0x1000, 0x1050));
4041 // 0x0000000b: DW_TAG_compile_unit
4044 // DW_AT_stmt_list (0x00000000)
4046 // 0x00000015: DW_TAG_subprogram
4049 // DW_AT_low_pc (0x0000000000001000)
4050 // DW_AT_high_pc (0x0000000000001050)
4052 // 0x0000002e: NULL
4062 - ID: 0
4064 - Code: 0x1
4074 - Code: 0x2
4087 - Length: 0x2B
4089 AbbrevTableID: 0
4090 AbbrOffset: 0x0
4093 - AbbrCode: 0x1
4095 - Value: 0x1
4096 - Value: 0x2
4097 - Value: 0x0
4098 - AbbrCode: 0x2
4100 - Value: 0xF
4101 - Value: 0x13
4102 - Value: 0x1000
4103 - Value: 0x1050
4104 - AbbrCode: 0x0
4114 StandardOpcodeLengths: [ 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1 ]
4120 ModTime: 0
4121 Length: 0
4129 Data: 0
4131 Data: 0
4136 Data: 0
4138 Data: 0
4144 Data: 0
4169 auto ExpFI = GR->getFunctionInfo(0x1000);
4171 ASSERT_EQ(ExpFI->Range, AddressRange(0x1000, 0x1050));
4191 // 0x0000000b: DW_TAG_compile_unit
4194 // DW_AT_stmt_list (0x00000000)
4196 // 0x00000015: DW_TAG_subprogram
4198 // DW_AT_low_pc (0x0000000000001000)
4199 // DW_AT_high_pc (0x0000000000001050)
4201 // 0x0000002a: NULL
4203 // The line table has a duplicate entry at 0x1010:
4207 // 0x00001000 10 0 1 0 0 is_stmt
4208 // 0x00001010 11 0 1 0 0 is_stmt
4209 // 0x00001010 12 0 1 0 0 is_stmt
4210 // 0x00001050 13 0 1 0 0 is_stmt end_sequence
4218 - ID: 0
4220 - Code: 0x1
4230 - Code: 0x2
4241 - Length: 0x27
4243 AbbrevTableID: 0
4244 AbbrOffset: 0x0
4247 - AbbrCode: 0x1
4249 - Value: 0x1
4250 - Value: 0x2
4251 - Value: 0x0
4252 - AbbrCode: 0x2
4254 - Value: 0xF
4255 - Value: 0x1000
4256 - Value: 0x1050
4257 - AbbrCode: 0x0
4267 StandardOpcodeLengths: [ 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1 ]
4273 ModTime: 0
4274 Length: 0
4282 Data: 0
4284 Data: 0
4289 Data: 0
4291 Data: 0
4294 Data: 0
4296 Data: 0
4301 Data: 0
4305 Data: 0
4330 auto ExpFI = GR->getFunctionInfo(0x1000);
4332 ASSERT_EQ(ExpFI->Range, AddressRange(0x1000, 0x1050));
4341 // Make sure that when we lookup address 0x1010, that we get the entry that
4343 // 0x1010.
4344 auto LR = GR->lookup(0x1010);
4359 // 0x0000000b: DW_TAG_compile_unit
4362 // DW_AT_stmt_list (0x00000000)
4364 // 0x00000015: DW_TAG_subprogram
4366 // DW_AT_low_pc (0x0000000000001000)
4367 // DW_AT_high_pc (0x0000000000001050)
4369 // 0x0000002a: DW_TAG_inlined_subroutine
4371 // DW_AT_low_pc (0x0000000000001010)
4372 // DW_AT_high_pc (0x0000000000001020)
4373 // DW_AT_call_file (0x0000000a)
4376 // 0x00000047: DW_TAG_inlined_subroutine
4379 // DW_AT_low_pc (0x0000000000001010)
4380 // DW_AT_high_pc (0x0000000000001015)
4384 // 0x00000064: NULL
4386 // 0x00000065: DW_TAG_inlined_subroutine
4388 // DW_AT_low_pc (0x0000000000001020)
4389 // DW_AT_high_pc (0x0000000000001030)
4393 // 0x00000082: DW_TAG_inlined_subroutine
4396 // DW_AT_low_pc (0x0000000000001020)
4397 // DW_AT_high_pc (0x0000000000001025)
4401 // 0x0000009f: NULL
4403 // 0x000000a0: NULL
4405 // 0x000000a1: DW_TAG_subprogram
4409 // DW_AT_low_pc (0x0000000000002000)
4410 // DW_AT_high_pc (0x0000000000002050)
4412 // 0x000000b8: DW_TAG_subprogram
4414 // DW_AT_decl_file (0x0a)
4416 // DW_AT_low_pc (0x0000000000003000)
4417 // DW_AT_high_pc (0x0000000000003050)
4419 // 0x000000cf: NULL
4421 // The table looks has an entry at address 0x0000000000001010 that has an
4426 // 0x00001000 10 0 1 0 0 is_stmt
4427 // 0x00001010 11 0 10 0 0 is_stmt
4428 // 0x00001020 11 0 1 0 0 is_stmt
4429 // 0x00001030 12 0 1 0 0 is_stmt
4430 // 0x00001050 12 0 1 0 0 is_stmt end_sequence
4444 - ID: 0
4446 - Code: 0x1
4456 - Code: 0x2
4466 - Code: 0x3
4480 - Code: 0x4
4494 - Code: 0x5
4509 - Length: 0xCC
4511 AbbrevTableID: 0
4512 AbbrOffset: 0x0
4515 - AbbrCode: 0x1
4517 - Value: 0x1
4518 - Value: 0x2
4519 - Value: 0x0
4520 - AbbrCode: 0x2
4522 - Value: 0xF
4523 - Value: 0x1000
4524 - Value: 0x1050
4525 - AbbrCode: 0x3
4527 - Value: 0x13
4528 - Value: 0x1010
4529 - Value: 0x1020
4530 - Value: 0xA
4531 - Value: 0xB
4532 - AbbrCode: 0x4
4534 - Value: 0x31
4535 - Value: 0x1010
4536 - Value: 0x1015
4537 - Value: 0x1
4538 - Value: 0xC
4539 - AbbrCode: 0x0
4540 - AbbrCode: 0x3
4542 - Value: 0x5D
4543 - Value: 0x1020
4544 - Value: 0x1030
4545 - Value: 0x1
4546 - Value: 0xD
4547 - AbbrCode: 0x4
4549 - Value: 0x79
4550 - Value: 0x1020
4551 - Value: 0x1025
4552 - Value: 0x1
4553 - Value: 0xE
4554 - AbbrCode: 0x0
4555 - AbbrCode: 0x0
4556 - AbbrCode: 0x5
4558 - Value: 0xA3
4559 - Value: 0x1
4560 - Value: 0x14
4561 - Value: 0x2000
4562 - Value: 0x2050
4563 - AbbrCode: 0x5
4565 - Value: 0xBD
4566 - Value: 0xA
4567 - Value: 0x14
4568 - Value: 0x3000
4569 - Value: 0x3050
4570 - AbbrCode: 0x0
4580 StandardOpcodeLengths: [ 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1 ]
4586 ModTime: 0
4587 Length: 0
4595 Data: 0
4597 Data: 0
4604 Data: 0
4606 Data: 0
4612 Data: 0
4617 Data: 0
4619 Data: 0
4625 Data: 0
4650 auto ExpFI = GR->getFunctionInfo(0x1000);
4652 ASSERT_EQ(ExpFI->Range, AddressRange(0x1000, 0x1050));
4658 // the invalid file index whose address is 0x0000000000001010.
4665 StringRef InlineName = GR->getString(ExpFI->Inline->Children[0].Name);
4668 ExpFI = GR->getFunctionInfo(0x0000000000002000);
4670 ASSERT_EQ(ExpFI->Range, AddressRange(0x2000, 0x2050));
4679 ExpFI = GR->getFunctionInfo(0x0000000000003000);
4681 ASSERT_EQ(ExpFI->Range, AddressRange(0x3000, 0x3050));
4692 "error: function DIE at 0x00000015 has a line entry with invalid DWARF "
4694 "error: inlined function DIE at 0x0000002a has an invalid file index 10 "
4697 "error: function DIE at 0x000000b8 has an invalid file index 10 in its "
4721 // overlapping ranges and ensure that any lookups between 0x1000 and 0x104f
4722 // match "foo", and any ranges between 0x1050 and 0x1fff match "bar".
4724 // 0x0000000b: DW_TAG_compile_unit
4727 // DW_AT_stmt_list (0x00000000)
4729 // 0x00000015: DW_TAG_subprogram
4731 // DW_AT_low_pc (0x0000000000001000)
4732 // DW_AT_high_pc (0x0000000000001050)
4734 // 0x0000002a: DW_TAG_subprogram
4736 // DW_AT_low_pc (0x0000000000001000)
4737 // DW_AT_high_pc (0x0000000000001100)
4739 // 0x0000003f: NULL
4748 - ID: 0
4750 - Code: 0x1
4760 - Code: 0x2
4771 - Length: 0x3C
4773 AbbrevTableID: 0
4774 AbbrOffset: 0x0
4777 - AbbrCode: 0x1
4779 - Value: 0x1
4780 - Value: 0x2
4781 - Value: 0x0
4782 - AbbrCode: 0x2
4784 - Value: 0xF
4785 - Value: 0x1000
4786 - Value: 0x1050
4787 - AbbrCode: 0x2
4789 - Value: 0x13
4790 - Value: 0x1000
4791 - Value: 0x1100
4792 - AbbrCode: 0x0
4802 StandardOpcodeLengths: [ 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1 ]
4808 ModTime: 0
4809 Length: 0
4817 Data: 0
4819 Data: 0
4824 Data: 0
4826 Data: 0
4829 Data: 0
4831 Data: 0
4836 Data: 0
4840 Data: 0
4865 for (uint64_t Addr = 0x1000; Addr < 0x1050; ++Addr) {
4868 ASSERT_EQ(ExpFI->Range, AddressRange(0x1000, 0x1050));
4874 for (uint64_t Addr = 0x1050; Addr < 0x1100; ++Addr) {
4877 ASSERT_EQ(ExpFI->Range, AddressRange(0x1000, 0x1100));
4895 "@ 0x00000068: [0x0000000000001000 - 0x0000000000001050) \"foo\"",
4896 "@ 0x00000088: [0x0000000000001000 - 0x0000000000001100) \"bar\""};