From a22d5632523890d63ad00d1544f3ec7296e96fe9 Mon Sep 17 00:00:00 2001 From: Derek Parker Date: Mon, 4 Aug 2014 13:25:00 -0500 Subject: [PATCH] Refactor: split read* into seperate functions --- proctl/proctl_linux_amd64.go | 43 +++++++++++++++++++++--------------- 1 file changed, 25 insertions(+), 18 deletions(-) diff --git a/proctl/proctl_linux_amd64.go b/proctl/proctl_linux_amd64.go index 58917f38..33bc247f 100644 --- a/proctl/proctl_linux_amd64.go +++ b/proctl/proctl_linux_amd64.go @@ -373,31 +373,38 @@ func (dbp *DebuggedProcess) extractValue(instructions []byte, typ interface{}) ( return "", err } + offset := uintptr(int64(regs.Rsp) + off) + switch typ.(type) { case *dwarf.IntType: - addr := uintptr(int64(regs.Rsp) + off) - val, err := dbp.readMemory(addr, 8) - if err != nil { - return "", err - } + return dbp.readInt(offset) + case *dwarf.FloatType: + return dbp.readFloat64(offset) + } - n := binary.LittleEndian.Uint64(val) + return "", fmt.Errorf("could not find value for type %s", typ) +} - return strconv.Itoa(int(n)), nil - case *dwarf.FloatType: - var n float64 - addr := uintptr(int64(regs.Rsp) + off) - val, err := dbp.readMemory(addr, 8) - if err != nil { - return "", err - } - buf := bytes.NewBuffer(val) - binary.Read(buf, binary.LittleEndian, &n) +func (dbp *DebuggedProcess) readInt(addr uintptr) (string, error) { + val, err := dbp.readMemory(addr, 8) + if err != nil { + return "", err + } + + n := binary.LittleEndian.Uint64(val) - return strconv.FormatFloat(n, 'f', -1, 64), nil + return strconv.Itoa(int(n)), nil +} +func (dbp *DebuggedProcess) readFloat64(addr uintptr) (string, error) { + var n float64 + val, err := dbp.readMemory(addr, 8) + if err != nil { + return "", err } + buf := bytes.NewBuffer(val) + binary.Read(buf, binary.LittleEndian, &n) - return "", fmt.Errorf("could not find value for type %s", typ) + return strconv.FormatFloat(n, 'f', -1, 64), nil } func (dbp *DebuggedProcess) readMemory(addr uintptr, size uintptr) ([]byte, error) { -- GitLab