Browse Source

aarch64: handle lazy relocation of TLSDESC

Binutils emits by default lazy relocations for TLSDESC and
ld.so need to handle that. Fixes problems like:
can't handle reloc type 0x407
Waldemar Brodkorb 7 years ago
parent
commit
2f4000a2f5
1 changed files with 11 additions and 0 deletions
  1. 11 0
      ldso/ldso/aarch64/elfinterp.c

+ 11 - 0
ldso/ldso/aarch64/elfinterp.c

@@ -279,6 +279,17 @@ _dl_do_lazy_reloc (struct elf_resolve *tpnt, struct r_scope_elem *scope,
 		case R_AARCH64_JUMP_SLOT:
 			*reloc_addr += tpnt->loadaddr;
 			break;
+#if defined USE_TLS && USE_TLS
+		case R_AARCH64_TLSDESC:
+			{
+				struct tlsdesc volatile *td =
+				  (struct tlsdesc volatile *)reloc_addr;
+
+				td->arg = (void*)rpnt;
+				td->entry = _dl_tlsdesc_return;
+			}
+			break;
+#endif
 		default:
 			return -1; /*call _dl_exit(1) */
 	}