diff options
| author | Fangrui Song <maskray@google.com> | 2020-02-02 12:23:47 -0800 |
|---|---|---|
| committer | Fangrui Song <maskray@google.com> | 2020-02-03 09:52:48 -0800 |
| commit | 789a46f2d742e11edaade28cb59a0f4d2a1d770e (patch) | |
| tree | fd8577f26effb5faa19e87f014ff9c0e5d620855 /clang/lib/CodeGen/CodeGenModule.cpp | |
| parent | 1cc4f8d17247cd9be88addd75d060f9321b6f8b0 (diff) | |
[CodeGenModule] Assume dso_local for -fpic -fno-semantic-interposition
Summary:
Clang -fpic defaults to -fno-semantic-interposition (GCC -fpic defaults
to -fsemantic-interposition).
Users need to specify -fsemantic-interposition to get semantic
interposition behavior.
Semantic interposition is currently a best-effort feature. There may
still be some cases where it is not handled well.
Reviewers: peter.smith, rnk, serge-sans-paille, sfertile, jfb, jdoerfert
Subscribers: dschuff, jyknight, dylanmckay, nemanjai, jvesely, kbarton, fedor.sergeev, asb, rbar, johnrusso, simoncook, sabuasal, niosHD, jrtc27, zzheng, edward-jones, atanasyan, rogfer01, MartinMosbeck, brucehoult, the_o, arphaman, PkmX, jocewei, jsji, Jim, lenary, s.egerton, pzheng, sameer.abuasal, apazos, luismarques, cfe-commits
Tags: #clang
Differential Revision: https://reviews.llvm.org/D73865
Diffstat (limited to 'clang/lib/CodeGen/CodeGenModule.cpp')
| -rw-r--r-- | clang/lib/CodeGen/CodeGenModule.cpp | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/clang/lib/CodeGen/CodeGenModule.cpp b/clang/lib/CodeGen/CodeGenModule.cpp index 6a43b6bba627..4a61e0e86dff 100644 --- a/clang/lib/CodeGen/CodeGenModule.cpp +++ b/clang/lib/CodeGen/CodeGenModule.cpp @@ -846,7 +846,7 @@ static bool shouldAssumeDSOLocal(const CodeGenModule &CGM, const auto &CGOpts = CGM.getCodeGenOpts(); llvm::Reloc::Model RM = CGOpts.RelocationModel; const auto &LOpts = CGM.getLangOpts(); - if (RM != llvm::Reloc::Static && !LOpts.PIE) + if (RM != llvm::Reloc::Static && LOpts.SemanticInterposition) return false; // A definition cannot be preempted from an executable. @@ -868,7 +868,7 @@ static bool shouldAssumeDSOLocal(const CodeGenModule &CGM, // If we can use copy relocations we can assume it is local. if (auto *Var = dyn_cast<llvm::GlobalVariable>(GV)) if (!Var->isThreadLocal() && - (RM == llvm::Reloc::Static || CGOpts.PIECopyRelocations)) + (RM == llvm::Reloc::Static || (LOpts.PIE && CGOpts.PIECopyRelocations))) return true; // If we can use a plt entry as the symbol address we can assume it |
