aboutsummaryrefslogtreecommitdiff
path: root/libgo/go/runtime/print.go
diff options
context:
space:
mode:
Diffstat (limited to 'libgo/go/runtime/print.go')
-rw-r--r--libgo/go/runtime/print.go26
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()
}