diff options
author | Reid Kleckner <rnk@google.com> | 2019-05-07 23:06:21 +0000 |
---|---|---|
committer | Reid Kleckner <rnk@google.com> | 2019-05-07 23:06:21 +0000 |
commit | 6bf108d77a3c15f2bd47a8fa21e8e9357f873a70 (patch) | |
tree | c82b45b5c081bbbe0a7620afba033c111c17c165 /llvm/lib/Target/X86/X86FastISel.cpp | |
parent | e088d03b9c8b25589bbf35545399ae28a34df182 (diff) | |
download | bcm5719-llvm-6bf108d77a3c15f2bd47a8fa21e8e9357f873a70.tar.gz bcm5719-llvm-6bf108d77a3c15f2bd47a8fa21e8e9357f873a70.zip |
[COFF] Use COFF stubs for extern_weak functions
Summary:
A COFF stub indirects the reference to a symbol through memory. A
.refptr.$sym global variable pointer is created to refer to $sym.
Typically mingw uses these for external global variable declarations,
but we can use them for weak function declarations as well.
Updates the dso_local classification to add a special case for
extern_weak symbols on COFF in both clang and LLVM.
Fixes PR37598
Reviewers: smeenai, mstorsjo
Subscribers: hiraditya, cfe-commits, llvm-commits
Tags: #clang, #llvm
Differential Revision: https://reviews.llvm.org/D61615
llvm-svn: 360207
Diffstat (limited to 'llvm/lib/Target/X86/X86FastISel.cpp')
-rw-r--r-- | llvm/lib/Target/X86/X86FastISel.cpp | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/llvm/lib/Target/X86/X86FastISel.cpp b/llvm/lib/Target/X86/X86FastISel.cpp index 80dcd74a5d2..6fca1acb009 100644 --- a/llvm/lib/Target/X86/X86FastISel.cpp +++ b/llvm/lib/Target/X86/X86FastISel.cpp @@ -3503,8 +3503,9 @@ bool X86FastISel::fastLowerCall(CallLoweringInfo &CLI) { // This will be a direct call, or an indirect call through memory for // NonLazyBind calls or dllimport calls. - bool NeedLoad = - OpFlags == X86II::MO_DLLIMPORT || OpFlags == X86II::MO_GOTPCREL; + bool NeedLoad = OpFlags == X86II::MO_DLLIMPORT || + OpFlags == X86II::MO_GOTPCREL || + OpFlags == X86II::MO_COFFSTUB; unsigned CallOpc = NeedLoad ? (Is64Bit ? X86::CALL64m : X86::CALL32m) : (Is64Bit ? X86::CALL64pcrel32 : X86::CALLpcrel32); |