• Keith Randall's avatar
    cmd/compile: change the way we handle large map values · 60fd32a4
    Keith Randall authored
    mapaccess{1,2} returns a pointer to the value.  When the key
    is not in the map, it returns a pointer to zeroed memory.
    Currently, for large map values we have a complicated scheme which
    dynamically allocates zeroed memory for this purpose.  It is ugly
    code and requires an atomic.Load in a bunch of places we'd rather
    not have it.
    
    Switch to a scheme where callsites of mapaccess{1,2} which expect
    large return values pass in a pointer to zeroed memory that
    mapaccess can return if the key is not found.  This avoids the
    atomic.Load on all map accesses with a few extra instructions only
    for the large value acccesses, plus a bit of bss space.
    
    There was a time (1.4 & 1.5?) where we did something like this but
    all the tricks to make the right size zero value were done by the
    linker.  That scheme broke in the presence of dyamic linking.
    The scheme in this CL works even when dynamic linking.
    
    Fixes #12337
    
    Change-Id: Ic2d0319944af33bbb59785938d9ab80958d1b4b1
    Reviewed-on: https://go-review.googlesource.com/22221
    Run-TryBot: Keith Randall <khr@golang.org>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    Reviewed-by: 's avatarMichael Hudson-Doyle <michael.hudson@canonical.com>
    60fd32a4
Name
Last commit
Last update
..
addr2line Loading commit data...
api Loading commit data...
asm Loading commit data...
cgo Loading commit data...
compile Loading commit data...
cover Loading commit data...
dist Loading commit data...
doc Loading commit data...
fix Loading commit data...
go Loading commit data...
gofmt Loading commit data...
internal Loading commit data...
link Loading commit data...
nm Loading commit data...
objdump Loading commit data...
pack Loading commit data...
pprof Loading commit data...
trace Loading commit data...
vet Loading commit data...
yacc Loading commit data...