mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
cmd/compile: remove rtype.ptrToThis
Simplifies some code as ptrToThis was unreliable under dynamic linking. Now the same type lookup is used regardless of execution mode. A synthetic relocation, R_USETYPE, is introduced to make sure the linker includes *T on use of T, if *T is carrying methods. Changes the heap dump format. Anything reading the format needs to look at the last bool of a type of an interface value to determine if the type should be the pointer-to type. Reduces binary size of cmd/go by 0.2%. For #6853. Change-Id: I79fcb19a97402bdb0193f3c7f6d94ddf061ee7b2 Reviewed-on: https://go-review.googlesource.com/19695 Reviewed-by: Keith Randall <khr@golang.org> Run-TryBot: David Crawshaw <crawshaw@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
This commit is contained in:
parent
5abd327d00
commit
30f93f0994
6 changed files with 30 additions and 72 deletions
|
|
@ -502,28 +502,10 @@ func dumpparams() {
|
|||
|
||||
func itab_callback(tab *itab) {
|
||||
t := tab._type
|
||||
// Dump a map from itab* to the type of its data field.
|
||||
// We want this map so we can deduce types of interface referents.
|
||||
if t.kind&kindDirectIface == 0 {
|
||||
// indirect - data slot is a pointer to t.
|
||||
dumptype(t.ptrto)
|
||||
dumpint(tagItab)
|
||||
dumpint(uint64(uintptr(unsafe.Pointer(tab))))
|
||||
dumpint(uint64(uintptr(unsafe.Pointer(t.ptrto))))
|
||||
} else if t.kind&kindNoPointers == 0 {
|
||||
// t is pointer-like - data slot is a t.
|
||||
dumptype(t)
|
||||
dumpint(tagItab)
|
||||
dumpint(uint64(uintptr(unsafe.Pointer(tab))))
|
||||
dumpint(uint64(uintptr(unsafe.Pointer(t))))
|
||||
} else {
|
||||
// Data slot is a scalar. Dump type just for fun.
|
||||
// With pointer-only interfaces, this shouldn't happen.
|
||||
dumptype(t)
|
||||
dumpint(tagItab)
|
||||
dumpint(uint64(uintptr(unsafe.Pointer(tab))))
|
||||
dumpint(uint64(uintptr(unsafe.Pointer(t))))
|
||||
}
|
||||
dumptype(t)
|
||||
dumpint(tagItab)
|
||||
dumpint(uint64(uintptr(unsafe.Pointer(tab))))
|
||||
dumpint(uint64(uintptr(unsafe.Pointer(t))))
|
||||
}
|
||||
|
||||
func dumpitabs() {
|
||||
|
|
@ -639,7 +621,7 @@ func dumpmemprof() {
|
|||
}
|
||||
}
|
||||
|
||||
var dumphdr = []byte("go1.6 heap dump\n")
|
||||
var dumphdr = []byte("go1.7 heap dump\n")
|
||||
|
||||
func mdump() {
|
||||
// make sure we're done sweeping
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue