Lines Matching +full:1 +full:- +full:d
1 //===-- SourcePrinter.cpp - source interleaving utilities ----------------===//
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
53 #pragma pack(push, 1)
69 Header.Version = 1; in B()
71 Header.StrOff = offsetof(B, Strings) - sizeof(Header); in B()
84 {16, offsetof(B::S, File1), offsetof(B::S, Line1), LC(7, 1)},
89 BTF::SecLineInfo Sec = {offsetof(B::S, Bar), 1};
90 BTF::BPFLineInfo Lines[1] = {
98 Header.Version = 1; in E()
100 Header.LineInfoOff = offsetof(E, Lines) - sizeof(Header); in E()
127 - Name: foo in makeObj()
130 - Name: bar in makeObj()
136 - Name: .BTF in makeObj()
143 - Name: .BTF.ext in makeObj()
170 const BTF::BPFLineInfo *I1 = BTF.findLineInfo({16, 1}); in TEST()
172 EXPECT_EQ(I1->getLine(), 7u); in TEST()
173 EXPECT_EQ(I1->getCol(), 1u); in TEST()
174 EXPECT_EQ(BTF.findString(I1->FileNameOff), "a.c"); in TEST()
175 EXPECT_EQ(BTF.findString(I1->LineOff), "first line"); in TEST()
177 const BTF::BPFLineInfo *I2 = BTF.findLineInfo({32, 1}); in TEST()
179 EXPECT_EQ(I2->getLine(), 14u); in TEST()
180 EXPECT_EQ(I2->getCol(), 5u); in TEST()
181 EXPECT_EQ(BTF.findString(I2->FileNameOff), "a.c"); in TEST()
182 EXPECT_EQ(BTF.findString(I2->LineOff), "second line"); in TEST()
186 EXPECT_EQ(I3->getLine(), 42u); in TEST()
187 EXPECT_EQ(I3->getCol(), 4u); in TEST()
188 EXPECT_EQ(BTF.findString(I3->FileNameOff), "b.c"); in TEST()
189 EXPECT_EQ(BTF.findString(I3->LineOff), "first line"); in TEST()
192 EXPECT_FALSE(BTF.findLineInfo({24, 1})); in TEST()
201 // "foo" is section #1, corrupting it's name offset will make impossible in TEST()
207 EXPECT_FALSE(BTF.findLineInfo({16, 1})); in TEST()
241 // Cut-off string section by one byte. in TEST()
243 offsetof(MockData1::B, Strings) + sizeof(MockData1::B::S) - 1; in TEST()
246 // Cut-off header. in TEST()
276 // Cut-off header before HdrLen. in TEST()
280 // Cut-off header before LineInfoLen. in TEST()
284 // Cut-off line-info section somewhere in the middle. in TEST()
295 Mock2.Ext.Lines.LineRecSize = sizeof(Mock2.Ext.Lines.Foo.Lines[0]) + 1; in TEST()
310 Mock1.BTFSectionLen = -1; in TEST()
314 Mock2.ExtSectionLen = -1; in TEST()
328 EXPECT_TRUE(BTF.findLineInfo({16, 1})); in TEST()
336 EXPECT_TRUE(BTF.findLineInfo({16, 1})); in TEST()
346 DILineInfo I1 = Ctx->getLineInfoForAddress({16, 1}); in TEST()
348 EXPECT_EQ(I1.Column, 1u); in TEST()
352 DILineInfo I2 = Ctx->getLineInfoForAddress({24, 1}); in TEST()
386 Strings.append("\0", 1); in addString()
409 LastRelocSecIdx = -1; in reset()
411 LastLineSecIdx = -1; in reset()
416 if (LastRelocSecIdx == -1) in finishRelocSec()
421 SecInfo->NumFieldReloc = NumRelocs; in finishRelocSec()
422 LastRelocSecIdx = -1; in finishRelocSec()
427 if (LastLineSecIdx == -1) in finishLineSec()
431 SecInfo->NumLineInfo = NumLines; in finishLineSec()
433 LastLineSecIdx = -1; in finishLineSec()
464 BTFHeader.Version = 1; in makeObj()
478 ExtHeader.Version = 1; in makeObj()
506 - Name: foo in makeObj()
509 - Name: bar in makeObj()
512 - Name: .BTF in makeObj()
517 - Name: .BTF.ext in makeObj()
529 MockData2 D; in TEST() local
530 D.addType({D.addString("1"), mkInfo(BTF::BTF_KIND_INT), {4}}); in TEST()
531 D.addTail((uint32_t)0); in TEST()
532 D.addType({D.addString("2"), mkInfo(BTF::BTF_KIND_PTR), {1}}); in TEST()
533 D.addType({D.addString("3"), mkInfo(BTF::BTF_KIND_ARRAY), {0}}); in TEST()
534 D.addTail(BTF::BTFArray({1, 1, 2})); in TEST()
535 D.addType({D.addString("4"), mkInfo(BTF::BTF_KIND_STRUCT) | 2, {8}}); in TEST()
536 D.addTail(BTF::BTFMember({D.addString("a"), 1, 0})); in TEST()
537 D.addTail(BTF::BTFMember({D.addString("b"), 1, 0})); in TEST()
538 D.addType({D.addString("5"), mkInfo(BTF::BTF_KIND_UNION) | 3, {8}}); in TEST()
539 D.addTail(BTF::BTFMember({D.addString("a"), 1, 0})); in TEST()
540 D.addTail(BTF::BTFMember({D.addString("b"), 1, 0})); in TEST()
541 D.addTail(BTF::BTFMember({D.addString("c"), 1, 0})); in TEST()
542 D.addType({D.addString("6"), mkInfo(BTF::BTF_KIND_ENUM) | 2, {4}}); in TEST()
543 D.addTail(BTF::BTFEnum({D.addString("U"), 1})); in TEST()
544 D.addTail(BTF::BTFEnum({D.addString("V"), 2})); in TEST()
545 D.addType({D.addString("7"), mkInfo(BTF::BTF_KIND_ENUM64) | 1, {4}}); in TEST()
546 D.addTail(BTF::BTFEnum64({D.addString("W"), 0, 1})); in TEST()
547 D.addType( in TEST()
548 {D.addString("8"), BTF::FWD_UNION_FLAG | mkInfo(BTF::BTF_KIND_FWD), {0}}); in TEST()
549 D.addType({D.addString("9"), mkInfo(BTF::BTF_KIND_TYPEDEF), {1}}); in TEST()
550 D.addType({D.addString("10"), mkInfo(BTF::BTF_KIND_VOLATILE), {1}}); in TEST()
551 D.addType({D.addString("11"), mkInfo(BTF::BTF_KIND_CONST), {1}}); in TEST()
552 D.addType({D.addString("12"), mkInfo(BTF::BTF_KIND_RESTRICT), {1}}); in TEST()
553 D.addType({D.addString("13"), mkInfo(BTF::BTF_KIND_FUNC_PROTO) | 1, {1}}); in TEST()
554 D.addTail(BTF::BTFParam({D.addString("P"), 2})); in TEST()
555 D.addType({D.addString("14"), mkInfo(BTF::BTF_KIND_FUNC), {13}}); in TEST()
556 D.addType({D.addString("15"), mkInfo(BTF::BTF_KIND_VAR), {2}}); in TEST()
557 D.addTail((uint32_t)0); in TEST()
558 D.addType({D.addString("16"), mkInfo(BTF::BTF_KIND_DATASEC) | 3, {0}}); in TEST()
559 D.addTail(BTF::BTFDataSec({1, 0, 4})); in TEST()
560 D.addTail(BTF::BTFDataSec({1, 4, 4})); in TEST()
561 D.addTail(BTF::BTFDataSec({1, 8, 4})); in TEST()
562 D.addType({D.addString("17"), mkInfo(BTF::BTF_KIND_FLOAT), {4}}); in TEST()
563 D.addType({D.addString("18"), mkInfo(BTF::BTF_KIND_DECL_TAG), {0}}); in TEST()
564 D.addTail((uint32_t)-1); in TEST()
565 D.addType({D.addString("19"), mkInfo(BTF::BTF_KIND_TYPE_TAG), {0}}); in TEST()
568 Error Err = BTF.parse(D.makeObj()); in TEST()
571 EXPECT_EQ(D.totalTypes() + 1 /* +1 for void */, BTF.typesCount()); in TEST()
572 for (unsigned Id = 1; Id < D.totalTypes() + 1; ++Id) { in TEST()
578 EXPECT_EQ(BTF.findString(Tp->NameOff), IdBuf); in TEST()
584 MockData2 D; in TEST() local
585 uint32_t FStr = D.addString("f"); in TEST()
586 D.addType({D.addString("foo"), mkInfo(BTF::BTF_KIND_INT), {4}}); in TEST()
587 D.addTail((uint32_t)0); in TEST()
588 D.addType({D.addString("big"), mkInfo(BTF::BTF_KIND_STRUCT) | N, {8}}); in TEST()
590 D.addTail(BTF::BTFMember({FStr, 1, 0})); in TEST()
591 D.addType({D.addString("bar"), mkInfo(BTF::BTF_KIND_INT), {4}}); in TEST()
592 D.addTail((uint32_t)0); in TEST()
595 ASSERT_SUCCEEDED(BTF.parse(D.makeObj())); in TEST()
596 ASSERT_EQ(BTF.typesCount(), 4u /* +1 for void */); in TEST()
597 const BTF::CommonType *Foo = BTF.findType(1); in TEST()
603 EXPECT_EQ(BTF.findString(Foo->NameOff), "foo"); in TEST()
604 EXPECT_EQ(BTF.findString(Big->NameOff), "big"); in TEST()
605 EXPECT_EQ(BTF.findString(Bar->NameOff), "bar"); in TEST()
606 EXPECT_EQ(Big->getVlen(), N); in TEST()
610 MockData2 D; in TEST() local
612 D.resetTypes(); in TEST()
613 D.addType(Tp); in TEST()
614 EXPECT_PARSE_ERROR(D, "incomplete type definition in .BTF section"); in TEST()
618 IncompleteType({D.addString("a"), mkInfo(BTF::BTF_KIND_INT), {4}}); in TEST()
619 IncompleteType({D.addString("b"), mkInfo(BTF::BTF_KIND_ARRAY), {0}}); in TEST()
620 IncompleteType({D.addString("c"), mkInfo(BTF::BTF_KIND_VAR), {0}}); in TEST()
621 IncompleteType({D.addString("d"), mkInfo(BTF::BTF_KIND_DECL_TAG), {0}}); in TEST()
624 IncompleteType({D.addString("a"), mkInfo(BTF::BTF_KIND_STRUCT) | 2, {8}}); in TEST()
625 IncompleteType({D.addString("b"), mkInfo(BTF::BTF_KIND_UNION) | 3, {8}}); in TEST()
626 IncompleteType({D.addString("c"), mkInfo(BTF::BTF_KIND_ENUM) | 2, {4}}); in TEST()
627 IncompleteType({D.addString("d"), mkInfo(BTF::BTF_KIND_ENUM64) | 1, {4}}); in TEST()
628 IncompleteType({D.addString("e"), mkInfo(BTF::BTF_KIND_FUNC_PROTO) | 1, {1}}); in TEST()
629 IncompleteType({D.addString("f"), mkInfo(BTF::BTF_KIND_DATASEC) | 3, {0}}); in TEST()
632 D.resetTypes(); in TEST()
633 D.addTail((uint32_t)0); in TEST()
634 EXPECT_PARSE_ERROR(D, "incomplete type definition in .BTF section"); in TEST()
651 MockData2 D; in TEST() local
652 uint32_t Zero = D.addString("0"); in TEST()
653 // id 1: struct foo {} in TEST()
656 D.addType({D.addString("foo"), mkInfo(BTF::BTF_KIND_STRUCT), {0}}); in TEST()
657 D.addType({D.addString("bar"), in TEST()
660 D.addType({D.addString("buz"), mkInfo(BTF::BTF_KIND_FWD), {0}}); in TEST()
661 D.addRelocSec({D.addString("foo"), 7}); in TEST()
662 // List of all possible correct type relocations for type id #1. in TEST()
663 D.addReloc({0, 1, Zero, BTF::BTF_TYPE_ID_LOCAL}); in TEST()
664 D.addReloc({8, 1, Zero, BTF::BTF_TYPE_ID_REMOTE}); in TEST()
665 D.addReloc({16, 1, Zero, BTF::TYPE_EXISTENCE}); in TEST()
666 D.addReloc({24, 1, Zero, BTF::TYPE_MATCH}); in TEST()
667 D.addReloc({32, 1, Zero, BTF::TYPE_SIZE}); in TEST()
669 D.addReloc({40, 2, Zero, BTF::TYPE_SIZE}); in TEST()
670 D.addReloc({48, 3, Zero, BTF::TYPE_SIZE}); in TEST()
672 D.addReloc({56, 42, Zero, BTF::TYPE_SIZE}); in TEST()
674 D.addReloc({64, 1, D.addString("10"), BTF::TYPE_SIZE}); in TEST()
677 Error E = BTF.parse(D.makeObj()); in TEST()
680 SYMBOLIZE(SA({0, 1}), "<local_type_id> [1] struct foo"); in TEST()
681 SYMBOLIZE(SA({8, 1}), "<target_type_id> [1] struct foo"); in TEST()
682 SYMBOLIZE(SA({16, 1}), "<type_exists> [1] struct foo"); in TEST()
683 SYMBOLIZE(SA({24, 1}), "<type_matches> [1] struct foo"); in TEST()
684 SYMBOLIZE(SA({32, 1}), "<type_size> [1] struct foo"); in TEST()
685 SYMBOLIZE(SA({40, 1}), "<type_size> [2] fwd union bar"); in TEST()
686 SYMBOLIZE(SA({48, 1}), "<type_size> [3] fwd struct buz"); in TEST()
687 SYMBOLIZE(SA({56, 1}), "<type_size> [42] '0' <unknown type id: 42>"); in TEST()
688 SYMBOLIZE(SA({64, 1}), in TEST()
689 "<type_size> [1] '10' " in TEST()
690 "<unexpected type-based relocation spec: should be '0'>"); in TEST()
694 MockData2 D; in TEST() local
695 // id 1: enum { U, V } in TEST()
696 D.addType({D.addString("foo"), mkInfo(BTF::BTF_KIND_ENUM) | 2, {4}}); in TEST()
697 D.addTail(BTF::BTFEnum({D.addString("U"), 1})); in TEST()
698 D.addTail(BTF::BTFEnum({D.addString("V"), 2})); in TEST()
700 D.addType({D.addString("int"), mkInfo(BTF::BTF_KIND_INT), {4}}); in TEST()
701 D.addTail((uint32_t)0); in TEST()
703 D.addType({D.addString("bar"), mkInfo(BTF::BTF_KIND_ENUM64) | 2, {8}}); in TEST()
704 D.addTail(BTF::BTFEnum64({D.addString("A"), 1, 0})); in TEST()
705 D.addTail(BTF::BTFEnum64({D.addString("B"), 2, 0})); in TEST()
707 D.addRelocSec({D.addString("foo"), 5}); in TEST()
708 // An ok relocation accessing value #1: U. in TEST()
709 D.addReloc({0, 1, D.addString("0"), BTF::ENUM_VALUE_EXISTENCE}); in TEST()
711 D.addReloc({8, 1, D.addString("1"), BTF::ENUM_VALUE}); in TEST()
712 // Incorrect relocation: too many elements in string "1:0". in TEST()
713 D.addReloc({16, 1, D.addString("1:0"), BTF::ENUM_VALUE}); in TEST()
715 D.addReloc({24, 2, D.addString("1"), BTF::ENUM_VALUE}); in TEST()
717 D.addReloc({32, 1, D.addString("42"), BTF::ENUM_VALUE}); in TEST()
718 // An ok relocation accessing value #1: A. in TEST()
719 D.addReloc({40, 3, D.addString("0"), BTF::ENUM_VALUE_EXISTENCE}); in TEST()
721 D.addReloc({48, 3, D.addString("1"), BTF::ENUM_VALUE}); in TEST()
724 Error E = BTF.parse(D.makeObj()); in TEST()
727 SYMBOLIZE(SA({0, 1}), "<enumval_exists> [1] enum foo::U = 1"); in TEST()
728 SYMBOLIZE(SA({8, 1}), "<enumval_value> [1] enum foo::V = 2"); in TEST()
730 SA({16, 1}), in TEST()
731 "<enumval_value> [1] '1:0' <unexpected enumval relocation spec size>"); in TEST()
733 SA({24, 1}), in TEST()
734 "<enumval_value> [2] '1' <unexpected type kind for enum relocation: 1>"); in TEST()
735 SYMBOLIZE(SA({32, 1}), "<enumval_value> [1] '42' <bad value index: 42>"); in TEST()
736 SYMBOLIZE(SA({40, 1}), "<enumval_exists> [3] enum bar::A = 1"); in TEST()
737 SYMBOLIZE(SA({48, 1}), "<enumval_value> [3] enum bar::B = 2"); in TEST()
741 MockData2 D; in TEST() local
742 // id 1: enum { U, V } in TEST()
743 D.addType({D.addString("foo"), mkInfo(BTF::BTF_KIND_ENUM) | 2, {4}}); in TEST()
744 D.addTail(BTF::BTFEnum({D.addString("U"), 1})); in TEST()
745 D.addTail(BTF::BTFEnum({D.addString("V"), 2})); in TEST()
747 D.addType({D.addString("a"), mkInfo(BTF::BTF_KIND_TYPEDEF), {1}}); in TEST()
749 D.addType({D.addString(""), mkInfo(BTF::BTF_KIND_CONST), {1}}); in TEST()
751 D.addRelocSec({D.addString("foo"), 0}); in TEST()
752 D.addReloc({0, 2, D.addString("0"), BTF::ENUM_VALUE}); in TEST()
753 D.addReloc({8, 3, D.addString("1"), BTF::ENUM_VALUE}); in TEST()
756 Error E = BTF.parse(D.makeObj()); in TEST()
759 SYMBOLIZE(SA({0, 1}), "<enumval_value> [2] typedef a::U = 1"); in TEST()
760 SYMBOLIZE(SA({8, 1}), "<enumval_value> [3] const enum foo::V = 2"); in TEST()
764 MockData2 D; in TEST() local
765 // id 1: int in TEST()
766 D.addType({D.addString("int"), mkInfo(BTF::BTF_KIND_INT), {4}}); in TEST()
767 D.addTail((uint32_t)0); in TEST()
769 D.addType({D.addString("foo"), mkInfo(BTF::BTF_KIND_STRUCT) | 2, {8}}); in TEST()
770 D.addTail(BTF::BTFMember({D.addString("a"), 1, 0})); in TEST()
771 D.addTail(BTF::BTFMember({D.addString("b"), 1, 0})); in TEST()
773 D.addType({D.addString(""), mkInfo(BTF::BTF_KIND_ARRAY), {0}}); in TEST()
774 D.addTail(BTF::BTFArray({2, 1, 2})); in TEST()
776 D.addType({D.addString("bar"), mkInfo(BTF::BTF_KIND_STRUCT) | 2, {8}}); in TEST()
777 D.addTail(BTF::BTFMember({D.addString("u"), 3, 0})); in TEST()
778 D.addTail(BTF::BTFMember({D.addString("v"), 1, 0})); in TEST()
780 D.addType({D.addString(""), mkInfo(BTF::BTF_KIND_ARRAY), {0}}); in TEST()
781 D.addTail(BTF::BTFArray({42, 1, 2})); in TEST()
783 D.addType({D.addString("bar"), mkInfo(BTF::BTF_KIND_STRUCT) | 2, {8}}); in TEST()
784 D.addTail(BTF::BTFMember({D.addString("u"), 5, 0})); in TEST()
785 D.addTail(BTF::BTFMember({D.addString("v"), 42, 0})); in TEST()
787 D.addRelocSec({D.addString("foo"), 0 /* patched automatically */}); in TEST()
789 D.addReloc({0, 4, D.addString("0:1"), BTF::FIELD_BYTE_OFFSET}); in TEST()
790 D.addReloc({8, 4, D.addString("0:1"), BTF::FIELD_BYTE_SIZE}); in TEST()
791 D.addReloc({16, 4, D.addString("0:1"), BTF::FIELD_EXISTENCE}); in TEST()
792 D.addReloc({24, 4, D.addString("0:1"), BTF::FIELD_SIGNEDNESS}); in TEST()
793 D.addReloc({32, 4, D.addString("0:1"), BTF::FIELD_LSHIFT_U64}); in TEST()
794 D.addReloc({40, 4, D.addString("0:1"), BTF::FIELD_RSHIFT_U64}); in TEST()
795 // Non-zero first idx. in TEST()
796 D.addReloc({48, 4, D.addString("7:1"), BTF::FIELD_BYTE_OFFSET}); in TEST()
797 // Access through array and struct: struct bar::u[1].a. in TEST()
798 D.addReloc({56, 4, D.addString("0:0:1:0"), BTF::FIELD_BYTE_OFFSET}); in TEST()
799 // Access through array and struct: struct bar::u[1].b. in TEST()
800 D.addReloc({64, 4, D.addString("0:0:1:1"), BTF::FIELD_BYTE_OFFSET}); in TEST()
802 D.addReloc({72, 4, D.addString(""), BTF::FIELD_BYTE_OFFSET}); in TEST()
804 D.addReloc({80, 4, D.addString("0:2"), BTF::FIELD_BYTE_OFFSET}); in TEST()
806 D.addReloc({88, 6, D.addString("0:0:0"), BTF::FIELD_BYTE_OFFSET}); in TEST()
808 D.addReloc({96, 6, D.addString("0:1:0"), BTF::FIELD_BYTE_OFFSET}); in TEST()
811 D.addReloc({104, 4, D.addString("0:1:0"), BTF::FIELD_BYTE_OFFSET}); in TEST()
814 Error E = BTF.parse(D.makeObj()); in TEST()
817 SYMBOLIZE(SA({0, 1}), "<byte_off> [4] struct bar::v (0:1)"); in TEST()
818 SYMBOLIZE(SA({8, 1}), "<byte_sz> [4] struct bar::v (0:1)"); in TEST()
819 SYMBOLIZE(SA({16, 1}), "<field_exists> [4] struct bar::v (0:1)"); in TEST()
820 SYMBOLIZE(SA({24, 1}), "<signed> [4] struct bar::v (0:1)"); in TEST()
821 SYMBOLIZE(SA({32, 1}), "<lshift_u64> [4] struct bar::v (0:1)"); in TEST()
822 SYMBOLIZE(SA({40, 1}), "<rshift_u64> [4] struct bar::v (0:1)"); in TEST()
823 SYMBOLIZE(SA({48, 1}), "<byte_off> [4] struct bar::[7].v (7:1)"); in TEST()
824 SYMBOLIZE(SA({56, 1}), "<byte_off> [4] struct bar::u[1].a (0:0:1:0)"); in TEST()
825 SYMBOLIZE(SA({64, 1}), "<byte_off> [4] struct bar::u[1].b (0:0:1:1)"); in TEST()
826 SYMBOLIZE(SA({72, 1}), "<byte_off> [4] '' <field spec too short>"); in TEST()
827 SYMBOLIZE(SA({80, 1}), in TEST()
829 "<member index 2 for spec sub-string 1 is out of range>"); in TEST()
830 SYMBOLIZE(SA({88, 1}), "<byte_off> [6] '0:0:0' " in TEST()
831 "<unknown element type id 42 for spec sub-string 2>"); in TEST()
832 SYMBOLIZE(SA({96, 1}), "<byte_off> [6] '0:1:0' " in TEST()
833 "<unknown member type id 42 for spec sub-string 1>"); in TEST()
834 SYMBOLIZE(SA({104, 1}), "<byte_off> [4] '0:1:0' " in TEST()
835 "<unexpected type kind 1 for spec sub-string 2>"); in TEST()
839 MockData2 D; in TEST() local
848 // const volatile restrict quux <some-var>; in TEST()
850 D.addType({D.addString("int"), mkInfo(BTF::BTF_KIND_INT), {4}}); in TEST()
851 D.addTail((uint32_t)0); in TEST()
853 D.addType({D.addString("foo"), mkInfo(BTF::BTF_KIND_STRUCT) | 1, {4}}); in TEST()
854 D.addTail(BTF::BTFMember({D.addString("u"), Int, 0})); in TEST()
856 D.addType({D.addString("bar"), mkInfo(BTF::BTF_KIND_TYPEDEF), {Foo}}); in TEST()
858 D.addType({D.addString("bar"), mkInfo(BTF::BTF_KIND_CONST), {Bar}}); in TEST()
860 D.addType({D.addString("buz"), mkInfo(BTF::BTF_KIND_STRUCT) | 1, {4}}); in TEST()
861 D.addTail(BTF::BTFMember({D.addString("v"), CBar, 0})); in TEST()
863 D.addType({D.addString("quux"), mkInfo(BTF::BTF_KIND_TYPEDEF), {Buz}}); in TEST()
865 D.addType({D.addString(""), mkInfo(BTF::BTF_KIND_RESTRICT), {Quux}}); in TEST()
867 D.addType({D.addString(""), mkInfo(BTF::BTF_KIND_VOLATILE), {RQuux}}); in TEST()
869 D.addType({D.addString(""), mkInfo(BTF::BTF_KIND_CONST), {VRQuux}}); in TEST()
871 D.addType({D.addString(""), mkInfo(BTF::BTF_KIND_CONST), {77}}); in TEST()
873 D.addType({D.addString(""), mkInfo(BTF::BTF_KIND_VOLATILE), {CUnknown}}); in TEST()
875 D.addRelocSec({D.addString("foo"), 0}); in TEST()
876 D.addReloc({0, Bar, D.addString("0:0"), BTF::FIELD_BYTE_OFFSET}); in TEST()
877 D.addReloc({8, CVRQuux, D.addString("0:0:0"), BTF::FIELD_BYTE_OFFSET}); in TEST()
878 D.addReloc({16, CVUnknown, D.addString("0:1:2"), BTF::FIELD_BYTE_OFFSET}); in TEST()
881 Error E = BTF.parse(D.makeObj()); in TEST()
885 SYMBOLIZE(SA({0, 1}), "<byte_off> [3] typedef bar::u (0:0)"); in TEST()
886 SYMBOLIZE(SA({8, 1}), in TEST()
888 SYMBOLIZE(SA({16, 1}), in TEST()
889 "<byte_off> [11] '0:1:2' <unknown type id: 77 in modifiers chain>"); in TEST()
893 MockData2 D; in TEST() local
896 D.addType({D.addString("tag"), mkInfo(BTF::BTF_KIND_TYPE_TAG), {0}}); in TEST()
898 D.addRelocSec({D.addString("foo"), 0}); in TEST()
899 D.addReloc({0, Tag, D.addString("0"), BTF::TYPE_EXISTENCE}); in TEST()
900 D.addReloc({8, 0 /* void */, D.addString("0"), BTF::TYPE_EXISTENCE}); in TEST()
903 Error E = BTF.parse(D.makeObj()); in TEST()
906 SYMBOLIZE(SA({0, 1}), "<type_exists> [1] type_tag(\"tag\") void"); in TEST()
907 SYMBOLIZE(SA({8, 1}), "<type_exists> [0] void"); in TEST()
911 MockData2 D; in TEST() local
913 D.addType( in TEST()
914 {D.addString(""), mkInfo(BTF::BTF_KIND_CONST), {1 /* ourselves */}}); in TEST()
915 D.addRelocSec({D.addString("foo"), 0}); in TEST()
916 D.addReloc({0, 1, D.addString(""), BTF::TYPE_EXISTENCE}); in TEST()
919 Error E = BTF.parse(D.makeObj()); in TEST()
922 SYMBOLIZE(SA({0, 1}), "<type_exists> [1] '' <modifiers chain is too long>"); in TEST()
926 MockData2 D; in TEST() local
932 D.addType({D.addString("int"), mkInfo(BTF::BTF_KIND_INT), {4}}); in TEST()
933 D.addTail((uint32_t)0); in TEST()
935 D.addType({D.addString(""), mkInfo(BTF::BTF_KIND_STRUCT) | 1, {4}}); in TEST()
936 D.addTail(BTF::BTFMember({D.addString(""), Int, 0})); in TEST()
938 D.addRelocSec({D.addString("foo"), 0}); in TEST()
939 D.addReloc({0, Anon, D.addString("0"), BTF::TYPE_EXISTENCE}); in TEST()
940 D.addReloc({8, Anon, D.addString("0:0"), BTF::FIELD_BYTE_OFFSET}); in TEST()
943 Error E = BTF.parse(D.makeObj()); in TEST()
946 SYMBOLIZE(SA({0, 1}), "<type_exists> [2] struct <anon 2>"); in TEST()
947 SYMBOLIZE(SA({8, 1}), "<byte_off> [2] struct <anon 2>::<anon 0> (0:0)"); in TEST()
951 MockData2 D; in TEST() local
953 uint32_t S = D.addType({D.addString("S"), mkInfo(BTF::BTF_KIND_STRUCT), {0}}); in TEST()
955 D.addRelocSec({D.addString("foo"), 0}); in TEST()
956 D.addReloc({0, 0, D.addString(""), 777}); in TEST()
957 D.addReloc({8, S, D.addString("abc"), BTF::FIELD_BYTE_OFFSET}); in TEST()
958 D.addReloc({16, S, D.addString("0#"), BTF::FIELD_BYTE_OFFSET}); in TEST()
961 Error E = BTF.parse(D.makeObj()); in TEST()
964 SYMBOLIZE(SA({0, 1}), in TEST()
966 SYMBOLIZE(SA({8, 1}), "<byte_off> [1] 'abc' <spec string is not a number>"); in TEST()
967 SYMBOLIZE(SA({16, 1}), in TEST()
968 "<byte_off> [1] '0#' <unexpected spec string delimiter: '#'>"); in TEST()
972 MockData2 D; in TEST() local
974 uint32_t S = D.addType({D.addString("S"), mkInfo(BTF::BTF_KIND_STRUCT), {0}}); in TEST()
975 uint32_t T = D.addType({D.addString("T"), mkInfo(BTF::BTF_KIND_STRUCT), {0}}); in TEST()
977 D.addRelocSec({D.addString("foo"), 0}); in TEST()
978 D.addReloc({0, S, D.addString(""), BTF::TYPE_EXISTENCE}); in TEST()
979 D.addReloc({8, S, D.addString(""), BTF::TYPE_EXISTENCE}); in TEST()
981 D.addRelocSec({D.addString("bar"), 0}); in TEST()
982 D.addReloc({8, T, D.addString(""), BTF::TYPE_EXISTENCE}); in TEST()
983 D.addReloc({16, T, D.addString(""), BTF::TYPE_EXISTENCE}); in TEST()
986 Error E = BTF.parse(D.makeObj()); in TEST()
989 EXPECT_TRUE(BTF.findFieldReloc({0, 1})); in TEST()
990 EXPECT_TRUE(BTF.findFieldReloc({8, 1})); in TEST()
991 EXPECT_FALSE(BTF.findFieldReloc({16, 1})); in TEST()
1004 const BTF::CommonType *Type = BTF.findType(Relo->TypeID); in TEST()
1006 EXPECT_EQ(BTF.findString(Type->NameOff), Name); in TEST()
1009 AssertReloType({8, 1}, "S"); in TEST()
1015 MockData2 D; in TEST() local
1018 D.addType({D.addString("foo"), mkInfo(BTF::BTF_KIND_STRUCT), {0}}); in TEST()
1019 D.addType({D.addString("bar"), mkInfo(BTF::BTF_KIND_STRUCT), {0}}); in TEST()
1020 D.addRelocSec({D.addString("foo"), 0}); in TEST()
1021 D.addReloc({0, 1, D.addString(""), BTF::TYPE_EXISTENCE}); in TEST()
1022 D.addReloc({8, 2, D.addString(""), BTF::TYPE_EXISTENCE}); in TEST()
1024 Error E1 = BTF.parse(D.makeObj()); in TEST()
1027 ASSERT_TRUE(BTF.findType(1)); in TEST()
1028 EXPECT_EQ(BTF.findString(BTF.findType(1)->NameOff), "foo"); in TEST()
1030 EXPECT_TRUE(BTF.findFieldReloc({0, 1})); in TEST()
1031 EXPECT_TRUE(BTF.findFieldReloc({8, 1})); in TEST()
1034 D.reset(); in TEST()
1035 D.addType({D.addString("buz"), mkInfo(BTF::BTF_KIND_STRUCT), {0}}); in TEST()
1036 D.addRelocSec({D.addString("foo"), 0}); in TEST()
1037 D.addReloc({0, 1, D.addString(""), BTF::TYPE_EXISTENCE}); in TEST()
1039 Error E2 = BTF.parse(D.makeObj()); in TEST()
1042 ASSERT_TRUE(BTF.findType(1)); in TEST()
1043 EXPECT_EQ(BTF.findString(BTF.findType(1)->NameOff), "buz"); in TEST()
1045 EXPECT_TRUE(BTF.findFieldReloc({0, 1})); in TEST()
1046 EXPECT_FALSE(BTF.findFieldReloc({8, 1})); in TEST()
1051 MockData2 D; in TEST() local
1053 D.addType({D.addString("foo"), mkInfo(BTF::BTF_KIND_STRUCT), {0}}); in TEST()
1054 D.addRelocSec({D.addString("foo"), 0}); in TEST()
1055 D.addReloc({0, 1, D.addString(""), BTF::TYPE_EXISTENCE}); in TEST()
1056 D.addLinesSec({D.addString("foo"), 0}); in TEST()
1057 D.addLine({0, D.addString("file.c"), D.addString("some line"), LC(2, 3)}); in TEST()
1061 ObjectFile &Obj1 = D.makeObj(); in TEST()
1074 EXPECT_TRUE(BTF1.findLineInfo({0, 1})); in TEST()
1075 EXPECT_FALSE(BTF2.findLineInfo({0, 1})); in TEST()
1076 EXPECT_FALSE(BTF3.findLineInfo({0, 1})); in TEST()
1078 EXPECT_FALSE(BTF1.findType(1)); in TEST()
1079 EXPECT_TRUE(BTF2.findType(1)); in TEST()
1080 EXPECT_FALSE(BTF3.findType(1)); in TEST()
1082 EXPECT_FALSE(BTF1.findFieldReloc({0, 1})); in TEST()
1083 EXPECT_FALSE(BTF2.findFieldReloc({0, 1})); in TEST()
1084 EXPECT_TRUE(BTF3.findFieldReloc({0, 1})); in TEST()