MIPS ABI states that every function must be called through jalr $t9. In other words, a function expect that t9 register points to the beginning of its code. A function uses this register to calculate offset to the Global Offset Table and save it to the gp register.
lui $gp, %hi(_gp_disp) addiu $gp, %lo(_gp_disp) addu $gp, $gp, $t9
If t9 and as a result $gp point to the wrong place the following code loads incorrect value from GOT and passes control to invalid code.
lw $v0,%call16(foo)($gp) jalr $t9
OrcMips32 and OrcMips64 writeResolverCode methods pass control to the resolved address, but do not setup $t9 before the call. The t9 holds value of the beginning of resolver code so any attempts to call routines via GOT failed.
This change fixes the problem. The OrcLazy/hidden-visibility.ll test starts to pass correctly. Before the change it fails on MIPS because the exitOnLazyCallThroughFailure called from the resolver code could not call libc routine exit via GOT.