1 syntax = "proto2"; 2 3 import "abi_dump.proto"; 4 5 package abi_diff; 6 7 message TypeInfo { 8 optional uint64 size = 1; 9 optional uint32 alignment = 2; 10 } 11 12 message TypeInfoDiff { 13 optional TypeInfo old_type_info = 1; 14 optional TypeInfo new_type_info = 2; 15 } 16 17 message VTableLayoutDiff { 18 optional abi_dump.VTableLayout old_vtable = 1; 19 optional abi_dump.VTableLayout new_vtable = 2; 20 } 21 22 message RecordFieldDeclDiff { 23 optional abi_dump.RecordFieldDecl old_field = 1; 24 optional abi_dump.RecordFieldDecl new_field = 2; 25 } 26 27 message CXXBaseSpecifierDiff { 28 repeated abi_dump.CXXBaseSpecifier old_bases = 1; 29 repeated abi_dump.CXXBaseSpecifier new_bases = 2; 30 } 31 32 message RecordTypeDiff { 33 optional string name = 1; 34 optional string type_stack = 2; 35 optional TypeInfoDiff type_info_diff = 3; 36 repeated abi_dump.RecordFieldDecl fields_removed = 4; 37 repeated abi_dump.RecordFieldDecl fields_added = 5; 38 repeated RecordFieldDeclDiff fields_diff = 6; 39 optional CXXBaseSpecifierDiff bases_diff = 7; 40 optional VTableLayoutDiff vtable_layout_diff = 8; 41 } 42 43 message UnderlyingTypeDiff { 44 optional string old_type = 1; 45 optional string new_type = 2; 46 } 47 48 message EnumFieldDeclDiff { 49 optional abi_dump.EnumFieldDecl old_field = 1; 50 optional abi_dump.EnumFieldDecl new_field = 2; 51 } 52 53 message EnumTypeDiff { 54 optional string type_stack = 1; 55 optional string name = 2; 56 repeated EnumFieldDeclDiff fields_diff = 3; 57 optional UnderlyingTypeDiff underlying_type_diff = 4; 58 repeated abi_dump.EnumFieldDecl fields_added = 5; 59 repeated abi_dump.EnumFieldDecl fields_removed = 6; 60 } 61 62 message FunctionDeclDiff { 63 // Template diffs are not required since in C++, they will show up in mangled 64 // names and in C, templates are not supported. 65 optional string type_stack = 1; 66 optional string name = 2; 67 optional abi_dump.FunctionDecl old = 3; 68 optional abi_dump.FunctionDecl new = 4; 69 } 70 71 message GlobalVarDeclDiff { 72 optional string type_stack = 1; 73 optional string name = 2; 74 optional abi_dump.GlobalVarDecl old = 3; // Old global var 75 optional abi_dump.GlobalVarDecl new = 4; // New global var 76 } 77 78 message TranslationUnitDiff { 79 // Library Name 80 optional string lib_name = 1; 81 optional string arch = 2; 82 // Records. 83 repeated RecordTypeDiff record_type_diffs = 3; 84 repeated RecordTypeDiff unreferenced_record_type_diffs = 4; 85 repeated abi_dump.RecordType unreferenced_record_types_removed = 5; 86 repeated abi_dump.RecordType unreferenced_record_types_added = 6; 87 88 // Enums 89 repeated EnumTypeDiff enum_type_diffs = 7; 90 repeated EnumTypeDiff enum_type_extension_diffs = 8; 91 repeated EnumTypeDiff unreferenced_enum_type_diffs = 9; 92 repeated EnumTypeDiff unreferenced_enum_type_extension_diffs = 10; 93 repeated abi_dump.EnumType unreferenced_enum_types_removed = 11; 94 repeated abi_dump.EnumType unreferenced_enum_types_added = 12; 95 96 // Functions and Global variables. 97 repeated FunctionDeclDiff function_diffs = 13; 98 repeated GlobalVarDeclDiff global_var_diffs = 14; 99 100 repeated abi_dump.FunctionDecl functions_removed = 15; 101 repeated abi_dump.GlobalVarDecl global_vars_removed = 16; 102 103 repeated abi_dump.FunctionDecl functions_added = 17; 104 repeated abi_dump.GlobalVarDecl global_vars_added = 18; 105 106 repeated abi_dump.ElfFunction added_elf_functions = 19; 107 repeated abi_dump.ElfFunction removed_elf_functions = 20; 108 109 repeated abi_dump.ElfObject added_elf_objects = 21; 110 repeated abi_dump.ElfObject removed_elf_objects = 22; 111 112 // Compatiblity Status 113 optional CompatibilityStatus compatibility_status = 23; 114 } 115 116 // Not merged with TranslationUnitDiff to allow future extensions. 117 message ConciseDiffReportInformation { 118 optional string lib_name = 1; 119 optional string arch = 2; 120 optional string diff_report_path = 3; 121 optional CompatibilityStatus compatibility_status = 4; 122 } 123 124 message MergedTranslationUnitDiff { 125 repeated ConciseDiffReportInformation diff_reports = 1; 126 } 127 128 enum CompatibilityStatus { 129 COMPATIBLE = 0; 130 EXTENSION = 1; 131 INCOMPATIBLE = 4; 132 } 133