• Russ Cox's avatar
    cmd/cc, cmd/ld, runtime: disallow conservative data/bss objects · 193daab9
    Russ Cox authored
    In linker, refuse to write conservative (array of pointers) as the
    garbage collection type for any variable in the data/bss GC program.
    
    In the linker, attach the Go type to an already-read C declaration
    during dedup. This gives us Go types for C globals for free as long
    as the cmd/dist-generated Go code contains the declaration.
    (Most runtime C declarations have a corresponding Go declaration.
    Both are bss declarations and so the linker dedups them.)
    
    In cmd/dist, add a few more C files to the auto-Go-declaration list
    in order to get Go type information for the C declarations into the linker.
    
    In C compiler, mark all non-pointer-containing global declarations
    and all string data as NOPTR. This allows them to exist in C files
    without any corresponding Go declaration. Count C function pointers
    as "non-pointer-containing", since we have no heap-allocated C functions.
    
    In runtime, add NOPTR to the remaining pointer-containing declarations,
    none of which refer to Go heap objects.
    
    In runtime, also move os.Args and syscall.envs data into runtime-owned
    variables. Otherwise, in programs that do not import os or syscall, the
    runtime variables named os.Args and syscall.envs will be missing type
    information.
    
    I believe that this CL eliminates the final source of conservative GC scanning
    in non-SWIG Go programs, and therefore...
    
    Fixes #909.
    
    LGTM=iant
    R=iant
    CC=golang-codereviews
    https://golang.org/cl/149770043
    193daab9
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/syscall Loading commit data...
io Loading commit data...
lib9 Loading commit data...
libbio Loading commit data...
liblink 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...
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...
clean.bash Loading commit data...
clean.bat Loading commit data...
clean.rc 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...
sudo.bash Loading commit data...