88 lines
1.5 KiB
Go
88 lines
1.5 KiB
Go
// Copyright (c) 2026 Petr Balvín <opensource@petrbalvin.org> (https://petrbalvin.org)
|
|||
|
|
// SPDX-License-Identifier: BSD-3-Clause
|
||
|
|
|
||
|
|
//go:build linux && arm64
|
||
|
|
|
||
|
|
package debug
|
||
|
|
|
||
|
|
import "fmt"
|
||
|
|
|
||
|
|
// SetReg modifies a register value in the debuggee.
|
||
|
|
func (s *Session) SetReg(name string, value uint64) error {
|
||
|
|
regs, err := s.GetRegs()
|
||
|
|
if err != nil {
|
||
|
|
return err
|
||
|
|
}
|
||
|
|
switch name {
|
||
|
|
case "x0":
|
||
|
|
regs.X0 = value
|
||
|
|
case "x1":
|
||
|
|
regs.X1 = value
|
||
|
|
case "x2":
|
||
|
|
regs.X2 = value
|
||
|
|
case "x3":
|
||
|
|
regs.X3 = value
|
||
|
|
case "x4":
|
||
|
|
regs.X4 = value
|
||
|
|
case "x5":
|
||
|
|
regs.X5 = value
|
||
|
|
case "x6":
|
||
|
|
regs.X6 = value
|
||
|
|
case "x7":
|
||
|
|
regs.X7 = value
|
||
|
|
case "x8":
|
||
|
|
regs.X8 = value
|
||
|
|
case "x9":
|
||
|
|
regs.X9 = value
|
||
|
|
case "x10":
|
||
|
|
regs.X10 = value
|
||
|
|
case "x11":
|
||
|
|
regs.X11 = value
|
||
|
|
case "x12":
|
||
|
|
regs.X12 = value
|
||
|
|
case "x13":
|
||
|
|
regs.X13 = value
|
||
|
|
case "x14":
|
||
|
|
regs.X14 = value
|
||
|
|
case "x15":
|
||
|
|
regs.X15 = value
|
||
|
|
case "x16":
|
||
|
|
regs.X16 = value
|
||
|
|
case "x17":
|
||
|
|
regs.X17 = value
|
||
|
|
case "x18":
|
||
|
|
regs.X18 = value
|
||
|
|
case "x19":
|
||
|
|
regs.X19 = value
|
||
|
|
case "x20":
|
||
|
|
regs.X20 = value
|
||
|
|
case "x21":
|
||
|
|
regs.X21 = value
|
||
|
|
case "x22":
|
||
|
|
regs.X22 = value
|
||
|
|
case "x23":
|
||
|
|
regs.X23 = value
|
||
|
|
case "x24":
|
||
|
|
regs.X24 = value
|
||
|
|
case "x25":
|
||
|
|
regs.X25 = value
|
||
|
|
case "x26":
|
||
|
|
regs.X26 = value
|
||
|
|
case "x27":
|
||
|
|
regs.X27 = value
|
||
|
|
case "x28":
|
||
|
|
regs.X28 = value
|
||
|
|
case "x29", "fp":
|
||
|
|
regs.X29 = value
|
||
|
|
case "x30", "lr":
|
||
|
|
regs.X30 = value
|
||
|
|
case "sp":
|
||
|
|
regs.SP = value
|
||
|
|
case "pc":
|
||
|
|
regs.PC = value
|
||
|
|
default:
|
||
|
|
return fmt.Errorf("debug: unknown register %q", name)
|
||
|
|
}
|
||
|
|
return s.SetRegs(®s)
|
||
|
|
}
|