go-delve/delve · error
can not set %s
Error message
can not set %s
What it means
fbsdutil.SetReg only supports writing XMM0–XMM15 floating-point registers (after handling named GP registers); any other register number yields 'can not set <name>'. Segment registers, debug registers, and other non-XMM registers are deliberately read-only through this path on FreeBSD. The message names the register so you know which write was refused.
Source
Thrown at pkg/proc/fbsdutil/regs.go:243
}
if p != nil {
if reg.Bytes != nil && len(reg.Bytes) != 8 {
return false, fmt.Errorf("wrong number of bytes for register %s (%d)", regnum.AMD64ToName(regNum), len(reg.Bytes))
}
*p = int64(reg.Uint64Val)
return false, nil
}
if r.loadFpRegs != nil {
if err := r.loadFpRegs(r); err != nil {
return false, err
}
r.loadFpRegs = nil
}
if regNum < regnum.AMD64_XMM0 || regNum > regnum.AMD64_XMM0+15 {
return false, fmt.Errorf("can not set %s", regnum.AMD64ToName(regNum))
}
reg.FillBytes()
if err := r.Fpregset.SetXmmRegister(int(regNum-regnum.AMD64_XMM0), reg.Bytes); err != nil {
return false, err
}
return true, nil
}
View on GitHub (pinned to a23773e6c3)
Solutions
- Set the PC via the supported API (e.g. DirChange/SetPC through proc thread methods) instead of raw SetReg
- Restrict writes to XMM0–XMM15 if you need FP register modification
- If you need another register set, extend the FreeBSD backend's SetReg/Fpregset support upstream
Example fix
// before thread.SetReg(regnum.AMD64_RIP, reg) // not supported here // after thread.SetPC(addr) // use the dedicated PC-setting API
Defensive patterns
Strategy: validation
Validate before calling
if regNum < regnum.AMD64_XMM0 || regNum > regnum.AMD64_XMM0+15 {
// route to SetPC or another supported API instead of SetReg
} Type guard
func isSettableXMM(r int) bool { return r >= regnum.AMD64_XMM0 && r <= regnum.AMD64_XMM0+15 } Try / catch
null
Prevention
- Use dedicated APIs (SetPC) for PC/flags changes
- Only write XMM0–XMM15 via SetReg on FreeBSD
- Check per-OS register support before porting tooling
When it happens
Trigger: Attempting to set any register outside XMM0–XMM15 via SetReg — e.g. segment registers (FS/GS), control/debug registers, or an out-of-range regnum — through WriteRegister or the RPC SetRegister API on FreeBSD.
Common situations: Automation trying to tweak PC/RIP through the wrong register API; porting amd64 Linux tooling that sets registers FreeBSD's fbsdutil layer doesn't allow; misnumbered register constants.
Related errors
- procstat_getprocs returned no processes
- wrong number of bytes for register %s (%d)
- can not set %s
- failed to get xstate info: %v
- failed to get xstate: %v
AI-assisted analysis of go-delve/delve@a23773e6c3 (2026-08-31).
Data as JSON: /api/errors/b68d95e2378a0157.
Report an issue: GitHub.