Skip to content

Commit 6936e2b

Browse files
authored
Merge pull request #82176 from al45tair/eng/PR-148168098
[IRGen] Don't use GOTPCREL relocations for x86 ELF.
2 parents fad9e24 + cc63893 commit 6936e2b

File tree

1 file changed

+4
-2
lines changed

1 file changed

+4
-2
lines changed

lib/IRGen/GenDecl.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3736,13 +3736,15 @@ static llvm::GlobalVariable *createGOTEquivalent(IRGenModule &IGM,
37363736
llvm::GlobalValue::PrivateLinkage,
37373737
global,
37383738
llvm::Twine("got.") + globalName);
3739-
3739+
37403740
// rdar://problem/53836960: i386 ld64 also mis-links relative references
37413741
// to GOT entries.
37423742
// rdar://problem/59782487: issue with on-device JITd expressions.
37433743
// The JIT gets confused by private vars accessed across object files.
3744+
// rdar://148168098: ELF x86 GOTPCREL relaxation can break metadata.
37443745
if (!IGM.getOptions().UseJIT &&
3745-
(!IGM.Triple.isOSDarwin() || IGM.Triple.getArch() != llvm::Triple::x86)) {
3746+
(!IGM.Triple.isOSDarwin() || IGM.Triple.getArch() != llvm::Triple::x86) &&
3747+
(!IGM.Triple.isOSBinFormatELF() || !IGM.Triple.isX86())) {
37463748
gotEquivalent->setUnnamedAddr(llvm::GlobalValue::UnnamedAddr::Global);
37473749
} else {
37483750
ApplyIRLinkage(IRLinkage::InternalLinkOnceODR)

0 commit comments

Comments
 (0)