]> Cypherpunks repositories - gostls13.git/commit
cmd/link: retain only used interface methods
authorCherry Zhang <cherryyz@google.com>
Tue, 22 Sep 2020 00:44:53 +0000 (20:44 -0400)
committerCherry Zhang <cherryyz@google.com>
Tue, 29 Sep 2020 16:30:26 +0000 (16:30 +0000)
commit39dde09126be02f5f8c38ddf7590ae8f9825fcaa
treef8c66e4386c0226c376d7287dd639f0287b79feb
parent39a426d35615da2ef594cd72ea5de54a543305e1
cmd/link: retain only used interface methods

Currently, in the linker's deadcode pass, when an interface type
is live, the linker thinks all its methods are live, and uses
them to match methods on concrete types. The interface method may
never be used, though.

This CL changes it to only keep used interface methods, for
matching concrete type methods. To do that, when an interface
method is used, the compiler generates a mark relocation. The
linker uses the marker relocations to mark used interface
methods, and only the used ones.

binary size    before      after
cmd/compile   18887400   18812200
cmd/go        13470652   13470492

Change-Id: I3cfd9df4a53783330ba87735853f2a0ec3c42802
Reviewed-on: https://go-review.googlesource.com/c/go/+/256798
Trust: Cherry Zhang <cherryyz@google.com>
Reviewed-by: Than McIntosh <thanm@google.com>
Reviewed-by: Jeremy Faller <jeremy@golang.org>
src/cmd/compile/internal/gc/reflect.go
src/cmd/compile/internal/gc/walk.go
src/cmd/internal/objabi/reloctype.go
src/cmd/internal/objabi/reloctype_string.go
src/cmd/link/internal/ld/deadcode.go
src/cmd/link/internal/ld/deadcode_test.go
src/cmd/link/internal/ld/testdata/deadcode/ifacemethod4.go [new file with mode: 0644]