xref: /aosp_15_r20/development/vndk/tools/header-checker/src/repr/protobuf/proto/abi_dump.proto (revision 90c8c64db3049935a07c6143d7fd006e26f8ecca)
1syntax = "proto2";
2
3package abi_dump;
4
5enum AccessSpecifier {
6  public_access = 1;
7  private_access = 2;
8  protected_access = 3;
9}
10
11enum RecordKind {
12  struct_kind = 1;
13  class_kind = 2;
14  union_kind = 3;
15}
16
17message BasicNamedAndTypedDecl {
18  // The TypedDecl's name.
19  optional string name = 1;
20  optional uint64 size = 2 [default = 0];
21  optional uint32 alignment = 3 [default = 0];
22  optional string referenced_type = 4;
23  optional string source_file = 5;
24  optional string linker_set_key = 6;
25  optional string self_type = 7;
26}
27
28message ArrayType {
29  optional BasicNamedAndTypedDecl type_info = 1;
30  optional bool is_of_unknown_bound = 2;
31}
32
33message PointerType {
34  optional BasicNamedAndTypedDecl type_info = 1;
35}
36
37message QualifiedType {
38  optional BasicNamedAndTypedDecl type_info = 1;
39  optional bool is_const = 6;
40  optional bool is_volatile = 7;
41  optional bool is_restricted = 8;
42}
43
44message BuiltinType {
45  optional BasicNamedAndTypedDecl type_info = 1;
46  optional bool is_unsigned = 2;
47  optional bool is_integral = 3;
48}
49
50message LvalueReferenceType {
51  optional BasicNamedAndTypedDecl type_info = 1;
52}
53
54message RvalueReferenceType {
55  optional BasicNamedAndTypedDecl type_info = 1;
56}
57
58message FunctionType {
59  optional BasicNamedAndTypedDecl type_info = 1;
60  optional string return_type = 2;
61  repeated ParamDecl parameters = 3;
62}
63
64message AvailabilityAttr {
65  // A version tuple consists of major, minor, subminor, and build.
66  // This tool dumps the major version only.
67  optional uint32 introduced_major = 1;
68  optional uint32 deprecated_major = 2;
69  optional uint32 obsoleted_major = 3;
70  optional bool unavailable = 4;
71}
72
73message FunctionDecl {
74  // Return type reference
75  optional string return_type = 1;
76  optional string function_name = 2;
77  optional string source_file = 3;
78  repeated ParamDecl parameters = 4;
79  optional TemplateInfo template_info = 5;
80  optional string linker_set_key = 6;
81  optional AccessSpecifier access = 7 [default = public_access];
82  repeated AvailabilityAttr availability_attrs = 8;
83}
84
85message ParamDecl {
86  optional string referenced_type = 1;
87  optional bool default_arg = 2;
88  optional bool is_this_ptr = 3;
89}
90
91message RecordFieldDecl {
92  optional string referenced_type = 1;
93  optional uint64 field_offset = 2;
94  optional string field_name = 3;
95  optional AccessSpecifier access = 4 [default = public_access];
96  optional bool is_bit_field = 5;
97  optional uint64 bit_width = 6;
98  repeated AvailabilityAttr availability_attrs = 7;
99}
100
101message EnumFieldDecl {
102  optional int64 enum_field_value = 1;  // assumption: fits int64
103  optional string name = 3;
104  repeated AvailabilityAttr availability_attrs = 4;
105}
106
107message TemplateInfo {
108  repeated TemplateElement elements = 1;
109}
110
111message TemplateElement {
112  optional string referenced_type = 1;
113}
114
115message CXXBaseSpecifier {
116  optional string referenced_type = 1;
117  optional bool is_virtual = 2;
118  optional AccessSpecifier access = 3;
119}
120
121message VTableComponent {
122  enum Kind {
123    VCallOffset = 0;
124    VBaseOffset = 1;
125    OffsetToTop = 2;
126    RTTI = 3;
127    FunctionPointer = 4;
128    CompleteDtorPointer = 5;
129    DeletingDtorPointer = 6;
130    UnusedFunctionPointer = 7;
131  }
132  optional Kind kind = 1;
133  optional string mangled_component_name = 2 [default = ""];
134  // Maintain backwards compatibility. Builds don't break while updating
135  // reference dumps. TODO: b/63081517
136  optional uint64 value = 3 [default = 0];
137  optional int64 component_value = 4 [default = 0];
138  optional bool is_pure = 6 [default = false];
139}
140
141message VTableLayout {
142  repeated VTableComponent vtable_components = 1;
143}
144
145message RecordType {
146  optional BasicNamedAndTypedDecl type_info = 1;
147  repeated RecordFieldDecl fields = 2;
148  repeated CXXBaseSpecifier base_specifiers = 3;
149  optional TemplateInfo template_info = 5;
150  optional VTableLayout vtable_layout = 7;
151  optional AccessSpecifier access = 8 [default = public_access];
152  optional bool is_anonymous = 9;
153  optional RecordKind record_kind = 10 [default = struct_kind];
154  repeated AvailabilityAttr availability_attrs = 11;
155}
156
157message EnumType {
158  optional BasicNamedAndTypedDecl type_info = 1;
159  optional string underlying_type = 2;
160  repeated EnumFieldDecl enum_fields = 3;
161  optional AccessSpecifier access = 4 [default = public_access];
162  repeated AvailabilityAttr availability_attrs = 5;
163}
164
165message GlobalVarDecl {
166  optional string name = 1;
167  optional string source_file = 2;
168  optional string linker_set_key = 3;
169  optional string referenced_type = 4;
170  optional AccessSpecifier access = 5 [default = public_access];
171  repeated AvailabilityAttr availability_attrs = 6;
172}
173
174enum ElfSymbolBinding {
175  Global = 1;
176  Weak = 2;
177}
178
179message ElfFunction {
180  optional string name = 1;
181  optional ElfSymbolBinding binding = 2;
182}
183
184message ElfObject {
185  optional string name = 1;
186  optional ElfSymbolBinding binding = 2;
187}
188
189message TranslationUnit {
190  repeated RecordType record_types = 1;
191  repeated EnumType enum_types = 2;
192  repeated PointerType pointer_types = 3;
193  repeated LvalueReferenceType lvalue_reference_types = 4;
194  repeated RvalueReferenceType rvalue_reference_types = 5;
195  repeated BuiltinType builtin_types = 6;
196  repeated QualifiedType qualified_types = 7;
197  repeated ArrayType array_types = 8;
198  repeated FunctionType function_types = 13;
199  repeated FunctionDecl functions = 9;
200  repeated GlobalVarDecl global_vars = 10;
201  repeated ElfFunction elf_functions = 11;
202  repeated ElfObject elf_objects = 12;
203}
204