Fix arm32/64 dynamic TLS relocations
arm32: Add a relocation for TLS descriptors (e.g. gcc's -mtls-dialect=gnu2). arm64: Add all the dynamic TLS relocations. Two of the relocations here are obsolete: - ARM documents R_ARM_SWI24 as an obsolete static relocation without saying what it did. It's been replaced by R_ARM_TLS_DESC, a dynamic relocation. We could probably remove it, but I left it because arm32 is old, and I see the macro in other libc's. It's probably analogous to R_ARM_THM_SWI8, which is also an obsolete relocation reserved for a future dynamic relocation. - I couldn't find any ARM documentation at all for R_AARCH64_TLS_DTPREL32. It seems to have been part of three relocations: - R_AARCH64_TLS_DTPREL32 1031 - R_AARCH64_TLS_DTPMOD32 1032 - R_AARCH64_TLS_TPREL32 1033 Bug: b/78026329 Test: run bionic unit tests Change-Id: I5e7432f6e3e906152dc489be5e812fd8defcbafd
This commit is contained in:
parent
3bf897e12d
commit
c1c8a188b2
|
@ -43,7 +43,8 @@
|
|||
#define R_ARM_THM_PC22 10
|
||||
#define R_ARM_THM_PC8 11
|
||||
#define R_ARM_AMP_VCALL9 12
|
||||
#define R_ARM_SWI24 13
|
||||
#define R_ARM_SWI24 13 /* obsolete static relocation */
|
||||
#define R_ARM_TLS_DESC 13 /* dynamic relocation */
|
||||
#define R_ARM_THM_SWI8 14
|
||||
#define R_ARM_XPC25 15
|
||||
#define R_ARM_THM_XPC22 16
|
||||
|
|
|
@ -83,8 +83,10 @@
|
|||
#define R_AARCH64_GLOB_DAT 1025 /* Create GOT entry. */
|
||||
#define R_AARCH64_JUMP_SLOT 1026 /* Create PLT entry. */
|
||||
#define R_AARCH64_RELATIVE 1027 /* Adjust by program base. */
|
||||
#define R_AARCH64_TLS_TPREL64 1030
|
||||
#define R_AARCH64_TLS_DTPREL32 1031
|
||||
#define R_AARCH64_TLS_DTPREL64 1028 /* Module-relative offset. */
|
||||
#define R_AARCH64_TLS_DTPMOD64 1029 /* Module index. */
|
||||
#define R_AARCH64_TLS_TPREL64 1030 /* TP-relative offset. */
|
||||
#define R_AARCH64_TLSDESC 1031 /* 16-byte descriptor: resolver func + arg. */
|
||||
#define R_AARCH64_IRELATIVE 1032
|
||||
|
||||
#endif /* _AARCH64_ELF_MACHDEP_H_ */
|
||||
|
|
|
@ -2965,8 +2965,8 @@ bool soinfo::relocate(const VersionTracker& version_tracker, ElfRelIteratorT&& r
|
|||
TRACE_TYPE(RELO, "RELO TLS_TPREL64 *** %16llx <- %16llx - %16llx\n",
|
||||
reloc, (sym_addr + addend), rel->r_offset);
|
||||
break;
|
||||
case R_AARCH64_TLS_DTPREL32:
|
||||
TRACE_TYPE(RELO, "RELO TLS_DTPREL32 *** %16llx <- %16llx - %16llx\n",
|
||||
case R_AARCH64_TLSDESC:
|
||||
TRACE_TYPE(RELO, "RELO TLSDESC *** %16llx <- %16llx - %16llx\n",
|
||||
reloc, (sym_addr + addend), rel->r_offset);
|
||||
break;
|
||||
#elif defined(__x86_64__)
|
||||
|
|
Loading…
Reference in New Issue