proc: add support for setting additional registers on freebsd/amd64 (#2981)

These are needed for delve to work on freebsd/amd64 with regabi.
This commit is contained in:
Joel Sing 2022-04-27 07:31:48 +10:00 committed by GitHub
parent 9319cc34c9
commit c120db3467
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -32,12 +32,40 @@ func (thread *nativeThread) SetReg(regNum uint64, reg *op.DwarfRegister) (err er
} }
r := ir.(*fbsdutil.AMD64Registers) r := ir.(*fbsdutil.AMD64Registers)
switch regNum { switch regNum {
case regnum.AMD64_Rip: case regnum.AMD64_Rax:
r.Regs.Rip = int64(reg.Uint64Val) r.Regs.Rax = int64(reg.Uint64Val)
case regnum.AMD64_Rsp: case regnum.AMD64_Rbx:
r.Regs.Rsp = int64(reg.Uint64Val) r.Regs.Rbx = int64(reg.Uint64Val)
case regnum.AMD64_Rcx:
r.Regs.Rcx = int64(reg.Uint64Val)
case regnum.AMD64_Rdx: case regnum.AMD64_Rdx:
r.Regs.Rdx = int64(reg.Uint64Val) r.Regs.Rdx = int64(reg.Uint64Val)
case regnum.AMD64_Rsi:
r.Regs.Rsi = int64(reg.Uint64Val)
case regnum.AMD64_Rdi:
r.Regs.Rdi = int64(reg.Uint64Val)
case regnum.AMD64_Rbp:
r.Regs.Rbp = int64(reg.Uint64Val)
case regnum.AMD64_Rsp:
r.Regs.Rsp = int64(reg.Uint64Val)
case regnum.AMD64_R8:
r.Regs.R8 = int64(reg.Uint64Val)
case regnum.AMD64_R9:
r.Regs.R9 = int64(reg.Uint64Val)
case regnum.AMD64_R10:
r.Regs.R10 = int64(reg.Uint64Val)
case regnum.AMD64_R11:
r.Regs.R11 = int64(reg.Uint64Val)
case regnum.AMD64_R12:
r.Regs.R12 = int64(reg.Uint64Val)
case regnum.AMD64_R13:
r.Regs.R13 = int64(reg.Uint64Val)
case regnum.AMD64_R14:
r.Regs.R14 = int64(reg.Uint64Val)
case regnum.AMD64_R15:
r.Regs.R15 = int64(reg.Uint64Val)
case regnum.AMD64_Rip:
r.Regs.Rip = int64(reg.Uint64Val)
default: default:
return fmt.Errorf("changing register %d not implemented", regNum) return fmt.Errorf("changing register %d not implemented", regNum)
} }