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