diff options
author | Rich Felker <dalias@aerifal.cx> | 2015-09-17 07:20:43 +0000 |
---|---|---|
committer | Rich Felker <dalias@aerifal.cx> | 2015-09-17 07:20:43 +0000 |
commit | cd7159e7be73451befedce2e9dfd9f6a4c3b21f0 (patch) | |
tree | e11dda44beeb755b5b0b06fdfbbcad5ca936b3d6 /arch/mips | |
parent | 57e2dce7e46f8f94318f1d4dec590c9f1c3025dc (diff) | |
download | musl-cd7159e7be73451befedce2e9dfd9f6a4c3b21f0.tar.gz musl-cd7159e7be73451befedce2e9dfd9f6a4c3b21f0.tar.bz2 musl-cd7159e7be73451befedce2e9dfd9f6a4c3b21f0.tar.xz musl-cd7159e7be73451befedce2e9dfd9f6a4c3b21f0.zip |
new dlstart stage-2 chaining for mips
Diffstat (limited to 'arch/mips')
-rw-r--r-- | arch/mips/reloc.h | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/arch/mips/reloc.h b/arch/mips/reloc.h index 8aa02852..9b40e3da 100644 --- a/arch/mips/reloc.h +++ b/arch/mips/reloc.h @@ -29,3 +29,18 @@ #define CRTJMP(pc,sp) __asm__ __volatile__( \ "move $sp,%1 ; jr %0" : : "r"(pc), "r"(sp) : "memory" ) + +#define GETFUNCSYM(fp, sym, got) __asm__ ( \ + ".hidden " #sym "\n" \ + ".set push \n" \ + ".set noreorder \n" \ + " bal 1f \n" \ + " nop \n" \ + " .gpword . \n" \ + " .gpword " #sym " \n" \ + "1: lw %0, ($ra) \n" \ + " subu %0, $ra, %0 \n" \ + " lw $ra, 4($ra) \n" \ + " addu %0, %0, $ra \n" \ + ".set pop \n" \ + : "=r"(*(fp)) : : "memory", "ra" ) |