1syntax = "proto2";
2
3import "abi_dump.proto";
4
5package abi_diff;
6
7message TypeInfo {
8  optional uint64 size = 1;
9  optional uint32 alignment = 2;
10}
11
12message TypeInfoDiff {
13  optional TypeInfo old_type_info  = 1;
14  optional TypeInfo new_type_info  = 2;
15}
16
17message VTableLayoutDiff {
18  optional abi_dump.VTableLayout old_vtable = 1;
19  optional abi_dump.VTableLayout new_vtable = 2;
20}
21
22message RecordFieldDeclDiff {
23  optional abi_dump.RecordFieldDecl old_field = 1;
24  optional abi_dump.RecordFieldDecl new_field = 2;
25}
26
27message CXXBaseSpecifierDiff {
28  repeated abi_dump.CXXBaseSpecifier old_bases = 1;
29  repeated abi_dump.CXXBaseSpecifier new_bases = 2;
30}
31
32message 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
43message UnderlyingTypeDiff {
44  optional string old_type  = 1;
45  optional string new_type  = 2;
46}
47
48message EnumFieldDeclDiff {
49  optional abi_dump.EnumFieldDecl old_field = 1;
50  optional abi_dump.EnumFieldDecl new_field = 2;
51}
52
53message 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
62message 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
71message 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
78message 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.
117message 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
124message MergedTranslationUnitDiff {
125  repeated ConciseDiffReportInformation diff_reports = 1;
126}
127
128enum CompatibilityStatus {
129  COMPATIBLE = 0;
130  EXTENSION = 1;
131  INCOMPATIBLE = 4;
132}
133