• Russ Cox's avatar
    cmd/cc, runtime: convert C compilers to use Go calling convention · 25f6b02a
    Russ Cox authored
    To date, the C compilers and Go compilers differed only in how
    values were returned from functions. This made it difficult to call
    Go from C or C from Go if return values were involved. It also made
    assembly called from Go and assembly called from C different.
    
    This CL changes the C compiler to use the Go conventions, passing
    results on the stack, after the arguments.
    [Exception: this does not apply to C ... functions, because you can't
    know where on the stack the arguments end.]
    
    By doing this, the CL makes it possible to rewrite C functions into Go
    one at a time, without worrying about which languages call that
    function or which languages it calls.
    
    This CL also updates all the assembly files in package runtime to use
    the new conventions. Argument references of the form 40(SP) have
    been rewritten to the form name+10(FP) instead, and there are now
    Go func prototypes for every assembly function called from C or Go.
    This means that 'go vet runtime' checks effectively every assembly
    function, and go vet's output was used to automate the bulk of the
    conversion.
    
    Some functions, like seek and nsec on Plan 9, needed to be rewritten.
    
    Many assembly routines called from C were reading arguments
    incorrectly, using MOVL instead of MOVQ or vice versa, especially on
    the less used systems like openbsd.
    These were found by go vet and have been corrected too.
    If we're lucky, this may reduce flakiness on those systems.
    
    Tested on:
            darwin/386
            darwin/amd64
            linux/arm
            linux/386
            linux/amd64
    If this breaks another system, the bug is almost certainly in the
    sys_$GOOS_$GOARCH.s file, since the rest of the CL is tested
    by the combination of the above systems.
    
    LGTM=dvyukov, iant
    R=golang-codereviews, 0intro, dave, alex.brainman, dvyukov, iant
    CC=golang-codereviews, josharian, r
    https://golang.org/cl/135830043
    25f6b02a
cc.h 14.4 KB