gdbserial: actually fix ZMM register support (#2516)

PR #2498 / commit d552b338 left out some code due to a clerical error.
This commit is contained in:
Alessandro Arzilli 2021-06-28 17:42:06 +02:00 committed by GitHub
parent 1ebfc5c37b
commit 7f527d26a8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -1853,8 +1853,11 @@ func (t *gdbThread) SetReg(regNum uint64, reg *op.DwarfRegister) error {
gdbreg, ok := t.regs.regs[regName]
if !ok && strings.HasPrefix(regName, "xmm") {
// XMMn and YMMn are the same amd64 register (in different sizes), if we
// don't find XMMn try YMMn instead.
// don't find XMMn try YMMn or ZMMn instead.
gdbreg, ok = t.regs.regs["y"+regName[1:]]
if !ok {
gdbreg, ok = t.regs.regs["z"+regName[1:]]
}
}
if !ok {
return fmt.Errorf("could not set register %s: not found", regName)
@ -1913,8 +1916,16 @@ func (regs *gdbRegisters) Slice(floatingPoint bool) ([]proc.Register, error) {
value := regs.regs[reginfo.Name].value
xmmName := "x" + reginfo.Name[1:]
r = proc.AppendBytesRegister(r, strings.ToUpper(xmmName), value[:16])
r = proc.AppendBytesRegister(r, strings.ToUpper(reginfo.Name), value[16:])
r = proc.AppendBytesRegister(r, strings.ToUpper(xmmName), value)
case reginfo.Bitsize == 512:
if !strings.HasPrefix(strings.ToLower(reginfo.Name), "zmm") || !floatingPoint {
continue
}
value := regs.regs[reginfo.Name].value
xmmName := "x" + reginfo.Name[1:]
r = proc.AppendBytesRegister(r, strings.ToUpper(xmmName), value)
}
}
return r, nil