diff options
Diffstat (limited to 'libgo/go/runtime/print.go')
-rw-r--r-- | libgo/go/runtime/print.go | 26 |
1 files changed, 8 insertions, 18 deletions
diff --git a/libgo/go/runtime/print.go b/libgo/go/runtime/print.go index be51ac0..d141061 100644 --- a/libgo/go/runtime/print.go +++ b/libgo/go/runtime/print.go @@ -238,13 +238,15 @@ func printint(v int64) { printuint(uint64(v)) } +var minhexdigits = 0 // protected by printlock + func printhex(v uint64) { const dig = "0123456789abcdef" var buf [100]byte i := len(buf) for i--; i > 0; i-- { buf[i] = dig[v%16] - if v < 16 { + if v < 16 && len(buf)-i >= minhexdigits { break } v /= 16 @@ -287,29 +289,16 @@ func printiface(i iface) { // and should return a character mark to appear just before that // word's value. It can return 0 to indicate no mark. func hexdumpWords(p, end uintptr, mark func(uintptr) byte) { - p1 := func(x uintptr) { - var buf [2 * sys.PtrSize]byte - for i := len(buf) - 1; i >= 0; i-- { - if x&0xF < 10 { - buf[i] = byte(x&0xF) + '0' - } else { - buf[i] = byte(x&0xF) - 10 + 'a' - } - x >>= 4 - } - gwrite(buf[:]) - } - printlock() var markbuf [1]byte markbuf[0] = ' ' + minhexdigits = int(unsafe.Sizeof(uintptr(0)) * 2) for i := uintptr(0); p+i < end; i += sys.PtrSize { if i%16 == 0 { if i != 0 { println() } - p1(p + i) - print(": ") + print(hex(p+i), ": ") } if mark != nil { @@ -320,16 +309,17 @@ func hexdumpWords(p, end uintptr, mark func(uintptr) byte) { } gwrite(markbuf[:]) val := *(*uintptr)(unsafe.Pointer(p + i)) - p1(val) + print(hex(val)) print(" ") // Can we symbolize val? name, _, _, _ := funcfileline(val, -1, false) if name != "" { entry := funcentry(val) - print("<", name, "+", val-entry, "> ") + print("<", name, "+", hex(val-entry), "> ") } } + minhexdigits = 0 println() printunlock() } |