• Ian Lance Taylor's avatar
    cmd/ld: emit TLS relocations during external linking · 30e29ee9
    Ian Lance Taylor authored
    This CL was written by rsc.  I just tweaked 8l.
    
    This CL adds TLS relocation to the ELF .o file we write during external linking,
    so that the host linker (gcc) can decide the final location of m and g.
    
    Similar relocations are not necessary on OS X because we use an alternate
    program start-time mechanism to acquire thread-local storage.
    
    Similar relocations are not necessary on ARM or Plan 9 or Windows
    because external linking mode is not yet supported on those systems.
    
    On almost all ELF systems, the references we use are like %fs:-0x4 or %gs:-0x4,
    which we write in 6a/8a as -0x4(FS) or -0x4(GS). On Linux/ELF, however,
    Xen's lack of support for this mode forced us long ago to use a two-instruction
    sequence: first we load %gs:0x0 into a register r, and then we use -0x4(r).
    (The ELF program loader arranges that %gs:0x0 contains a regular pointer to
    that same memory location.) In order to relocate those -0x4(r) references,
    the linker must know where they are. This CL adds the equivalent notation
    -0x4(r)(GS*1) for this purpose: it assembles to the same encoding as -0x4(r)
    but the (GS*1) indicates to the linker that this is one of those thread-local
    references that needs relocation.
    
    Thanks to Elias Naur for reminding me about this missing piece and
    also for writing the test.
    
    R=r
    CC=golang-dev
    https://golang.org/cl/7891047
    30e29ee9
Name
Last commit
Last update
..
gmp Loading commit data...
life Loading commit data...
stdio Loading commit data...
test Loading commit data...
testso Loading commit data...
testtls Loading commit data...