Don't assume pointer size
This commit is contained in:
parent
8e40467c95
commit
04da3fcbc8
@ -25,6 +25,8 @@ type M struct {
|
|||||||
curg uintptr
|
curg uintptr
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const ptrsize uintptr = unsafe.Sizeof(int(1))
|
||||||
|
|
||||||
// Parses and returns select info on the internal M
|
// Parses and returns select info on the internal M
|
||||||
// data structures used by the Go scheduler.
|
// data structures used by the Go scheduler.
|
||||||
func (thread *ThreadContext) AllM() ([]*M, error) {
|
func (thread *ThreadContext) AllM() ([]*M, error) {
|
||||||
@ -34,7 +36,7 @@ func (thread *ThreadContext) AllM() ([]*M, error) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
mptr, err := thread.readMemory(uintptr(allmaddr), 8)
|
mptr, err := thread.readMemory(uintptr(allmaddr), ptrsize)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -72,7 +74,7 @@ func (thread *ThreadContext) AllM() ([]*M, error) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
curgBytes, err := thread.readMemory(uintptr(curgAddr), 8)
|
curgBytes, err := thread.readMemory(uintptr(curgAddr), ptrsize)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("could not read curg %#v %s", curgAddr, err)
|
return nil, fmt.Errorf("could not read curg %#v %s", curgAddr, err)
|
||||||
}
|
}
|
||||||
@ -83,7 +85,7 @@ func (thread *ThreadContext) AllM() ([]*M, error) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
procidBytes, err := thread.readMemory(uintptr(procidAddr), 8)
|
procidBytes, err := thread.readMemory(uintptr(procidAddr), ptrsize)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("could not read procid %#v %s", procidAddr, err)
|
return nil, fmt.Errorf("could not read procid %#v %s", procidAddr, err)
|
||||||
}
|
}
|
||||||
@ -121,7 +123,7 @@ func (thread *ThreadContext) AllM() ([]*M, error) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
mptr, err = thread.readMemory(uintptr(alllinkAddr), 8)
|
mptr, err = thread.readMemory(uintptr(alllinkAddr), ptrsize)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("could not read alllink %#v %s", alllinkAddr, err)
|
return nil, fmt.Errorf("could not read alllink %#v %s", alllinkAddr, err)
|
||||||
}
|
}
|
||||||
@ -193,11 +195,11 @@ func (dbp *DebuggedProcess) PrintGoroutinesInfo() error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
fmt.Printf("[%d goroutines]\n", allglen)
|
fmt.Printf("[%d goroutines]\n", allglen)
|
||||||
faddr, err := dbp.CurrentThread.readMemory(uintptr(allgentryaddr), 8)
|
faddr, err := dbp.CurrentThread.readMemory(uintptr(allgentryaddr), ptrsize)
|
||||||
allg := binary.LittleEndian.Uint64(faddr)
|
allg := binary.LittleEndian.Uint64(faddr)
|
||||||
|
|
||||||
for i := uint64(0); i < allglen; i++ {
|
for i := uint64(0); i < allglen; i++ {
|
||||||
err = printGoroutineInfo(dbp, allg+(i*8), reader)
|
err = printGoroutineInfo(dbp, allg+(i*uint64(ptrsize)), reader)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -207,7 +209,7 @@ func (dbp *DebuggedProcess) PrintGoroutinesInfo() error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func printGoroutineInfo(dbp *DebuggedProcess, addr uint64, reader *dwarf.Reader) error {
|
func printGoroutineInfo(dbp *DebuggedProcess, addr uint64, reader *dwarf.Reader) error {
|
||||||
gaddrbytes, err := dbp.CurrentThread.readMemory(uintptr(addr), 8)
|
gaddrbytes, err := dbp.CurrentThread.readMemory(uintptr(addr), ptrsize)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("error derefing *G %s", err)
|
return fmt.Errorf("error derefing *G %s", err)
|
||||||
}
|
}
|
||||||
@ -224,11 +226,11 @@ func printGoroutineInfo(dbp *DebuggedProcess, addr uint64, reader *dwarf.Reader)
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
goidbytes, err := dbp.CurrentThread.readMemory(uintptr(goidaddr), 8)
|
goidbytes, err := dbp.CurrentThread.readMemory(uintptr(goidaddr), ptrsize)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("error reading goid %s", err)
|
return fmt.Errorf("error reading goid %s", err)
|
||||||
}
|
}
|
||||||
schedbytes, err := dbp.CurrentThread.readMemory(uintptr(schedaddr+8), 8)
|
schedbytes, err := dbp.CurrentThread.readMemory(uintptr(schedaddr+uint64(ptrsize)), ptrsize)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("error reading sched %s", err)
|
return fmt.Errorf("error reading sched %s", err)
|
||||||
}
|
}
|
||||||
@ -463,7 +465,7 @@ func (thread *ThreadContext) extractValue(instructions []byte, off int64, typ in
|
|||||||
offaddr := uintptr(offset)
|
offaddr := uintptr(offset)
|
||||||
switch t := typ.(type) {
|
switch t := typ.(type) {
|
||||||
case *dwarf.PtrType:
|
case *dwarf.PtrType:
|
||||||
addr, err := thread.readMemory(offaddr, 8)
|
addr, err := thread.readMemory(offaddr, ptrsize)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
@ -577,7 +579,7 @@ func (thread *ThreadContext) readIntArray(addr uintptr, t *dwarf.ArrayType) (str
|
|||||||
members = append(members, number)
|
members = append(members, number)
|
||||||
}
|
}
|
||||||
|
|
||||||
return fmt.Sprintf("[%d]int %d", t.ByteSize/8, members), nil
|
return fmt.Sprintf("[%d]int %d", t.ByteSize/int64(ptrsize), members), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (thread *ThreadContext) readInt(addr uintptr, size int64) (string, error) {
|
func (thread *ThreadContext) readInt(addr uintptr, size int64) (string, error) {
|
||||||
|
Loading…
Reference in New Issue
Block a user