Files
gasm-sdk/debug/tracer.go
T
petrbalvin 1bf95a169e
Test / vet (push) Successful in 47s
Test / test (push) Successful in 2m39s
Test / build (push) Successful in 42s
fix: resolve audit findings — stale text, dead code, build tags, docs
Assisted-by: MiMo V2.5 Pro
2026-08-21 00:50:31 +02:00

61 lines
1.3 KiB
Go

// Copyright (c) 2026 Petr Balvín <opensource@petrbalvin.org> (https://petrbalvin.org)
// SPDX-License-Identifier: BSD-3-Clause
//go:build linux
package debug
// tracer abstracts the minimal ptrace operations needed by the breakpoint
// manager and the stop-information helpers. The live implementation is
// *Session (ptrace_linux_amd64.go); tests supply a mock.
type tracer interface {
Peek(addr uint64) (uint64, error)
Poke(addr uint64, val uint64) error
SetRegs(regs *Regs) error
Pid() int
}
// mockTracer records Peek/Poke calls and provides fake register state.
type mockTracer struct {
mem map[uint64]byte
peeks []uint64
pokes []struct {
addr uint64
val uint64
}
regs *Regs
}
func newMockTracer() *mockTracer {
return &mockTracer{
mem: make(map[uint64]byte),
regs: &Regs{},
}
}
func (m *mockTracer) Peek(addr uint64) (uint64, error) {
m.peeks = append(m.peeks, addr)
var val uint64
for i := uint64(0); i < 8; i++ {
val |= uint64(m.mem[addr+i]) << (i * 8)
}
return val, nil
}
func (m *mockTracer) Poke(addr uint64, val uint64) error {
m.pokes = append(m.pokes, struct {
addr uint64
val uint64
}{addr, val})
for i := uint64(0); i < 8; i++ {
m.mem[addr+i] = byte(val >> (i * 8))
}
return nil
}
func (m *mockTracer) SetRegs(regs *Regs) error {
m.regs = regs
return nil
}
func (m *mockTracer) Pid() int { return 42 }