X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=arch%2For1k%2Freloc.h;h=128089cac20837bd5fe94e3e9e4ae609cbe7b01f;hb=9d4c902c42b3fda368d7ea64bb9575c46228fa7f;hp=830a800ac64b9c486d1c6f9fe73c890222ab0968;hpb=200d15479c0bc48471ee7b8e538ce33af990f82e;p=musl diff --git a/arch/or1k/reloc.h b/arch/or1k/reloc.h index 830a800a..128089ca 100644 --- a/arch/or1k/reloc.h +++ b/arch/or1k/reloc.h @@ -1,47 +1,24 @@ -#include -#include -#include - #define LDSO_ARCH "or1k" #define TPOFF_K 0 -static int remap_rel(int type) -{ - switch(type) { - case R_OR1K_32: - return REL_SYMBOLIC; - case R_OR1K_GLOB_DAT: - return REL_GOT; - case R_OR1K_JMP_SLOT: - return REL_PLT; - case R_OR1K_RELATIVE: - return REL_RELATIVE; - case R_OR1K_COPY: - return REL_COPY; - case R_OR1K_TLS_DTPMOD: - return REL_DTPMOD; - case R_OR1K_TLS_DTPOFF: - return REL_DTPOFF; - case R_OR1K_TLS_TPOFF: - return REL_TPOFF; - } - return 0; -} +#define REL_SYMBOLIC R_OR1K_32 +#define REL_GOT R_OR1K_GLOB_DAT +#define REL_PLT R_OR1K_JMP_SLOT +#define REL_RELATIVE R_OR1K_RELATIVE +#define REL_COPY R_OR1K_COPY +#define REL_DTPMOD R_OR1K_TLS_DTPMOD +#define REL_DTPOFF R_OR1K_TLS_DTPOFF +#define REL_TPOFF R_OR1K_TLS_TPOFF + +#define CRTJMP(pc,sp) __asm__ __volatile__( \ + "l.jr %0 ; l.ori r1,%1,0" : : "r"(pc), "r"(sp) : "memory" ) -#include "syscall.h" -void __reloc_self(int c, size_t *a, size_t *dynv) -{ - char dot = '.', ex = 'x'; - char *base; - size_t t[20], n; - for (a+=c+1; *a; a++); - for (a++; *a; a+=2) if (*a<20) t[*a] = a[1]; - base = (char *)t[AT_BASE]; - if (!base) base = (char *)(t[AT_PHDR] & -t[AT_PAGESZ]); - for (a=dynv; *a; a+=2) if (*a<20) t[*a] = a[1]; - n = t[DT_RELASZ]; - for (a=(void *)(base+t[DT_RELA]); n; a+=3, n-=12) - if (a[1]%256 == R_OR1K_RELATIVE) - *(size_t *)(base+a[0]) = (size_t)base + a[2]; -} +#define GETFUNCSYM(fp, sym, got) __asm__ ( \ + ".hidden " #sym " \n" \ + " l.jal 1f \n" \ + " l.nop \n" \ + " .word " #sym "-. \n" \ + "1: l.lwz %0, 0(r9) \n" \ + " l.add %0, %0, r9 \n" \ + : "=r"(*(fp)) : : "memory", "r9" )