mirror of
				https://github.com/go-delve/delve.git
				synced 2025-11-04 14:36:47 +08:00 
			
		
		
		
	proc: correctly format ARM64 floating point registers (#2289)
Fixes #2198 Co-authored-by: du.jinze <du.jinze@zte.com.cn>
This commit is contained in:
		
				
					committed by
					
						
						GitHub
					
				
			
			
				
	
			
			
			
						parent
						
							fc9e0be8e7
						
					
				
				
					commit
					fa016faa52
				
			@ -4,7 +4,6 @@ import (
 | 
				
			|||||||
	"bytes"
 | 
						"bytes"
 | 
				
			||||||
	"encoding/binary"
 | 
						"encoding/binary"
 | 
				
			||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
	"io"
 | 
					 | 
				
			||||||
	"strings"
 | 
						"strings"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"github.com/go-delve/delve/pkg/dwarf/frame"
 | 
						"github.com/go-delve/delve/pkg/dwarf/frame"
 | 
				
			||||||
@ -390,33 +389,37 @@ func arm64DwarfRegisterToString(i int, reg *op.DwarfRegister) (name string, floa
 | 
				
			|||||||
		var out bytes.Buffer
 | 
							var out bytes.Buffer
 | 
				
			||||||
		var vi [16]uint8
 | 
							var vi [16]uint8
 | 
				
			||||||
		for i := range vi {
 | 
							for i := range vi {
 | 
				
			||||||
			binary.Read(buf, binary.LittleEndian, &vi[i])
 | 
								_ = binary.Read(buf, binary.LittleEndian, &vi[i])
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
							//D
 | 
				
			||||||
 | 
							fmt.Fprintf(&out, " {\n\tD = {u = {0x%02x%02x%02x%02x%02x%02x%02x%02x,", vi[7], vi[6], vi[5], vi[4], vi[3], vi[2], vi[1], vi[0])
 | 
				
			||||||
 | 
							fmt.Fprintf(&out, " 0x%02x%02x%02x%02x%02x%02x%02x%02x},", vi[15], vi[14], vi[13], vi[12], vi[11], vi[10], vi[9], vi[8])
 | 
				
			||||||
 | 
							fmt.Fprintf(&out, " s = {0x%02x%02x%02x%02x%02x%02x%02x%02x,", vi[7], vi[6], vi[5], vi[4], vi[3], vi[2], vi[1], vi[0])
 | 
				
			||||||
 | 
							fmt.Fprintf(&out, " 0x%02x%02x%02x%02x%02x%02x%02x%02x}},", vi[15], vi[14], vi[13], vi[12], vi[11], vi[10], vi[9], vi[8])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		fmt.Fprintf(&out, "0x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x", vi[15], vi[14], vi[13], vi[12], vi[11], vi[10], vi[9], vi[8], vi[7], vi[6], vi[5], vi[4], vi[3], vi[2], vi[1], vi[0])
 | 
							//S
 | 
				
			||||||
 | 
							fmt.Fprintf(&out, " \n\tS = {u = {0x%02x%02x%02x%02x,0x%02x%02x%02x%02x,", vi[3], vi[2], vi[1], vi[0], vi[7], vi[6], vi[5], vi[4])
 | 
				
			||||||
 | 
							fmt.Fprintf(&out, " 0x%02x%02x%02x%02x,0x%02x%02x%02x%02x},", vi[11], vi[10], vi[9], vi[8], vi[15], vi[14], vi[13], vi[12])
 | 
				
			||||||
 | 
							fmt.Fprintf(&out, " s = {0x%02x%02x%02x%02x,0x%02x%02x%02x%02x,", vi[3], vi[2], vi[1], vi[0], vi[7], vi[6], vi[5], vi[4])
 | 
				
			||||||
 | 
							fmt.Fprintf(&out, " 0x%02x%02x%02x%02x,0x%02x%02x%02x%02x}},", vi[11], vi[10], vi[9], vi[8], vi[15], vi[14], vi[13], vi[12])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		fmt.Fprintf(&out, "\tv2_int={ %02x%02x%02x%02x%02x%02x%02x%02x %02x%02x%02x%02x%02x%02x%02x%02x }", vi[7], vi[6], vi[5], vi[4], vi[3], vi[2], vi[1], vi[0], vi[15], vi[14], vi[13], vi[12], vi[11], vi[10], vi[9], vi[8])
 | 
							//H
 | 
				
			||||||
 | 
							fmt.Fprintf(&out, " \n\tH = {u = {0x%02x%02x,0x%02x%02x,0x%02x%02x,0x%02x%02x,", vi[1], vi[0], vi[3], vi[2], vi[5], vi[4], vi[7], vi[6])
 | 
				
			||||||
 | 
							fmt.Fprintf(&out, " 0x%02x%02x,0x%02x%02x,0x%02x%02x,0x%02x%02x},", vi[9], vi[8], vi[11], vi[10], vi[13], vi[12], vi[15], vi[14])
 | 
				
			||||||
 | 
							fmt.Fprintf(&out, " s = {0x%02x%02x,0x%02x%02x,0x%02x%02x,0x%02x%02x,", vi[1], vi[0], vi[3], vi[2], vi[5], vi[4], vi[7], vi[6])
 | 
				
			||||||
 | 
							fmt.Fprintf(&out, " 0x%02x%02x,0x%02x%02x,0x%02x%02x,0x%02x%02x}},", vi[9], vi[8], vi[11], vi[10], vi[13], vi[12], vi[15], vi[14])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		fmt.Fprintf(&out, "\tv4_int={ %02x%02x%02x%02x %02x%02x%02x%02x %02x%02x%02x%02x %02x%02x%02x%02x }", vi[3], vi[2], vi[1], vi[0], vi[7], vi[6], vi[5], vi[4], vi[11], vi[10], vi[9], vi[8], vi[15], vi[14], vi[13], vi[12])
 | 
							//B
 | 
				
			||||||
 | 
							fmt.Fprintf(&out, " \n\tB = {u = {0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,", vi[0], vi[1], vi[2], vi[3], vi[4], vi[5], vi[6], vi[7])
 | 
				
			||||||
		fmt.Fprintf(&out, "\tv8_int={ %02x%02x %02x%02x %02x%02x %02x%02x %02x%02x %02x%02x %02x%02x %02x%02x }", vi[1], vi[0], vi[3], vi[2], vi[5], vi[4], vi[7], vi[6], vi[9], vi[8], vi[11], vi[10], vi[13], vi[12], vi[15], vi[14])
 | 
							fmt.Fprintf(&out, " 0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x},", vi[8], vi[9], vi[10], vi[11], vi[12], vi[13], vi[14], vi[15])
 | 
				
			||||||
 | 
							fmt.Fprintf(&out, " s = {0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,", vi[0], vi[1], vi[2], vi[3], vi[4], vi[5], vi[6], vi[7])
 | 
				
			||||||
		fmt.Fprintf(&out, "\tv16_int={ %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x }", vi[0], vi[1], vi[2], vi[3], vi[4], vi[5], vi[6], vi[7], vi[8], vi[9], vi[10], vi[11], vi[12], vi[13], vi[14], vi[15])
 | 
							fmt.Fprintf(&out, " 0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x}}", vi[8], vi[9], vi[10], vi[11], vi[12], vi[13], vi[14], vi[15])
 | 
				
			||||||
 | 
					 | 
				
			||||||
		buf.Seek(0, io.SeekStart)
 | 
					 | 
				
			||||||
		var v2 [2]float64
 | 
					 | 
				
			||||||
		for i := range v2 {
 | 
					 | 
				
			||||||
			binary.Read(buf, binary.LittleEndian, &v2[i])
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		fmt.Fprintf(&out, "\tv2_float={ %g %g }", v2[0], v2[1])
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		buf.Seek(0, io.SeekStart)
 | 
					 | 
				
			||||||
		var v4 [4]float32
 | 
					 | 
				
			||||||
		for i := range v4 {
 | 
					 | 
				
			||||||
			binary.Read(buf, binary.LittleEndian, &v4[i])
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		fmt.Fprintf(&out, "\tv4_float={ %g %g %g %g }", v4[0], v4[1], v4[2], v4[3])
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							//Q
 | 
				
			||||||
 | 
							fmt.Fprintf(&out, " \n\tQ = {u = {0x%02x%02x%02x%02x%02x%02x%02x%02x", vi[15], vi[14], vi[13], vi[12], vi[11], vi[10], vi[9], vi[8])
 | 
				
			||||||
 | 
							fmt.Fprintf(&out, "%02x%02x%02x%02x%02x%02x%02x%02x},", vi[7], vi[6], vi[5], vi[4], vi[3], vi[2], vi[1], vi[0])
 | 
				
			||||||
 | 
							fmt.Fprintf(&out, " s = {0x%02x%02x%02x%02x%02x%02x%02x%02x", vi[15], vi[14], vi[13], vi[12], vi[11], vi[10], vi[9], vi[8])
 | 
				
			||||||
 | 
							fmt.Fprintf(&out, "%02x%02x%02x%02x%02x%02x%02x%02x}}\n\t}", vi[7], vi[6], vi[5], vi[4], vi[3], vi[2], vi[1], vi[0])
 | 
				
			||||||
		return name, true, out.String()
 | 
							return name, true, out.String()
 | 
				
			||||||
	} else if reg.Bytes == nil || (reg.Bytes != nil && len(reg.Bytes) < 16) {
 | 
						} else if reg.Bytes == nil || (reg.Bytes != nil && len(reg.Bytes) < 16) {
 | 
				
			||||||
		return name, false, fmt.Sprintf("%#016x", reg.Uint64Val)
 | 
							return name, false, fmt.Sprintf("%#016x", reg.Uint64Val)
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user