[PR] Fix aarch64 TLS relocations handling
Summary: There are few problems found when dealing with TLS relocations for aarch64. * RewriteInstance.cpp ** While analyzing TLS relocation we don't have to modify SymbolAddress (which is the offset from the TLS section), so we need to just skip verifiction ** The non-got related TLS relocations on aarch64 might be skipped too ** The forse relocation must be applied for GOT relocations on Aarch64. The symbol adress for GOT relocation might no be pointing on GOT section (for example ADRP GOT may point to the wrong section, since GOT table is not page-aligned), so we won't try to get section by the symbol address. * Relocation.cpp - Remove R_AARCH64_TLSLE_ADD_TPREL_HI12 and R_AARCH64_TLSLE_ADD_TPREL_LO12_NC from isGOT check, since they are not got-related relocations * BinaryFunction.h ** Remove R_AARCH64_TLSLE_ADD_TPREL_HI12 and R_AARCH64_TLSLE_ADD_TPREL_LO12_NC from adding to relocation list, since this is actually an offset in TLS section and BOLT does not change it we don't need to do something with this relocations, the value won't change in new binary files ** Refactor the code, separating aarch64 and x86 relocations * AArch64MCPlusBuilder.cpp ** Add forgotten LO12 relocations to switch case to getTargetExprFor Vladislav Khmelevsky, Advanced Software Technology Lab, Huawei (cherry picked from FBD31003349)
Loading
Please sign in to comment