Home | History | Annotate | Download | only in proto
      1 syntax = "proto2";
      2 
      3 package abi_dump;
      4 
      5 enum AccessSpecifier {
      6   public_access = 1;
      7   private_access = 2;
      8   protected_access = 3;
      9 }
     10 
     11 enum RecordKind {
     12   struct_kind = 1;
     13   class_kind = 2;
     14   union_kind = 3;
     15 }
     16 
     17 message 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 
     28 message ArrayType {
     29   optional BasicNamedAndTypedDecl type_info = 1;
     30 }
     31 
     32 message PointerType {
     33   optional BasicNamedAndTypedDecl type_info = 1;
     34 }
     35 
     36 message QualifiedType {
     37   optional BasicNamedAndTypedDecl type_info = 1;
     38   optional bool is_const = 6;
     39   optional bool is_volatile = 7;
     40   optional bool is_restricted = 8;
     41 }
     42 
     43 message BuiltinType {
     44   optional BasicNamedAndTypedDecl type_info = 1;
     45   optional bool is_unsigned = 2;
     46   optional bool is_integral = 3;
     47 }
     48 
     49 message LvalueReferenceType {
     50   optional BasicNamedAndTypedDecl type_info = 1;
     51 }
     52 
     53 message RvalueReferenceType {
     54   optional BasicNamedAndTypedDecl type_info = 1;
     55 }
     56 
     57 message FunctionType {
     58   optional BasicNamedAndTypedDecl type_info = 1;
     59   optional string return_type = 2;
     60   repeated ParamDecl parameters = 3;
     61 }
     62 
     63 message FunctionDecl {
     64   // Return type reference
     65   optional string return_type = 1;
     66   optional string function_name = 2;
     67   optional string source_file = 3;
     68   repeated ParamDecl parameters = 4;
     69   optional TemplateInfo template_info = 5;
     70   optional string linker_set_key = 6;
     71   optional AccessSpecifier access = 7 [default = public_access];
     72 }
     73 
     74 message ParamDecl {
     75   optional string referenced_type = 1;
     76   optional bool default_arg = 2;
     77   optional bool is_this_ptr = 3;
     78 }
     79 
     80 message RecordFieldDecl {
     81   // For future additions.
     82   optional string referenced_type = 1;
     83   optional uint64 field_offset = 2;
     84   optional string field_name = 3;
     85   optional AccessSpecifier access = 4 [default = public_access];
     86 }
     87 
     88 message EnumFieldDecl {
     89   optional int64 enum_field_value = 1; // assumption: fits int64
     90   optional string name = 3;
     91 }
     92 
     93 message TemplateInfo {
     94   repeated TemplateElement elements = 1;
     95 }
     96 
     97 message TemplateElement {
     98   optional string referenced_type = 1;
     99 }
    100 
    101 message CXXBaseSpecifier {
    102   optional string referenced_type = 1;
    103   optional bool is_virtual = 2;
    104   optional AccessSpecifier access = 3;
    105 }
    106 
    107 message VTableComponent {
    108   enum Kind {
    109     VCallOffset = 0;
    110     VBaseOffset = 1;
    111     OffsetToTop = 2;
    112     RTTI = 3;
    113     FunctionPointer = 4;
    114     CompleteDtorPointer = 5;
    115     DeletingDtorPointer = 6;
    116     UnusedFunctionPointer = 7;
    117   }
    118   optional Kind kind = 1;
    119   optional string mangled_component_name = 2 [default = ""];
    120   // Maintain backwards compatibility. Builds don't break while updating
    121   // reference dumps. TODO: b/63081517
    122   optional uint64 value = 3 [default = 0];
    123   optional int64 component_value = 4 [default = 0];
    124 }
    125 
    126 message VTableLayout {
    127   repeated VTableComponent vtable_components = 1;
    128 }
    129 
    130 message TagType {
    131   optional string unique_id = 1 [default = ""];
    132 }
    133 
    134 message RecordType {
    135   optional BasicNamedAndTypedDecl type_info = 1;
    136   repeated RecordFieldDecl fields = 2;
    137   repeated CXXBaseSpecifier base_specifiers = 3;
    138   optional TemplateInfo template_info = 5;
    139   optional VTableLayout vtable_layout = 7;
    140   optional AccessSpecifier access = 8 [default = public_access];
    141   optional bool is_anonymous = 9;
    142   optional RecordKind record_kind = 10 [default = struct_kind];
    143   optional TagType tag_info = 11;
    144 }
    145 
    146 message EnumType {
    147   optional BasicNamedAndTypedDecl type_info = 1;
    148   optional string underlying_type = 2;
    149   repeated EnumFieldDecl enum_fields = 3;
    150   optional AccessSpecifier access = 4 [default = public_access];
    151   optional TagType tag_info = 5;
    152 }
    153 
    154 message GlobalVarDecl {
    155   optional string name = 1;
    156   optional string source_file = 2;
    157   optional string linker_set_key = 3;
    158   optional string referenced_type = 4;
    159   optional AccessSpecifier access = 5 [default = public_access];
    160 }
    161 
    162 message ElfFunction {
    163   optional string name = 1;
    164 }
    165 
    166 message ElfObject {
    167   optional string name = 1;
    168 }
    169 
    170 message TranslationUnit {
    171   repeated RecordType record_types = 1;
    172   repeated EnumType enum_types = 2;
    173   repeated PointerType pointer_types = 3;
    174   repeated LvalueReferenceType lvalue_reference_types = 4;
    175   repeated RvalueReferenceType rvalue_reference_types = 5;
    176   repeated BuiltinType builtin_types = 6;
    177   repeated QualifiedType qualified_types = 7;
    178   repeated ArrayType array_types = 8;
    179   repeated FunctionType function_types = 13;
    180   repeated FunctionDecl functions = 9;
    181   repeated GlobalVarDecl global_vars = 10;
    182   repeated ElfFunction elf_functions = 11;
    183   repeated ElfObject elf_objects = 12;
    184 }
    185