diff options
Diffstat (limited to 'trunk/src/ld-libs.c')
-rw-r--r-- | trunk/src/ld-libs.c | 49 |
1 files changed, 46 insertions, 3 deletions
diff --git a/trunk/src/ld-libs.c b/trunk/src/ld-libs.c index 3954cca..bd2a96e 100644 --- a/trunk/src/ld-libs.c +++ b/trunk/src/ld-libs.c @@ -177,15 +177,49 @@ reloc_type_class (int type, int machine) switch (type) { case R_MIPS_COPY: - return ELF_RTYPE_CLASS_COPY; + return ELF_RTYPE_CLASS_COPY; case R_MIPS_JUMP_SLOT: case R_MIPS_TLS_DTPMOD32: case R_MIPS_TLS_DTPREL32: case R_MIPS_TLS_TPREL32: - return ELF_RTYPE_CLASS_PLT; + return ELF_RTYPE_CLASS_PLT; + default: + return 0; + } + + case EM_SPARC: + case EM_SPARC32PLUS: + switch (type) + { + case R_SPARC_COPY: + return ELF_RTYPE_CLASS_COPY; + case R_SPARC_JMP_SLOT: + case R_SPARC_TLS_DTPMOD32: + case R_SPARC_TLS_DTPOFF32: + case R_SPARC_TLS_TPOFF32: + case R_SPARC_TLS_LE_HIX22: + case R_SPARC_TLS_LE_LOX10: + return ELF_RTYPE_CLASS_PLT; default: - return 0; + return 0; } + + case EM_SPARCV9: + switch (type) + { + case R_SPARC_COPY: + return ELF_RTYPE_CLASS_COPY; + case R_SPARC_JMP_SLOT: + case R_SPARC_TLS_DTPMOD64: + case R_SPARC_TLS_DTPOFF64: + case R_SPARC_TLS_TPOFF64: + case R_SPARC_TLS_LE_HIX22: + case R_SPARC_TLS_LE_LOX10: + return ELF_RTYPE_CLASS_PLT; + default: + return 0; + } + default: printf ("Unknown architecture!\n"); exit (1); @@ -1124,6 +1158,15 @@ determine_tlsoffsets (int e_machine, struct r_scope_elem *search_list) offset = 0; break; + case EM_SPARC: + case EM_SPARC32PLUS: + offset = -1; + break; + + case EM_SPARCV9: + offset = -1; + break; + default: /* Hope there's no TLS! */ for (i = 0; i < search_list->r_nlist; i++) |