aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/MC/MCWinCOFFStreamer.cpp
diff options
context:
space:
mode:
authorEli Friedman <efriedma@quicinc.com>2023-04-17 13:15:46 -0700
committerEli Friedman <efriedma@quicinc.com>2023-04-17 13:17:25 -0700
commit10c17c97ebaf81ac26f6830e51a7a57ddcf63cd2 (patch)
tree4a7e6b501f6e0e44e1196d18cace1b80e7c01587 /llvm/lib/MC/MCWinCOFFStreamer.cpp
parentb0b2b2e047caa5a7c4b7e15d4425493f2df18d79 (diff)
downloadllvm-10c17c97ebaf81ac26f6830e51a7a57ddcf63cd2.zip
llvm-10c17c97ebaf81ac26f6830e51a7a57ddcf63cd2.tar.gz
llvm-10c17c97ebaf81ac26f6830e51a7a57ddcf63cd2.tar.bz2
[COFF] Add MC support for emitting IMAGE_WEAK_EXTERN_ANTI_DEPENDENCY symbols
This is mostly useful for ARM64EC, which uses such symbols extensively. One interesting quirk of ARM64EC is that we need to be able to emit weak symbols that point at each other (so if either symbol is defined elsewhere, both symbols point at the definition). This required a few changes to the way we handle weak symbols on Windows. Differential Revision: https://reviews.llvm.org/D145208
Diffstat (limited to 'llvm/lib/MC/MCWinCOFFStreamer.cpp')
-rw-r--r--llvm/lib/MC/MCWinCOFFStreamer.cpp6
1 files changed, 5 insertions, 1 deletions
diff --git a/llvm/lib/MC/MCWinCOFFStreamer.cpp b/llvm/lib/MC/MCWinCOFFStreamer.cpp
index c9a9681..ad0b1c1 100644
--- a/llvm/lib/MC/MCWinCOFFStreamer.cpp
+++ b/llvm/lib/MC/MCWinCOFFStreamer.cpp
@@ -115,7 +115,11 @@ bool MCWinCOFFStreamer::emitSymbolAttribute(MCSymbol *S,
default: return false;
case MCSA_WeakReference:
case MCSA_Weak:
- Symbol->setIsWeakExternal();
+ Symbol->setIsWeakExternal(COFF::IMAGE_WEAK_EXTERN_SEARCH_ALIAS);
+ Symbol->setExternal(true);
+ break;
+ case MCSA_WeakAntiDep:
+ Symbol->setIsWeakExternal(COFF::IMAGE_WEAK_EXTERN_ANTI_DEPENDENCY);
Symbol->setExternal(true);
break;
case MCSA_Global: