Skip to content
Snippets Groups Projects
  • Nikhil Benesch's avatar
    0cdde1e7
    libgo: handle linking to NetBSD's versioned symbols · 0cdde1e7
    Nikhil Benesch authored
    On NetBSD, for backwards compatibility, various libc symbols are
    renamed to a symbol with a version suffix. For example, this is the
    (abbreviated) definition of sigaction:
    
        int sigaction(...) __asm__ ("__sigaction14")
    
    This poses a challenge for libgo, which attempts to link sigaction by
    way of an "//extern" comment:
    
        //extern sigaction
        func sigaction(...)
    
    This results in a reference to the deprecated compatibility symbol
    "sigaction", rather than the desired "__sigaction14" symbol.
    
    This patch introduces a new "//extern-sysinfo" comment to handle this
    situation. The new mklinknames.awk script scans a package for these
    comments and outputs a "//go:linkname" directive that links the wrapper
    to the correct versioned symbol, as determined by parsing the __asm__
    annotation on the function's declaration in gen-sysinfo.go.
    
    For now, only the following packages are scanned by mklinknames.awk:
    
        os
        os/user
        runtime
        syscall
    
    gotools/:
    	* Makefile.am (check-runtime): Add runtime_linknames.go to
    	--extrafiles.
    	* Makefile.in: Regenerate.
    
    Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/265125
    0cdde1e7
    History
    libgo: handle linking to NetBSD's versioned symbols
    Nikhil Benesch authored
    On NetBSD, for backwards compatibility, various libc symbols are
    renamed to a symbol with a version suffix. For example, this is the
    (abbreviated) definition of sigaction:
    
        int sigaction(...) __asm__ ("__sigaction14")
    
    This poses a challenge for libgo, which attempts to link sigaction by
    way of an "//extern" comment:
    
        //extern sigaction
        func sigaction(...)
    
    This results in a reference to the deprecated compatibility symbol
    "sigaction", rather than the desired "__sigaction14" symbol.
    
    This patch introduces a new "//extern-sysinfo" comment to handle this
    situation. The new mklinknames.awk script scans a package for these
    comments and outputs a "//go:linkname" directive that links the wrapper
    to the correct versioned symbol, as determined by parsing the __asm__
    annotation on the function's declaration in gen-sysinfo.go.
    
    For now, only the following packages are scanned by mklinknames.awk:
    
        os
        os/user
        runtime
        syscall
    
    gotools/:
    	* Makefile.am (check-runtime): Add runtime_linknames.go to
    	--extrafiles.
    	* Makefile.in: Regenerate.
    
    Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/265125