8000 Tags · loov/ixdiff · GitHub
[go: up one dir, main page]

Skip to content

Tags

Tags

v0.3.3

Toggle v0.3.3's commit message
ixdiff: update golang.org/x/arch to ab53fe6c43b6

x/arch v0.31.0 does not decode VEX-encoded MULXQ, which bits.Mul64
can compile to at GOAMD64=v3. The undecodable first byte became a BYTE
pseudo-instruction and decoding resumed inside the instruction, so the
rest of the function decoded as garbage: junk opcodes in the histogram,
wrong instruction and spill counts, and noisy function diffs. The x86
relocation walk failed on such functions and fell back to full
analysis.

Update to the commit the Go tree vendors, which decodes MULXQ with the
same Go syntax as go tool objdump. Add a fixture function written in
assembly around a MULXQ, since the compiler emits it only for some code
shapes, and tests at the decoder, the relocation walk, and the listing.
The x86 decoder still misreads VZEROUPPER, so its length correction
stays.

v0.3.2

Toggle v0.3.2's commit message
Single-binary mode and disasm v0.1.2

- ixdiff <binary> prints stats: function count, text size, instruction
  counts by opcode, and the largest packages and functions.
- ixdiff --fn <name> <binary> prints the disassembly of one function.
- Binaries are loaded via github.com/loov/disasm v0.1.2.

v0.3.1

Toggle v0.3.1's commit message
Spill metric split: registers moved vs stack slots touched

- SpillDelta is now strictly registers moved to or from the stack
  (register-pressure events); the amd64 X15 zeroing special case that
  mixed definitions is removed.
- New SlotDelta counts 8-byte stack slots touched: memory traffic,
  neutral under pair/vector/scalar lowering conversions (MOVUPS 2,
  STP 2, STPW 1, FSTPQ 4, s390x load/store-multiple by range).
- Tables gain a slots column and --sort slots, JSON gains slot_delta,
  and the library gains Func.StackSlots.

v0.3.0

Toggle v0.3.0's commit message
Importable library, spill metric, and Go compile archive support

- The analysis core is now an importable package,
  github.com/loov/ixdiff/ixdiff: open two binaries, pair their
  functions, and query diffs, opcode deltas, and metrics from Go.
- New spill metric: per-function and aggregate deltas of stack
  accesses, weighted by the registers each access moves (arm64
  pairs, s390x load/store-multiple ranges, amd64 X15 zeroing).
  Accesses through a scratch register holding a stack address are
  tracked on amd64, 386, arm64, riscv64, and loong64. Ranking
  tables gain a spills column and --sort spills.
- Go compile archives (.a files from go
7D04
 tool compile) can be
  compared directly.

v0.2.0

Toggle v0.2.0's commit message
Seven new architectures: 386, arm, riscv64, ppc64/ppc64le, s390x, loo…

…ng64, and wasm

- Instruction decoding, operand normalization, and cross-build masking
  for each new architecture, with relocation-only fast paths on 386,
  arm, riscv64, and loong64.
- The amd64 fast path now verifies rip-relative references to text
  symbols, so a retargeted function reference is no longer classified
  as relocation noise.
- --mask-sp is arch-aware and --blocks splits blocks on every
  architecture.
- Loaders hardened against malformed ELF, Mach-O, PE, and wasm inputs;
  non-thread-safe x/arch decoders are serialized.
- mips remains unsupported pending an upstream golang.org/x/arch
  disassembler (golang/go#19158).

v0.1.0

Toggle v0.1.0's commit message
ixdiff: trim README intro and show a side-by-side example

Drop the implementation-detail paragraph from the introduction and
demonstrate --side-by-side with the same function as the unified diff
example, captured from the real tsgo comparison.
0