• 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
..
Makefile Loading commit data...
asm5.c Loading commit data...
asm6.c Loading commit data...
asm8.c Loading commit data...
data.c Loading commit data...
go.c Loading commit data...
ld.c Loading commit data...
list5.c Loading commit data...
list6.c Loading commit data...
list8.c Loading commit data...
obj.c Loading commit data...
obj5.c Loading commit data...
obj6.c Loading commit data...
obj8.c Loading commit data...
objfile.c Loading commit data...
pass.c Loading commit data...
pcln.c Loading commit data...
sym.c Loading commit data...