File tree Expand file tree Collapse file tree 1 file changed +4
-2
lines changed Expand file tree Collapse file tree 1 file changed +4
-2
lines changed Original file line number Diff line number Diff 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)
You can’t perform that action at this time.
0 commit comments