xref: /aosp_15_r20/external/stg/stg.proto (revision 9e3b08ae94a55201065475453d799e8b1378bea6)
1*9e3b08aeSAndroid Build Coastguard Worker// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
2*9e3b08aeSAndroid Build Coastguard Worker// -*- mode: protobuffer -*-
3*9e3b08aeSAndroid Build Coastguard Worker//
4*9e3b08aeSAndroid Build Coastguard Worker// Copyright 2022-2024 Google LLC
5*9e3b08aeSAndroid Build Coastguard Worker//
6*9e3b08aeSAndroid Build Coastguard Worker// Licensed under the Apache License v2.0 with LLVM Exceptions (the
7*9e3b08aeSAndroid Build Coastguard Worker// "License"); you may not use this file except in compliance with the
8*9e3b08aeSAndroid Build Coastguard Worker// License.  You may obtain a copy of the License at
9*9e3b08aeSAndroid Build Coastguard Worker//
10*9e3b08aeSAndroid Build Coastguard Worker//     https://llvm.org/LICENSE.txt
11*9e3b08aeSAndroid Build Coastguard Worker//
12*9e3b08aeSAndroid Build Coastguard Worker// Unless required by applicable law or agreed to in writing, software
13*9e3b08aeSAndroid Build Coastguard Worker// distributed under the License is distributed on an "AS IS" BASIS,
14*9e3b08aeSAndroid Build Coastguard Worker// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15*9e3b08aeSAndroid Build Coastguard Worker// See the License for the specific language governing permissions and
16*9e3b08aeSAndroid Build Coastguard Worker// limitations under the License.
17*9e3b08aeSAndroid Build Coastguard Worker//
18*9e3b08aeSAndroid Build Coastguard Worker// Author: Siddharth Nayyar
19*9e3b08aeSAndroid Build Coastguard Worker//
20*9e3b08aeSAndroid Build Coastguard Worker// Protobuf definitions representing the graph and nodes defined in graph.h.
21*9e3b08aeSAndroid Build Coastguard Worker//
22*9e3b08aeSAndroid Build Coastguard Worker// The protobuf representations approximately mirror the internal STG
23*9e3b08aeSAndroid Build Coastguard Worker// representataion. Keeping the representations as close as possible helps keep
24*9e3b08aeSAndroid Build Coastguard Worker// the serialisation and deserialisation logic simple. Nevertheless, there are
25*9e3b08aeSAndroid Build Coastguard Worker// some differences between the two representation, which are as follows:
26*9e3b08aeSAndroid Build Coastguard Worker//
27*9e3b08aeSAndroid Build Coastguard Worker// * The protobuf graph has repeated fields for each node type rather than a
28*9e3b08aeSAndroid Build Coastguard Worker//   repeated field of one offs of all node types.
29*9e3b08aeSAndroid Build Coastguard Worker// * The external ids are 32-bit integers. We use fixed32 type to represent the
30*9e3b08aeSAndroid Build Coastguard Worker//   ids which is better than using a variable integer type in terms of both
31*9e3b08aeSAndroid Build Coastguard Worker//   space and time. The ids are generated using 32-bit hashes of local
32*9e3b08aeSAndroid Build Coastguard Worker//   information of nodes.
33*9e3b08aeSAndroid Build Coastguard Worker// * All enumerations have a default UNKNOWN value to avoid defaulting to
34*9e3b08aeSAndroid Build Coastguard Worker//   concrete enumeration values when those values are missing.
35*9e3b08aeSAndroid Build Coastguard Worker// * Self ids of nodes have been made a part of the node itself (as the first
36*9e3b08aeSAndroid Build Coastguard Worker//   member) for all node types. This is to improve succinctness of textual
37*9e3b08aeSAndroid Build Coastguard Worker//   representation of the protobuf.
38*9e3b08aeSAndroid Build Coastguard Worker// * The binary protobuf definitions have no stability guarantee and exist
39*9e3b08aeSAndroid Build Coastguard Worker//   solely to support the associated textual format.
40*9e3b08aeSAndroid Build Coastguard Worker
41*9e3b08aeSAndroid Build Coastguard Workersyntax = "proto3";
42*9e3b08aeSAndroid Build Coastguard Worker
43*9e3b08aeSAndroid Build Coastguard Workerpackage stg.proto;
44*9e3b08aeSAndroid Build Coastguard Worker
45*9e3b08aeSAndroid Build Coastguard Worker// deprecated
46*9e3b08aeSAndroid Build Coastguard Workermessage Void {
47*9e3b08aeSAndroid Build Coastguard Worker  fixed32 id = 1;
48*9e3b08aeSAndroid Build Coastguard Worker}
49*9e3b08aeSAndroid Build Coastguard Worker
50*9e3b08aeSAndroid Build Coastguard Worker// deprecated
51*9e3b08aeSAndroid Build Coastguard Workermessage Variadic {
52*9e3b08aeSAndroid Build Coastguard Worker  fixed32 id = 1;
53*9e3b08aeSAndroid Build Coastguard Worker}
54*9e3b08aeSAndroid Build Coastguard Worker
55*9e3b08aeSAndroid Build Coastguard Workermessage Special {
56*9e3b08aeSAndroid Build Coastguard Worker  enum Kind {
57*9e3b08aeSAndroid Build Coastguard Worker    KIND_UNSPECIFIED = 0;
58*9e3b08aeSAndroid Build Coastguard Worker    VOID = 1;
59*9e3b08aeSAndroid Build Coastguard Worker    VARIADIC = 2;
60*9e3b08aeSAndroid Build Coastguard Worker    NULLPTR = 3;
61*9e3b08aeSAndroid Build Coastguard Worker  }
62*9e3b08aeSAndroid Build Coastguard Worker
63*9e3b08aeSAndroid Build Coastguard Worker  fixed32 id = 1;
64*9e3b08aeSAndroid Build Coastguard Worker  Kind kind = 2;
65*9e3b08aeSAndroid Build Coastguard Worker}
66*9e3b08aeSAndroid Build Coastguard Worker
67*9e3b08aeSAndroid Build Coastguard Workermessage PointerReference {
68*9e3b08aeSAndroid Build Coastguard Worker  enum Kind {
69*9e3b08aeSAndroid Build Coastguard Worker    KIND_UNSPECIFIED = 0;
70*9e3b08aeSAndroid Build Coastguard Worker    POINTER = 1;
71*9e3b08aeSAndroid Build Coastguard Worker    LVALUE_REFERENCE = 2;
72*9e3b08aeSAndroid Build Coastguard Worker    RVALUE_REFERENCE = 3;
73*9e3b08aeSAndroid Build Coastguard Worker  }
74*9e3b08aeSAndroid Build Coastguard Worker
75*9e3b08aeSAndroid Build Coastguard Worker  fixed32 id = 1;
76*9e3b08aeSAndroid Build Coastguard Worker  Kind kind = 2;
77*9e3b08aeSAndroid Build Coastguard Worker  fixed32 pointee_type_id = 3;
78*9e3b08aeSAndroid Build Coastguard Worker}
79*9e3b08aeSAndroid Build Coastguard Worker
80*9e3b08aeSAndroid Build Coastguard Workermessage PointerToMember {
81*9e3b08aeSAndroid Build Coastguard Worker  fixed32 id = 1;
82*9e3b08aeSAndroid Build Coastguard Worker  fixed32 containing_type_id = 2;
83*9e3b08aeSAndroid Build Coastguard Worker  fixed32 pointee_type_id = 3;
84*9e3b08aeSAndroid Build Coastguard Worker}
85*9e3b08aeSAndroid Build Coastguard Worker
86*9e3b08aeSAndroid Build Coastguard Workermessage Typedef {
87*9e3b08aeSAndroid Build Coastguard Worker  fixed32 id = 1;
88*9e3b08aeSAndroid Build Coastguard Worker  string name = 2;
89*9e3b08aeSAndroid Build Coastguard Worker  fixed32 referred_type_id = 3;
90*9e3b08aeSAndroid Build Coastguard Worker}
91*9e3b08aeSAndroid Build Coastguard Worker
92*9e3b08aeSAndroid Build Coastguard Workermessage Qualified {
93*9e3b08aeSAndroid Build Coastguard Worker  enum Qualifier {
94*9e3b08aeSAndroid Build Coastguard Worker    QUALIFIER_UNSPECIFIED = 0;
95*9e3b08aeSAndroid Build Coastguard Worker    CONST = 1;
96*9e3b08aeSAndroid Build Coastguard Worker    VOLATILE = 2;
97*9e3b08aeSAndroid Build Coastguard Worker    RESTRICT = 3;
98*9e3b08aeSAndroid Build Coastguard Worker    ATOMIC = 4;
99*9e3b08aeSAndroid Build Coastguard Worker  }
100*9e3b08aeSAndroid Build Coastguard Worker
101*9e3b08aeSAndroid Build Coastguard Worker  fixed32 id = 1;
102*9e3b08aeSAndroid Build Coastguard Worker  Qualifier qualifier = 2;
103*9e3b08aeSAndroid Build Coastguard Worker  fixed32 qualified_type_id = 3;
104*9e3b08aeSAndroid Build Coastguard Worker}
105*9e3b08aeSAndroid Build Coastguard Worker
106*9e3b08aeSAndroid Build Coastguard Workermessage Primitive {
107*9e3b08aeSAndroid Build Coastguard Worker  enum Encoding {
108*9e3b08aeSAndroid Build Coastguard Worker    ENCODING_UNSPECIFIED = 0;
109*9e3b08aeSAndroid Build Coastguard Worker    NONE = 1;
110*9e3b08aeSAndroid Build Coastguard Worker    BOOLEAN = 2;
111*9e3b08aeSAndroid Build Coastguard Worker    SIGNED_INTEGER = 3;
112*9e3b08aeSAndroid Build Coastguard Worker    UNSIGNED_INTEGER = 4;
113*9e3b08aeSAndroid Build Coastguard Worker    SIGNED_CHARACTER = 5;
114*9e3b08aeSAndroid Build Coastguard Worker    UNSIGNED_CHARACTER = 6;
115*9e3b08aeSAndroid Build Coastguard Worker    REAL_NUMBER = 7;
116*9e3b08aeSAndroid Build Coastguard Worker    COMPLEX_NUMBER = 8;
117*9e3b08aeSAndroid Build Coastguard Worker    UTF = 9;
118*9e3b08aeSAndroid Build Coastguard Worker  }
119*9e3b08aeSAndroid Build Coastguard Worker
120*9e3b08aeSAndroid Build Coastguard Worker  fixed32 id = 1;
121*9e3b08aeSAndroid Build Coastguard Worker  string name = 2;
122*9e3b08aeSAndroid Build Coastguard Worker  optional Encoding encoding = 3;
123*9e3b08aeSAndroid Build Coastguard Worker  uint32 bytesize = 4;
124*9e3b08aeSAndroid Build Coastguard Worker}
125*9e3b08aeSAndroid Build Coastguard Worker
126*9e3b08aeSAndroid Build Coastguard Workermessage Array {
127*9e3b08aeSAndroid Build Coastguard Worker  fixed32 id = 1;
128*9e3b08aeSAndroid Build Coastguard Worker  uint64 number_of_elements = 2;
129*9e3b08aeSAndroid Build Coastguard Worker  fixed32 element_type_id = 3;
130*9e3b08aeSAndroid Build Coastguard Worker}
131*9e3b08aeSAndroid Build Coastguard Worker
132*9e3b08aeSAndroid Build Coastguard Workermessage BaseClass {
133*9e3b08aeSAndroid Build Coastguard Worker  enum Inheritance {
134*9e3b08aeSAndroid Build Coastguard Worker    INHERITANCE_UNSPECIFIED = 0;
135*9e3b08aeSAndroid Build Coastguard Worker    NON_VIRTUAL = 1;
136*9e3b08aeSAndroid Build Coastguard Worker    VIRTUAL = 2;
137*9e3b08aeSAndroid Build Coastguard Worker  }
138*9e3b08aeSAndroid Build Coastguard Worker
139*9e3b08aeSAndroid Build Coastguard Worker  fixed32 id = 1;
140*9e3b08aeSAndroid Build Coastguard Worker  fixed32 type_id = 2;
141*9e3b08aeSAndroid Build Coastguard Worker  uint64 offset = 3;
142*9e3b08aeSAndroid Build Coastguard Worker  Inheritance inheritance = 4;
143*9e3b08aeSAndroid Build Coastguard Worker}
144*9e3b08aeSAndroid Build Coastguard Worker
145*9e3b08aeSAndroid Build Coastguard Workermessage Method {
146*9e3b08aeSAndroid Build Coastguard Worker  fixed32 id = 1;
147*9e3b08aeSAndroid Build Coastguard Worker  string mangled_name = 2;
148*9e3b08aeSAndroid Build Coastguard Worker  string name = 3;
149*9e3b08aeSAndroid Build Coastguard Worker  uint64 vtable_offset = 4;
150*9e3b08aeSAndroid Build Coastguard Worker  fixed32 type_id = 5;
151*9e3b08aeSAndroid Build Coastguard Worker}
152*9e3b08aeSAndroid Build Coastguard Worker
153*9e3b08aeSAndroid Build Coastguard Workermessage Member {
154*9e3b08aeSAndroid Build Coastguard Worker  fixed32 id = 1;
155*9e3b08aeSAndroid Build Coastguard Worker  string name = 2;
156*9e3b08aeSAndroid Build Coastguard Worker  fixed32 type_id = 3;
157*9e3b08aeSAndroid Build Coastguard Worker  uint64 offset = 4;
158*9e3b08aeSAndroid Build Coastguard Worker  uint64 bitsize = 5;
159*9e3b08aeSAndroid Build Coastguard Worker}
160*9e3b08aeSAndroid Build Coastguard Worker
161*9e3b08aeSAndroid Build Coastguard Workermessage VariantMember {
162*9e3b08aeSAndroid Build Coastguard Worker  fixed32 id = 1;
163*9e3b08aeSAndroid Build Coastguard Worker  string name = 2;
164*9e3b08aeSAndroid Build Coastguard Worker  optional int64 discriminant_value = 3;
165*9e3b08aeSAndroid Build Coastguard Worker  fixed32 type_id = 4;
166*9e3b08aeSAndroid Build Coastguard Worker}
167*9e3b08aeSAndroid Build Coastguard Worker
168*9e3b08aeSAndroid Build Coastguard Workermessage StructUnion {
169*9e3b08aeSAndroid Build Coastguard Worker  enum Kind {
170*9e3b08aeSAndroid Build Coastguard Worker    KIND_UNSPECIFIED = 0;
171*9e3b08aeSAndroid Build Coastguard Worker    STRUCT = 1;
172*9e3b08aeSAndroid Build Coastguard Worker    UNION = 2;
173*9e3b08aeSAndroid Build Coastguard Worker  }
174*9e3b08aeSAndroid Build Coastguard Worker
175*9e3b08aeSAndroid Build Coastguard Worker  message Definition {
176*9e3b08aeSAndroid Build Coastguard Worker    uint64 bytesize = 1;
177*9e3b08aeSAndroid Build Coastguard Worker    repeated fixed32 base_class_id = 2;
178*9e3b08aeSAndroid Build Coastguard Worker    repeated fixed32 method_id = 3;
179*9e3b08aeSAndroid Build Coastguard Worker    repeated fixed32 member_id = 4;
180*9e3b08aeSAndroid Build Coastguard Worker  }
181*9e3b08aeSAndroid Build Coastguard Worker
182*9e3b08aeSAndroid Build Coastguard Worker  fixed32 id = 1;
183*9e3b08aeSAndroid Build Coastguard Worker  Kind kind = 2;
184*9e3b08aeSAndroid Build Coastguard Worker  string name = 3;
185*9e3b08aeSAndroid Build Coastguard Worker  optional Definition definition = 4;
186*9e3b08aeSAndroid Build Coastguard Worker}
187*9e3b08aeSAndroid Build Coastguard Worker
188*9e3b08aeSAndroid Build Coastguard Workermessage Enumeration {
189*9e3b08aeSAndroid Build Coastguard Worker  message Enumerator {
190*9e3b08aeSAndroid Build Coastguard Worker    string name = 1;
191*9e3b08aeSAndroid Build Coastguard Worker    int64 value = 2;
192*9e3b08aeSAndroid Build Coastguard Worker  }
193*9e3b08aeSAndroid Build Coastguard Worker
194*9e3b08aeSAndroid Build Coastguard Worker  message Definition {
195*9e3b08aeSAndroid Build Coastguard Worker    fixed32 underlying_type_id = 1;
196*9e3b08aeSAndroid Build Coastguard Worker    repeated Enumerator enumerator = 2;
197*9e3b08aeSAndroid Build Coastguard Worker  }
198*9e3b08aeSAndroid Build Coastguard Worker
199*9e3b08aeSAndroid Build Coastguard Worker  fixed32 id = 1;
200*9e3b08aeSAndroid Build Coastguard Worker  string name = 2;
201*9e3b08aeSAndroid Build Coastguard Worker  optional Definition definition = 3;
202*9e3b08aeSAndroid Build Coastguard Worker}
203*9e3b08aeSAndroid Build Coastguard Worker
204*9e3b08aeSAndroid Build Coastguard Workermessage Variant {
205*9e3b08aeSAndroid Build Coastguard Worker  fixed32 id = 1;
206*9e3b08aeSAndroid Build Coastguard Worker  string name = 2;
207*9e3b08aeSAndroid Build Coastguard Worker  uint64 bytesize = 3;
208*9e3b08aeSAndroid Build Coastguard Worker  optional fixed32 discriminant = 4;
209*9e3b08aeSAndroid Build Coastguard Worker  repeated fixed32 member_id = 5;
210*9e3b08aeSAndroid Build Coastguard Worker}
211*9e3b08aeSAndroid Build Coastguard Worker
212*9e3b08aeSAndroid Build Coastguard Workermessage Function {
213*9e3b08aeSAndroid Build Coastguard Worker  fixed32 id = 1;
214*9e3b08aeSAndroid Build Coastguard Worker  fixed32 return_type_id = 2;
215*9e3b08aeSAndroid Build Coastguard Worker  repeated fixed32 parameter_id = 3;
216*9e3b08aeSAndroid Build Coastguard Worker}
217*9e3b08aeSAndroid Build Coastguard Worker
218*9e3b08aeSAndroid Build Coastguard Workermessage ElfSymbol {
219*9e3b08aeSAndroid Build Coastguard Worker  message VersionInfo {
220*9e3b08aeSAndroid Build Coastguard Worker    bool is_default = 1;
221*9e3b08aeSAndroid Build Coastguard Worker    string name = 2;
222*9e3b08aeSAndroid Build Coastguard Worker  }
223*9e3b08aeSAndroid Build Coastguard Worker
224*9e3b08aeSAndroid Build Coastguard Worker  enum SymbolType {
225*9e3b08aeSAndroid Build Coastguard Worker    SYMBOL_TYPE_UNSPECIFIED = 0;
226*9e3b08aeSAndroid Build Coastguard Worker    NOTYPE = 1;
227*9e3b08aeSAndroid Build Coastguard Worker    OBJECT = 2;
228*9e3b08aeSAndroid Build Coastguard Worker    FUNCTION = 3;
229*9e3b08aeSAndroid Build Coastguard Worker    COMMON = 4;
230*9e3b08aeSAndroid Build Coastguard Worker    TLS = 5;
231*9e3b08aeSAndroid Build Coastguard Worker    GNU_IFUNC = 6;
232*9e3b08aeSAndroid Build Coastguard Worker  }
233*9e3b08aeSAndroid Build Coastguard Worker
234*9e3b08aeSAndroid Build Coastguard Worker  enum Binding {
235*9e3b08aeSAndroid Build Coastguard Worker    GLOBAL = 0;  // Default while reading, omitted while writing.
236*9e3b08aeSAndroid Build Coastguard Worker    LOCAL = 1;
237*9e3b08aeSAndroid Build Coastguard Worker    WEAK = 2;
238*9e3b08aeSAndroid Build Coastguard Worker    GNU_UNIQUE = 3;
239*9e3b08aeSAndroid Build Coastguard Worker  }
240*9e3b08aeSAndroid Build Coastguard Worker
241*9e3b08aeSAndroid Build Coastguard Worker  enum Visibility {
242*9e3b08aeSAndroid Build Coastguard Worker    DEFAULT = 0;  // Default while reading, omitted while writing.
243*9e3b08aeSAndroid Build Coastguard Worker    PROTECTED = 1;
244*9e3b08aeSAndroid Build Coastguard Worker    HIDDEN = 2;
245*9e3b08aeSAndroid Build Coastguard Worker    INTERNAL = 3;
246*9e3b08aeSAndroid Build Coastguard Worker  }
247*9e3b08aeSAndroid Build Coastguard Worker
248*9e3b08aeSAndroid Build Coastguard Worker  fixed32 id = 1;
249*9e3b08aeSAndroid Build Coastguard Worker  string name = 2;
250*9e3b08aeSAndroid Build Coastguard Worker  optional VersionInfo version_info = 3;
251*9e3b08aeSAndroid Build Coastguard Worker  bool is_defined = 4;
252*9e3b08aeSAndroid Build Coastguard Worker  SymbolType symbol_type = 5;
253*9e3b08aeSAndroid Build Coastguard Worker  Binding binding = 6;
254*9e3b08aeSAndroid Build Coastguard Worker  Visibility visibility = 7;
255*9e3b08aeSAndroid Build Coastguard Worker  optional fixed32 crc = 8;
256*9e3b08aeSAndroid Build Coastguard Worker  optional string namespace = 9;
257*9e3b08aeSAndroid Build Coastguard Worker  optional fixed32 type_id = 10;
258*9e3b08aeSAndroid Build Coastguard Worker  optional string full_name = 11;
259*9e3b08aeSAndroid Build Coastguard Worker}
260*9e3b08aeSAndroid Build Coastguard Worker
261*9e3b08aeSAndroid Build Coastguard Workermessage Symbols {
262*9e3b08aeSAndroid Build Coastguard Worker  fixed32 id = 1;
263*9e3b08aeSAndroid Build Coastguard Worker  map<string, fixed32> symbol = 2;
264*9e3b08aeSAndroid Build Coastguard Worker}
265*9e3b08aeSAndroid Build Coastguard Worker
266*9e3b08aeSAndroid Build Coastguard Workermessage Interface {
267*9e3b08aeSAndroid Build Coastguard Worker  fixed32 id = 1;
268*9e3b08aeSAndroid Build Coastguard Worker  repeated fixed32 symbol_id = 2;
269*9e3b08aeSAndroid Build Coastguard Worker  repeated fixed32 type_id = 3;
270*9e3b08aeSAndroid Build Coastguard Worker}
271*9e3b08aeSAndroid Build Coastguard Worker
272*9e3b08aeSAndroid Build Coastguard Workermessage STG {
273*9e3b08aeSAndroid Build Coastguard Worker  uint32 version = 1;
274*9e3b08aeSAndroid Build Coastguard Worker  fixed32 root_id = 2;
275*9e3b08aeSAndroid Build Coastguard Worker  repeated Void void = 3;
276*9e3b08aeSAndroid Build Coastguard Worker  repeated Variadic variadic = 4;
277*9e3b08aeSAndroid Build Coastguard Worker  repeated Special special = 5;
278*9e3b08aeSAndroid Build Coastguard Worker  repeated PointerReference pointer_reference = 6;
279*9e3b08aeSAndroid Build Coastguard Worker  repeated PointerToMember pointer_to_member = 7;
280*9e3b08aeSAndroid Build Coastguard Worker  repeated Typedef typedef = 8;
281*9e3b08aeSAndroid Build Coastguard Worker  repeated Qualified qualified = 9;
282*9e3b08aeSAndroid Build Coastguard Worker  repeated Primitive primitive = 10;
283*9e3b08aeSAndroid Build Coastguard Worker  repeated Array array = 11;
284*9e3b08aeSAndroid Build Coastguard Worker  repeated BaseClass base_class = 12;
285*9e3b08aeSAndroid Build Coastguard Worker  repeated Method method = 13;
286*9e3b08aeSAndroid Build Coastguard Worker  repeated Member member = 14;
287*9e3b08aeSAndroid Build Coastguard Worker  repeated VariantMember variant_member = 15;
288*9e3b08aeSAndroid Build Coastguard Worker  repeated StructUnion struct_union = 16;
289*9e3b08aeSAndroid Build Coastguard Worker  repeated Enumeration enumeration = 17;
290*9e3b08aeSAndroid Build Coastguard Worker  repeated Variant variant = 18;
291*9e3b08aeSAndroid Build Coastguard Worker  repeated Function function = 19;
292*9e3b08aeSAndroid Build Coastguard Worker  repeated ElfSymbol elf_symbol = 20;
293*9e3b08aeSAndroid Build Coastguard Worker  repeated Symbols symbols = 21;
294*9e3b08aeSAndroid Build Coastguard Worker  repeated Interface interface = 22;
295*9e3b08aeSAndroid Build Coastguard Worker}
296