{"record":{"id":"b68d95e2378a0157","repo":"go-delve/delve","slug":"can-not-set-s","errorCode":null,"errorMessage":"can not set %s","messagePattern":"can not set (.+?)","errorType":"error_code","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/proc/fbsdutil/regs.go","lineNumber":243,"sourceCode":"\t}\n\n\tif p != nil {\n\t\tif reg.Bytes != nil && len(reg.Bytes) != 8 {\n\t\t\treturn false, fmt.Errorf(\"wrong number of bytes for register %s (%d)\", regnum.AMD64ToName(regNum), len(reg.Bytes))\n\t\t}\n\t\t*p = int64(reg.Uint64Val)\n\t\treturn false, nil\n\t}\n\n\tif r.loadFpRegs != nil {\n\t\tif err := r.loadFpRegs(r); err != nil {\n\t\t\treturn false, err\n\t\t}\n\t\tr.loadFpRegs = nil\n\t}\n\n\tif regNum < regnum.AMD64_XMM0 || regNum > regnum.AMD64_XMM0+15 {\n\t\treturn false, fmt.Errorf(\"can not set %s\", regnum.AMD64ToName(regNum))\n\t}\n\n\treg.FillBytes()\n\n\tif err := r.Fpregset.SetXmmRegister(int(regNum-regnum.AMD64_XMM0), reg.Bytes); err != nil {\n\t\treturn false, err\n\t}\n\treturn true, nil\n}\n","sourceCodeStart":225,"sourceCodeEnd":253,"githubUrl":"https://github.com/go-delve/delve/blob/a23773e6c31361e43246bc43a424ee009679b174/pkg/proc/fbsdutil/regs.go#L225-L253","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","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"],"exampleFix":"// before\nthread.SetReg(regnum.AMD64_RIP, reg) // not supported here\n// after\nthread.SetPC(addr) // use the dedicated PC-setting API","handlingStrategy":"validation","validationCode":"if regNum < regnum.AMD64_XMM0 || regNum > regnum.AMD64_XMM0+15 {\n\t// route to SetPC or another supported API instead of SetReg\n}","typeGuard":"func isSettableXMM(r int) bool { return r >= regnum.AMD64_XMM0 && r <= regnum.AMD64_XMM0+15 }","tryCatchPattern":"null","preventionTips":["Use dedicated APIs (SetPC) for PC/flags changes","Only write XMM0–XMM15 via SetReg on FreeBSD","Check per-OS register support before porting tooling"],"tags":["freebsd","registers","xmm"],"backgroundTag":"register-write-not-supported","analyzedSha":"a23773e6c31361e43246bc43a424ee009679b174","analyzedAt":"2026-08-31T15:12:45.221Z","schemaVersion":2},"datasetVersion":"2026-08-31T19:17:28.585Z"}