From bd95faa9c33b759bcfa1b432b82f119db3f0f405 Mon Sep 17 00:00:00 2001 From: Luke Street Date: Fri, 15 Aug 2025 14:57:34 -0600 Subject: [PATCH] Remove objdiff-cli diff JSON output mode This has been unimplemented since v3.0.0-alpha.1, and I don't currently have plans to bring it back. If you need it for something, please open an issue! --- objdiff-cli/src/cmd/diff.rs | 42 +--- objdiff-core/protos/diff.proto | 165 ---------------- objdiff-core/protos/proto_descriptor.bin | Bin 17794 -> 9379 bytes objdiff-core/src/bindings/diff.rs | 242 ----------------------- objdiff-core/src/bindings/mod.rs | 2 - 5 files changed, 3 insertions(+), 448 deletions(-) delete mode 100644 objdiff-core/protos/diff.proto delete mode 100644 objdiff-core/src/bindings/diff.rs diff --git a/objdiff-cli/src/cmd/diff.rs b/objdiff-cli/src/cmd/diff.rs index a52d34b..ef6faac 100644 --- a/objdiff-cli/src/cmd/diff.rs +++ b/objdiff-cli/src/cmd/diff.rs @@ -19,7 +19,6 @@ use crossterm::{ }, }; use objdiff_core::{ - bindings::diff::DiffResult, build::{ BuildConfig, BuildStatus, watcher::{Watcher, create_watcher}, @@ -28,7 +27,7 @@ use objdiff_core::{ ProjectConfig, ProjectObject, ProjectObjectMetadata, build_globset, path::{check_path_buf, platform_path, platform_path_serde_option}, }, - diff::{self, DiffObjConfig, MappingConfig, ObjectDiff}, + diff::{DiffObjConfig, MappingConfig, ObjectDiff}, jobs::{ Job, JobQueue, JobResult, objdiff::{ObjDiffConfig, start_build}, @@ -40,10 +39,7 @@ use typed_path::{Utf8PlatformPath, Utf8PlatformPathBuf}; use crate::{ cmd::apply_config_args, - util::{ - output::{OutputFormat, write_output}, - term::crossterm_panic_handler, - }, + util::term::crossterm_panic_handler, views::{EventControlFlow, EventResult, UiView, function_diff::FunctionDiffUi}, }; @@ -63,12 +59,6 @@ pub struct Args { #[argp(option, short = 'u')] /// Unit name within project unit: Option, - #[argp(option, short = 'o', from_str_fn(platform_path))] - /// Output file (one-shot mode) ("-" for stdout) - output: Option, - #[argp(option)] - /// Output format (json, json-pretty, proto) (default: json) - format: Option, #[argp(positional)] /// Function symbol to diff symbol: Option, @@ -171,11 +161,7 @@ pub fn run(args: Args) -> Result<()> { _ => bail!("Either target and base or project and unit must be specified"), }; - if let Some(output) = &args.output { - run_oneshot(&args, output, target_path.as_deref(), base_path.as_deref()) - } else { - run_interactive(args, target_path, base_path, project_config) - } + run_interactive(args, target_path, base_path, project_config) } fn build_config_from_args(args: &Args) -> Result<(DiffObjConfig, MappingConfig)> { @@ -194,28 +180,6 @@ fn build_config_from_args(args: &Args) -> Result<(DiffObjConfig, MappingConfig)> Ok((diff_config, mapping_config)) } -fn run_oneshot( - args: &Args, - output: &Utf8PlatformPath, - target_path: Option<&Utf8PlatformPath>, - base_path: Option<&Utf8PlatformPath>, -) -> Result<()> { - let output_format = OutputFormat::from_option(args.format.as_deref())?; - let (diff_config, mapping_config) = build_config_from_args(args)?; - let target = target_path - .map(|p| obj::read::read(p.as_ref(), &diff_config).with_context(|| format!("Loading {p}"))) - .transpose()?; - let base = base_path - .map(|p| obj::read::read(p.as_ref(), &diff_config).with_context(|| format!("Loading {p}"))) - .transpose()?; - let result = - diff::diff_objs(target.as_ref(), base.as_ref(), None, &diff_config, &mapping_config)?; - let left = target.as_ref().and_then(|o| result.left.as_ref().map(|d| (o, d))); - let right = base.as_ref().and_then(|o| result.right.as_ref().map(|d| (o, d))); - write_output(&DiffResult::new(left, right), Some(output), output_format)?; - Ok(()) -} - pub struct AppState { pub jobs: JobQueue, pub waker: Arc, diff --git a/objdiff-core/protos/diff.proto b/objdiff-core/protos/diff.proto deleted file mode 100644 index c1ad7df..0000000 --- a/objdiff-core/protos/diff.proto +++ /dev/null @@ -1,165 +0,0 @@ -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 = 4; - SYMBOL_COMMON = 8; - SYMBOL_HIDDEN = 16; -} - -// 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 { - uint32 symbol_index = 1; - int64 addend = 2; -} - -message InstructionDiffRow { - 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 SymbolDiff { - Symbol symbol = 1; - repeated InstructionDiffRow instruction_rows = 2; - optional float match_percent = 3; - // The symbol index in the _other_ object that this symbol was diffed against - optional uint32 target_symbol = 5; -} - -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; - reserved 5; - repeated DataDiff data = 6; - optional float match_percent = 7; -} - -enum SectionKind { - SECTION_UNKNOWN = 0; - SECTION_TEXT = 1; - SECTION_DATA = 2; - SECTION_BSS = 3; -} - -message ObjectDiff { - repeated SectionDiff sections = 1; - repeated SymbolDiff symbols = 2; -} - -message DiffResult { - optional ObjectDiff left = 1; - optional ObjectDiff right = 2; -} diff --git a/objdiff-core/protos/proto_descriptor.bin b/objdiff-core/protos/proto_descriptor.bin index 3004765bd2d01da0924e73df9d4e8504d5b68b65..8b3ce1e5cc42540c426829f3bd9503b68e597ade 100644 GIT binary patch delta 10 RcmZqbW?byK`M$zp6#y9d1atrZ literal 17794 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, - _right: Option<(&obj::Object, &diff::ObjectDiff)>, - ) -> Self { - Self { - // TODO - // left: left.map(|(obj, diff)| ObjectDiff::new(obj, diff)), - // right: right.map(|(obj, diff)| ObjectDiff::new(obj, diff)), - left: None, - right: None, - } - } -} - -// impl ObjectDiff { -// pub fn new(obj: &obj::Object, diff: &diff::ObjectDiff) -> Self { -// Self { -// sections: diff -// .sections -// .iter() -// .enumerate() -// .map(|(i, d)| SectionDiff::new(obj, i, d)) -// .collect(), -// } -// } -// } -// -// impl SectionDiff { -// pub fn new(obj: &obj::Object, section_index: usize, section_diff: &diff::SectionDiff) -> Self { -// let section = &obj.sections[section_index]; -// let symbols = section_diff.symbols.iter().map(|d| SymbolDiff::new(obj, d)).collect(); -// let data = section_diff.data_diff.iter().map(|d| DataDiff::new(obj, d)).collect(); -// // TODO: section_diff.reloc_diff -// Self { -// name: section.name.to_string(), -// kind: SectionKind::from(section.kind) as i32, -// size: section.size, -// address: section.address, -// symbols, -// data, -// match_percent: section_diff.match_percent, -// } -// } -// } -// -// impl From for SectionKind { -// fn from(value: obj::SectionKind) -> Self { -// match value { -// obj::SectionKind::Code => SectionKind::SectionText, -// obj::SectionKind::Data => SectionKind::SectionData, -// obj::SectionKind::Bss => SectionKind::SectionBss, -// // TODO common -// } -// } -// } -// -// impl SymbolDiff { -// pub fn new(object: &obj::Object, symbol_diff: &diff::SymbolDiff) -> Self { -// let symbol = object.symbols[symbol_diff.symbol_index]; -// let instructions = symbol_diff -// .instruction_rows -// .iter() -// .map(|ins_diff| InstructionDiff::new(object, ins_diff)) -// .collect(); -// Self { -// symbol: Some(Symbol::new(symbol)), -// instructions, -// match_percent: symbol_diff.match_percent, -// target: symbol_diff.target_symbol.map(SymbolRef::from), -// } -// } -// } -// -// impl DataDiff { -// pub fn new(_object: &obj::Object, data_diff: &diff::DataDiff) -> Self { -// Self { -// kind: DiffKind::from(data_diff.kind) as i32, -// data: data_diff.data.clone(), -// size: data_diff.len as u64, -// } -// } -// } -// -// impl Symbol { -// pub fn new(value: &ObjSymbol) -> Self { -// Self { -// name: value.name.to_string(), -// demangled_name: value.demangled_name.clone(), -// address: value.address, -// size: value.size, -// flags: symbol_flags(value.flags), -// } -// } -// } -// -// fn symbol_flags(value: ObjSymbolFlagSet) -> u32 { -// let mut flags = 0u32; -// if value.0.contains(ObjSymbolFlags::Global) { -// flags |= SymbolFlag::SymbolGlobal as u32; -// } -// if value.0.contains(ObjSymbolFlags::Local) { -// flags |= SymbolFlag::SymbolLocal as u32; -// } -// if value.0.contains(ObjSymbolFlags::Weak) { -// flags |= SymbolFlag::SymbolWeak as u32; -// } -// if value.0.contains(ObjSymbolFlags::Common) { -// flags |= SymbolFlag::SymbolCommon as u32; -// } -// if value.0.contains(ObjSymbolFlags::Hidden) { -// flags |= SymbolFlag::SymbolHidden as u32; -// } -// flags -// } -// -// impl Instruction { -// pub fn new(object: &obj::Object, instruction: &ObjIns) -> Self { -// Self { -// address: instruction.address, -// size: instruction.size as u32, -// opcode: instruction.op as u32, -// mnemonic: instruction.mnemonic.to_string(), -// formatted: instruction.formatted.clone(), -// arguments: instruction.args.iter().map(Argument::new).collect(), -// relocation: instruction.reloc.as_ref().map(|reloc| Relocation::new(object, reloc)), -// branch_dest: instruction.branch_dest, -// line_number: instruction.line, -// original: instruction.orig.clone(), -// } -// } -// } -// -// impl Argument { -// pub fn new(value: &ObjInsArg) -> Self { -// Self { -// value: Some(match value { -// ObjInsArg::PlainText(s) => argument::Value::PlainText(s.to_string()), -// ObjInsArg::Arg(v) => argument::Value::Argument(ArgumentValue::new(v)), -// ObjInsArg::Reloc => argument::Value::Relocation(ArgumentRelocation {}), -// ObjInsArg::BranchDest(dest) => argument::Value::BranchDest(*dest), -// }), -// } -// } -// } -// -// impl ArgumentValue { -// pub fn new(value: &ObjInsArgValue) -> Self { -// Self { -// value: Some(match value { -// ObjInsArgValue::Signed(v) => argument_value::Value::Signed(*v), -// ObjInsArgValue::Unsigned(v) => argument_value::Value::Unsigned(*v), -// ObjInsArgValue::Opaque(v) => argument_value::Value::Opaque(v.to_string()), -// }), -// } -// } -// } -// -// impl Relocation { -// pub fn new(object: &obj::Object, reloc: &ObjReloc) -> Self { -// Self { -// r#type: match reloc.flags { -// object::RelocationFlags::Elf { r_type } => r_type, -// object::RelocationFlags::MachO { r_type, .. } => r_type as u32, -// object::RelocationFlags::Coff { typ } => typ as u32, -// object::RelocationFlags::Xcoff { r_rtype, .. } => r_rtype as u32, -// _ => unreachable!(), -// }, -// type_name: object.arch.display_reloc(reloc.flags).into_owned(), -// target: Some(RelocationTarget { -// symbol: Some(Symbol::new(&reloc.target)), -// addend: reloc.addend, -// }), -// } -// } -// } -// -// impl InstructionDiff { -// pub fn new(object: &obj::Object, instruction_diff: &ObjInsDiff) -> Self { -// Self { -// instruction: instruction_diff.ins.as_ref().map(|ins| Instruction::new(object, ins)), -// diff_kind: DiffKind::from(instruction_diff.kind) as i32, -// branch_from: instruction_diff.branch_from.as_ref().map(InstructionBranchFrom::new), -// branch_to: instruction_diff.branch_to.as_ref().map(InstructionBranchTo::new), -// arg_diff: instruction_diff.arg_diff.iter().map(ArgumentDiff::new).collect(), -// } -// } -// } -// -// impl ArgumentDiff { -// pub fn new(value: &Option) -> Self { -// Self { diff_index: value.as_ref().map(|v| v.idx as u32) } -// } -// } -// -// impl From for DiffKind { -// fn from(value: ObjInsDiffKind) -> Self { -// match value { -// ObjInsDiffKind::None => DiffKind::DiffNone, -// ObjInsDiffKind::OpMismatch => DiffKind::DiffOpMismatch, -// ObjInsDiffKind::ArgMismatch => DiffKind::DiffArgMismatch, -// ObjInsDiffKind::Replace => DiffKind::DiffReplace, -// ObjInsDiffKind::Delete => DiffKind::DiffDelete, -// ObjInsDiffKind::Insert => DiffKind::DiffInsert, -// } -// } -// } -// -// impl From for DiffKind { -// fn from(value: ObjDataDiffKind) -> Self { -// match value { -// ObjDataDiffKind::None => DiffKind::DiffNone, -// ObjDataDiffKind::Replace => DiffKind::DiffReplace, -// ObjDataDiffKind::Delete => DiffKind::DiffDelete, -// ObjDataDiffKind::Insert => DiffKind::DiffInsert, -// } -// } -// } -// -// impl InstructionBranchFrom { -// pub fn new(value: &ObjInsBranchFrom) -> Self { -// Self { -// instruction_index: value.ins_idx.iter().map(|&x| x as u32).collect(), -// branch_index: value.branch_idx as u32, -// } -// } -// } -// -// impl InstructionBranchTo { -// pub fn new(value: &ObjInsBranchTo) -> Self { -// Self { instruction_index: value.ins_idx as u32, branch_index: value.branch_idx as u32 } -// } -// } diff --git a/objdiff-core/src/bindings/mod.rs b/objdiff-core/src/bindings/mod.rs index 4b67b72..7352eef 100644 --- a/objdiff-core/src/bindings/mod.rs +++ b/objdiff-core/src/bindings/mod.rs @@ -1,3 +1 @@ -#[cfg(feature = "any-arch")] -pub mod diff; pub mod report;