• David Crawshaw's avatar
    cmd/link: deduplicate read-only string data · afd83543
    David Crawshaw authored
    Many read-only strings in Go binaries are substrings of other read-only
    strings. A common source is the text form of type information, which
    will include both "struct { X int }" and "*struct { X int }" or
    "*bytes.Reader" and "func(*bytes.Reader)" in the same binary.
    
    Because this character data is referred to by separate string headers,
    we can skip writing the smaller string and modify the pointer
    relocation to point to the larger string. This CL does this
    deduplication in the linker after the reachable set of strings has
    been determined.
    
    This removes 765KB from juju (1.4% without DWARF).
    
    Link time goes at tip goes form 4.6s to 6.3s, but note that this CL
    is part of a series that recently reduced link time from 9.6s.
    
    For #6853.
    
    Change-Id: Ib2087cf627c9f1e9a1181f9b4c8f81d1a3f42191
    Reviewed-on: https://go-review.googlesource.com/19987Reviewed-by: 's avatarIan Lance Taylor <iant@golang.org>
    Run-TryBot: David Crawshaw <crawshaw@golang.org>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    afd83543
Name
Last commit
Last update
..
archive Loading commit data...
bufio Loading commit data...
builtin Loading commit data...
bytes Loading commit data...
cmd Loading commit data...
compress Loading commit data...
container Loading commit data...
crypto Loading commit data...
database/sql Loading commit data...
debug Loading commit data...
encoding Loading commit data...
errors Loading commit data...
expvar Loading commit data...
flag Loading commit data...
fmt Loading commit data...
go Loading commit data...
hash Loading commit data...
html Loading commit data...
image Loading commit data...
index/suffixarray Loading commit data...
internal Loading commit data...
io Loading commit data...
log Loading commit data...
math Loading commit data...
mime Loading commit data...
net Loading commit data...
os Loading commit data...
path Loading commit data...
reflect Loading commit data...
regexp Loading commit data...
runtime Loading commit data...
sort Loading commit data...
strconv Loading commit data...
strings Loading commit data...
sync Loading commit data...
syscall Loading commit data...
testing Loading commit data...
text Loading commit data...
time Loading commit data...
unicode Loading commit data...
unsafe Loading commit data...
vendor Loading commit data...
Make.dist Loading commit data...
all.bash Loading commit data...
all.bat Loading commit data...
all.rc Loading commit data...
androidtest.bash Loading commit data...
bootstrap.bash Loading commit data...
buildall.bash Loading commit data...
clean.bash Loading commit data...
clean.bat Loading commit data...
clean.rc Loading commit data...
iostest.bash Loading commit data...
make.bash Loading commit data...
make.bat Loading commit data...
make.rc Loading commit data...
nacltest.bash Loading commit data...
race.bash Loading commit data...
race.bat Loading commit data...
run.bash Loading commit data...
run.bat Loading commit data...
run.rc Loading commit data...