Skip to content

Commit 1ba07d1

Browse files
committed
Stop filtering symbols from diff output, replace flags bitmask with message
Remove the symbol filter (size == 0 / Ignored) from DiffObject so all symbols are emitted. This fixes target_symbol indices being invalid after filtering. Replace the DiffSymbolFlag bitmask enum + uint32 field with a DiffSymbolFlags message of booleans, adding ignored and size_inferred flags so consumers can filter on their end.
1 parent 44254cb commit 1ba07d1

3 files changed

Lines changed: 20 additions & 30 deletions

File tree

objdiff-core/protos/diff.proto

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ message DiffSymbol {
3939
optional string demangled_name = 2;
4040
uint64 address = 3;
4141
uint64 size = 4;
42-
uint32 flags = 5;
42+
DiffSymbolFlags flags = 5;
4343
DiffSymbolKind kind = 10;
4444
// The symbol index in the _other_ object that this symbol was diffed against
4545
optional uint32 target_symbol = 6;
@@ -57,14 +57,15 @@ enum DiffSymbolKind {
5757
SYMBOL_SECTION = 3;
5858
}
5959

60-
// Symbol visibility flags (bitmask)
61-
enum DiffSymbolFlag {
62-
SYMBOL_NONE = 0;
63-
SYMBOL_GLOBAL = 1;
64-
SYMBOL_LOCAL = 2;
65-
SYMBOL_WEAK = 4;
66-
SYMBOL_COMMON = 8;
67-
SYMBOL_HIDDEN = 16;
60+
// Symbol flags
61+
message DiffSymbolFlags {
62+
bool global = 1;
63+
bool local = 2;
64+
bool weak = 3;
65+
bool common = 4;
66+
bool hidden = 5;
67+
bool ignored = 6;
68+
bool size_inferred = 7;
6869
}
6970

7071
// A single instruction diff row
220 Bytes
Binary file not shown.

objdiff-core/src/bindings/diff.rs

Lines changed: 10 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,6 @@ impl DiffObject {
4343
let mut symbols = Vec::with_capacity(obj.symbols.len());
4444
for (symbol_idx, symbol) in obj.symbols.iter().enumerate() {
4545
let symbol_diff = &diff.symbols[symbol_idx];
46-
if symbol.size == 0 || symbol.flags.contains(SymbolFlag::Ignored) {
47-
continue;
48-
}
4946
symbols.push(DiffSymbol::new(obj, symbol_idx, symbol, symbol_diff, diff_config)?);
5047
}
5148

@@ -133,24 +130,16 @@ impl From<obj::SymbolKind> for DiffSymbolKind {
133130
}
134131
}
135132

136-
fn symbol_flags(flags: &obj::SymbolFlagSet) -> u32 {
137-
let mut result = 0u32;
138-
if flags.contains(SymbolFlag::Global) {
139-
result |= DiffSymbolFlag::SymbolGlobal as u32;
140-
}
141-
if flags.contains(SymbolFlag::Local) {
142-
result |= DiffSymbolFlag::SymbolLocal as u32;
143-
}
144-
if flags.contains(SymbolFlag::Weak) {
145-
result |= DiffSymbolFlag::SymbolWeak as u32;
146-
}
147-
if flags.contains(SymbolFlag::Common) {
148-
result |= DiffSymbolFlag::SymbolCommon as u32;
149-
}
150-
if flags.contains(SymbolFlag::Hidden) {
151-
result |= DiffSymbolFlag::SymbolHidden as u32;
152-
}
153-
result
133+
fn symbol_flags(flags: &obj::SymbolFlagSet) -> Option<DiffSymbolFlags> {
134+
Some(DiffSymbolFlags {
135+
global: flags.contains(SymbolFlag::Global),
136+
local: flags.contains(SymbolFlag::Local),
137+
weak: flags.contains(SymbolFlag::Weak),
138+
common: flags.contains(SymbolFlag::Common),
139+
hidden: flags.contains(SymbolFlag::Hidden),
140+
ignored: flags.contains(SymbolFlag::Ignored),
141+
size_inferred: flags.contains(SymbolFlag::SizeInferred),
142+
})
154143
}
155144

156145
impl DiffInstructionRow {

0 commit comments

Comments
 (0)