mirror of https://github.com/encounter/objdiff.git
164 lines
3.1 KiB
Protocol Buffer
164 lines
3.1 KiB
Protocol Buffer
|
syntax = "proto3";
|
||
|
|
||
|
package objdiff.diff;
|
||
|
|
||
|
// A symbol
|
||
|
message Symbol {
|
||
|
// Name of the symbol
|
||
|
string name = 1;
|
||
|
// Demangled name of the symbol
|
||
|
optional string demangled_name = 2;
|
||
|
// Symbol address
|
||
|
uint64 address = 3;
|
||
|
// Symbol size
|
||
|
uint64 size = 4;
|
||
|
// Bitmask of SymbolFlag
|
||
|
uint32 flags = 5;
|
||
|
}
|
||
|
|
||
|
// Symbol visibility flags
|
||
|
enum SymbolFlag {
|
||
|
SYMBOL_NONE = 0;
|
||
|
SYMBOL_GLOBAL = 1;
|
||
|
SYMBOL_LOCAL = 2;
|
||
|
SYMBOL_WEAK = 3;
|
||
|
SYMBOL_COMMON = 4;
|
||
|
SYMBOL_HIDDEN = 5;
|
||
|
}
|
||
|
|
||
|
// A single parsed instruction
|
||
|
message Instruction {
|
||
|
// Instruction address
|
||
|
uint64 address = 1;
|
||
|
// Instruction size
|
||
|
uint32 size = 2;
|
||
|
// Instruction opcode
|
||
|
uint32 opcode = 3;
|
||
|
// Instruction mnemonic
|
||
|
string mnemonic = 4;
|
||
|
// Instruction formatted string
|
||
|
string formatted = 5;
|
||
|
// Original (unsimplified) instruction string
|
||
|
optional string original = 6;
|
||
|
// Instruction arguments
|
||
|
repeated Argument arguments = 7;
|
||
|
// Instruction relocation
|
||
|
optional Relocation relocation = 8;
|
||
|
// Instruction branch destination
|
||
|
optional uint64 branch_dest = 9;
|
||
|
// Instruction line number
|
||
|
optional uint32 line_number = 10;
|
||
|
}
|
||
|
|
||
|
// An instruction argument
|
||
|
message Argument {
|
||
|
oneof value {
|
||
|
// Plain text
|
||
|
string plain_text = 1;
|
||
|
// Value
|
||
|
ArgumentValue argument = 2;
|
||
|
// Relocation
|
||
|
ArgumentRelocation relocation = 3;
|
||
|
// Branch destination
|
||
|
uint64 branch_dest = 4;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// An instruction argument value
|
||
|
message ArgumentValue {
|
||
|
oneof value {
|
||
|
// Signed integer
|
||
|
int64 signed = 1;
|
||
|
// Unsigned integer
|
||
|
uint64 unsigned = 2;
|
||
|
// Opaque value
|
||
|
string opaque = 3;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Marker type for relocation arguments
|
||
|
message ArgumentRelocation {
|
||
|
}
|
||
|
|
||
|
message Relocation {
|
||
|
uint32 type = 1;
|
||
|
string type_name = 2;
|
||
|
RelocationTarget target = 3;
|
||
|
}
|
||
|
|
||
|
message RelocationTarget {
|
||
|
Symbol symbol = 1;
|
||
|
int64 addend = 2;
|
||
|
}
|
||
|
|
||
|
message InstructionDiff {
|
||
|
DiffKind diff_kind = 1;
|
||
|
optional Instruction instruction = 2;
|
||
|
optional InstructionBranchFrom branch_from = 3;
|
||
|
optional InstructionBranchTo branch_to = 4;
|
||
|
repeated ArgumentDiff arg_diff = 5;
|
||
|
}
|
||
|
|
||
|
message ArgumentDiff {
|
||
|
optional uint32 diff_index = 1;
|
||
|
}
|
||
|
|
||
|
enum DiffKind {
|
||
|
DIFF_NONE = 0;
|
||
|
DIFF_REPLACE = 1;
|
||
|
DIFF_DELETE = 2;
|
||
|
DIFF_INSERT = 3;
|
||
|
DIFF_OP_MISMATCH = 4;
|
||
|
DIFF_ARG_MISMATCH = 5;
|
||
|
}
|
||
|
|
||
|
message InstructionBranchFrom {
|
||
|
repeated uint32 instruction_index = 1;
|
||
|
uint32 branch_index = 2;
|
||
|
}
|
||
|
|
||
|
message InstructionBranchTo {
|
||
|
uint32 instruction_index = 1;
|
||
|
uint32 branch_index = 2;
|
||
|
}
|
||
|
|
||
|
message FunctionDiff {
|
||
|
Symbol symbol = 1;
|
||
|
repeated InstructionDiff instructions = 2;
|
||
|
optional float match_percent = 3;
|
||
|
}
|
||
|
|
||
|
message DataDiff {
|
||
|
DiffKind kind = 1;
|
||
|
bytes data = 2;
|
||
|
// May be larger than data
|
||
|
uint64 size = 3;
|
||
|
}
|
||
|
|
||
|
message SectionDiff {
|
||
|
string name = 1;
|
||
|
SectionKind kind = 2;
|
||
|
uint64 size = 3;
|
||
|
uint64 address = 4;
|
||
|
repeated FunctionDiff functions = 5;
|
||
|
repeated DataDiff data = 6;
|
||
|
optional float match_percent = 7;
|
||
|
}
|
||
|
|
||
|
enum SectionKind {
|
||
|
SECTION_UNKNOWN = 0;
|
||
|
SECTION_TEXT = 1;
|
||
|
SECTION_DATA = 2;
|
||
|
SECTION_BSS = 3;
|
||
|
SECTION_COMMON = 4;
|
||
|
}
|
||
|
|
||
|
message ObjectDiff {
|
||
|
repeated SectionDiff sections = 1;
|
||
|
}
|
||
|
|
||
|
message DiffResult {
|
||
|
optional ObjectDiff left = 1;
|
||
|
optional ObjectDiff right = 2;
|
||
|
}
|