remove workaround for broken mips assemblers
authorRich Felker <dalias@aerifal.cx>
Mon, 8 Feb 2016 21:07:09 +0000 (21:07 +0000)
committerRich Felker <dalias@aerifal.cx>
Mon, 8 Feb 2016 21:07:09 +0000 (21:07 +0000)
the workaround was for a bug that botched .gpword references to local
labels, applying a nonsensical random offset of -0x4000 to them.

this reverses commit 5e396fb996a80b035d0f6ecf7fed50f68aa3ebb7 and a
removes a similar hack that was added to syscall_cp.s in the later
commit 756c8af8589265e99e454fe3adcda1d0bc5e1963. it turns out one
additional instance of the same idiom, the GETFUNCSYM macro in
arch/mips/reloc.h, was still affected by the assembler bug and does
not admit an easy workaround without making assumptions about how the
macro is used. the previous workarounds made static linking work but
left the early-stage dynamic linker broken and thus had limited
usefulness.

instead, affected users (using binutils versions older than 2.20) will
need to fix the bug on the binutils side; the trivial patch is commit
453f5985b13e35161984bf1bf657bbab11515aa4 in the binutils-gdb
repository.

arch/mips/crt_arch.h
src/thread/mips/syscall_cp.s

index f4ba02aeafc49a190db4e188db5fc77ae06bc373..9fc50d7caccb86783606cee4ed8d291037b7eb5d 100644 (file)
@@ -4,16 +4,13 @@ __asm__(
 ".text \n"
 ".global _" START "\n"
 ".global " START "\n"
-".global " START "_data\n"
 ".type   _" START ", @function\n"
 ".type   " START ", @function\n"
-".type   " START "_data, @function\n"
 "_" START ":\n"
 "" START ":\n"
 "      bal 1f \n"
 "       move $fp, $0 \n"
-"" START "_data: \n"
-"      .gpword " START "_data \n"
+"      .gpword . \n"
 "      .gpword " START "_c \n"
 ".weak _DYNAMIC \n"
 ".hidden _DYNAMIC \n"
index b01a570402b8aa94652becdf5c342d2ac94c9c67..d284626450f9e2f074f25fca28f89e7baf3b433a 100644 (file)
@@ -9,9 +9,6 @@
 .global __cp_cancel
 .hidden __cp_cancel
 .type   __cp_cancel,@function
-.global __cp_cancel_data
-.hidden __cp_cancel_data
-.type   __cp_cancel_data,@function
 .hidden __cancel
 .global __syscall_cp_asm
 .hidden __syscall_cp_asm
@@ -46,8 +43,7 @@ __cp_cancel:
        move    $2, $ra
        bal     1f
        addu    $sp, $sp, 32
-__cp_cancel_data:
-       .gpword __cp_cancel_data
+       .gpword .
        .gpword __cancel
 1:     lw      $3, ($ra)
        subu    $3, $ra, $3