• Ian Lance Taylor's avatar
    cmd/ld: fix bug with "runtime/cgo" in external link mode · 1683dab7
    Ian Lance Taylor authored
    In external link mode the linker explicitly adds the string
    constant "runtime/cgo".  It adds the string constant using the
    same symbol name as the compiler, but a different format.  The
    compiler assumes that the string data immediately follows the
    string header, but the linker puts the two in different
    sections.  The result is bad string data when the compiler
    sees "runtime/cgo" used as a string constant.
    
    The compiler assumption is in datastring in [568]g/gobj.c.
    The linker layout is in addstrdata in ld/data.c.  The compiler
    assumption is valid for string literals.  The linker is not
    creating a string literal, so its assumption is also valid.
    
    There are a few ways to avoid this problem.  This patch fixes
    it by only doing the fake import of runtime/cgo if necessary,
    and by only creating the string symbol if necessary.
    
    Fixes #7234.
    
    LGTM=dvyukov
    R=golang-codereviews, dvyukov, bradfitz
    CC=golang-codereviews
    https://golang.org/cl/58410043
    1683dab7
lib.c 29.7 KB