<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/57634>57634</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [DirectX] Link errors with `BUILD_SHARED_LIBS=ON`
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            backend:DirectX
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
            llvm-beanz
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          kuhar
      </td>
    </tr>
</table>

<pre>
    When enabling shared libs builds on linux, the DX backend fails to link and resolve some symbols:

```
FAILED: lib/libLLVMDirectXDesc.so.16git 
: && /usr/bin/clang++-14 -fPIC -fno-omit-frame-pointer -gline-tables-only -fPIC -fno-semantic-interposition -fvisibility-inlines-hidden -Werror=date-time -Werror=unguarded-availability-new -Wall -Wextra -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wmissing-field-initializers -pedantic -Wno-long-long -Wc++98-compat-extra-semi -Wimplicit-fallthrough -Wcovered-switch-default -Wno-noexcept-type -Wnon-virtual-dtor -Wdelete-non-virtual-dtor -Wsuggest-override -Wno-comment -Wstring-conversion -Wmisleading-indentation -Wctad-maybe-unsupported -fdiagnostics-color -ffunction-sections -fdata-sections -O2 -g -DNDEBUG  -Wl,-z,defs -Wl,-z,nodelete -fuse-ld=/usr/bin/mold -Wl,--gdb-index -Wl,--color-diagnostics   -Wl,--gc-sections -shared -Wl,-soname,libLLVMDirectXDesc.so.16git -o lib/libLLVMDirectXDesc.so.16git lib/Target/DirectX/MCTargetDesc/CMakeFiles/LLVMDirectXDesc.dir/DirectXContainerObjectWriter.cpp.o lib/Target/DirectX/MCTargetDesc/CMakeFiles/LLVMDirectXDesc.dir/DirectXMCTargetDesc.cpp.o  -Wl,-rpath,"\$ORIGIN/../lib"  lib/libLLVMDirectXInfo.so.16git  lib/libLLVMSupport.so.16git  -Wl,-rpath-link,/usr/local/google/home/kubak/llvm/shared/lib && :
clang: warning: '-fuse-ld=' taking a path is deprecated; use '--ld-path=' instead [-Wfuse-ld-path]
mold: error: undefined symbol: lib/Target/DirectX/MCTargetDesc/CMakeFiles/LLVMDirectXDesc.dir/DirectXContainerObjectWriter.cpp.o: llvm::MCDXContainerTargetWriter::~MCDXContainerTargetWriter()
mold: error: undefined symbol: lib/Target/DirectX/MCTargetDesc/CMakeFiles/LLVMDirectXDesc.dir/DirectXContainerObjectWriter.cpp.o: llvm::MCDXContainerTargetWriter::~MCDXContainerTargetWriter()
mold: error: undefined symbol: lib/Target/DirectX/MCTargetDesc/CMakeFiles/LLVMDirectXDesc.dir/DirectXMCTargetDesc.cpp.o: llvm::MCCodeEmitter::MCCodeEmitter()
mold: error: undefined symbol: lib/Target/DirectX/MCTargetDesc/CMakeFiles/LLVMDirectXDesc.dir/DirectXMCTargetDesc.cpp.o: llvm::MCAsmBackend::MCAsmBackend(llvm::support::endianness)
mold: error: undefined symbol: lib/Target/DirectX/MCTargetDesc/CMakeFiles/LLVMDirectXDesc.dir/DirectXMCTargetDesc.cpp.o: llvm::MCSubtargetInfo::MCSubtargetInfo(llvm::Triple const&, llvm::StringRef, llvm::StringRef, llvm::StringRef, llvm::ArrayRef<llvm::SubtargetFeatureKV>, llvm::ArrayRef<llvm::SubtargetSubTypeKV>, llvm::MCWriteProcResEntry const*, llvm::MCWriteLatencyEntry const*, llvm::MCReadAdvanceEntry const*, llvm::InstrStage const*, unsigned int const*, unsigned int const*)
mold: error: undefined symbol: lib/Target/DirectX/MCTargetDesc/CMakeFiles/LLVMDirectXDesc.dir/DirectXMCTargetDesc.cpp.o: llvm::MCCodeEmitter::~MCCodeEmitter()
mold: error: undefined symbol: lib/Target/DirectX/MCTargetDesc/CMakeFiles/LLVMDirectXDesc.dir/DirectXMCTargetDesc.cpp.o: llvm::MCAsmBackend::~MCAsmBackend()
mold: error: undefined symbol: lib/Target/DirectX/MCTargetDesc/CMakeFiles/LLVMDirectXDesc.dir/DirectXMCTargetDesc.cpp.o: llvm::MCInstPrinter::~MCInstPrinter()
mold: error: undefined symbol: lib/Target/DirectX/MCTargetDesc/CMakeFiles/LLVMDirectXDesc.dir/DirectXMCTargetDesc.cpp.o: vtable for llvm::MCSubtargetInfo
mold: error: undefined symbol: lib/Target/DirectX/MCTargetDesc/CMakeFiles/LLVMDirectXDesc.dir/DirectXMCTargetDesc.cpp.o: vtable for llvm::MCSubtargetInfo
mold: error: undefined symbol: lib/Target/DirectX/MCTargetDesc/CMakeFiles/LLVMDirectXDesc.dir/DirectXMCTargetDesc.cpp.o: llvm::MCAsmInfo::MCAsmInfo()
mold: error: undefined symbol: lib/Target/DirectX/MCTargetDesc/CMakeFiles/LLVMDirectXDesc.dir/DirectXMCTargetDesc.cpp.o: llvm::MCAsmInfo::~MCAsmInfo()
mold: error: undefined symbol: lib/Target/DirectX/MCTargetDesc/CMakeFiles/LLVMDirectXDesc.dir/DirectXMCTargetDesc.cpp.o: llvm::MCCodeEmitter::~MCCodeEmitter()
mold: error: undefined symbol: lib/Target/DirectX/MCTargetDesc/CMakeFiles/LLVMDirectXDesc.dir/DirectXMCTargetDesc.cpp.o: llvm::MCAsmBackend::~MCAsmBackend()
mold: error: undefined symbol: lib/Target/DirectX/MCTargetDesc/CMakeFiles/LLVMDirectXDesc.dir/DirectXMCTargetDesc.cpp.o: llvm::MCAsmBackend::getFixupKind(llvm::StringRef) const
mold: error: undefined symbol: lib/Target/DirectX/MCTargetDesc/CMakeFiles/LLVMDirectXDesc.dir/DirectXMCTargetDesc.cpp.o: llvm::MCAsmBackend::getFixupKindInfo(llvm::MCFixupKind) const
mold: error: undefined symbol: lib/Target/DirectX/MCTargetDesc/CMakeFiles/LLVMDirectXDesc.dir/DirectXMCTargetDesc.cpp.o: llvm::MCAsmBackend::fixupNeedsRelaxationAdvanced(llvm::MCFixup const&, bool, unsigned long, llvm::MCRelaxableFragment const*, llvm::MCAsmLayout const&, bool) const
mold: error: undefined symbol: lib/Target/DirectX/MCTargetDesc/CMakeFiles/LLVMDirectXDesc.dir/DirectXMCTargetDesc.cpp.o: llvm::MCInstPrinter::~MCInstPrinter()
mold: error: undefined symbol: lib/Target/DirectX/MCTargetDesc/CMakeFiles/LLVMDirectXDesc.dir/DirectXMCTargetDesc.cpp.o: llvm::MCInstPrinter::printRegName(llvm::raw_ostream&, unsigned int) const
mold: error: undefined symbol: lib/Target/DirectX/MCTargetDesc/CMakeFiles/LLVMDirectXDesc.dir/DirectXMCTargetDesc.cpp.o: llvm::MCSubtargetInfo::getCacheSize(unsigned int) const
mold: error: undefined symbol: lib/Target/DirectX/MCTargetDesc/CMakeFiles/LLVMDirectXDesc.dir/DirectXMCTargetDesc.cpp.o: llvm::MCSubtargetInfo::getCacheAssociativity(unsigned int) const
mold: error: undefined symbol: lib/Target/DirectX/MCTargetDesc/CMakeFiles/LLVMDirectXDesc.dir/DirectXMCTargetDesc.cpp.o: llvm::MCSubtargetInfo::getCacheLineSize(unsigned int) const
mold: error: undefined symbol: lib/Target/DirectX/MCTargetDesc/CMakeFiles/LLVMDirectXDesc.dir/DirectXMCTargetDesc.cpp.o: llvm::MCSubtargetInfo::getPrefetchDistance() const
mold: error: undefined symbol: lib/Target/DirectX/MCTargetDesc/CMakeFiles/LLVMDirectXDesc.dir/DirectXMCTargetDesc.cpp.o: llvm::MCSubtargetInfo::getMaxPrefetchIterationsAhead() const
mold: error: undefined symbol: lib/Target/DirectX/MCTargetDesc/CMakeFiles/LLVMDirectXDesc.dir/DirectXMCTargetDesc.cpp.o: llvm::MCSubtargetInfo::enableWritePrefetching() const
mold: error: undefined symbol: lib/Target/DirectX/MCTargetDesc/CMakeFiles/LLVMDirectXDesc.dir/DirectXMCTargetDesc.cpp.o: llvm::MCSubtargetInfo::getMinPrefetchStride(unsigned int, unsigned int, unsigned int, bool) const
mold: error: undefined symbol: lib/Target/DirectX/MCTargetDesc/CMakeFiles/LLVMDirectXDesc.dir/DirectXMCTargetDesc.cpp.o: llvm::MCSubtargetInfo::shouldPrefetchAddressSpace(unsigned int) const
mold: error: undefined symbol: lib/Target/DirectX/MCTargetDesc/CMakeFiles/LLVMDirectXDesc.dir/DirectXMCTargetDesc.cpp.o: llvm::MCAsmInfo::~MCAsmInfo()
mold: error: undefined symbol: lib/Target/DirectX/MCTargetDesc/CMakeFiles/LLVMDirectXDesc.dir/DirectXMCTargetDesc.cpp.o: llvm::MCAsmInfo::isSectionAtomizableBySymbols(llvm::MCSection const&) const
mold: error: undefined symbol: lib/Target/DirectX/MCTargetDesc/CMakeFiles/LLVMDirectXDesc.dir/DirectXMCTargetDesc.cpp.o: llvm::MCAsmInfo::getExprForPersonalitySymbol(llvm::MCSymbol const*, unsigned int, llvm::MCStreamer&) const
mold: error: undefined symbol: lib/Target/DirectX/MCTargetDesc/CMakeFiles/LLVMDirectXDesc.dir/DirectXMCTargetDesc.cpp.o: llvm::MCAsmInfo::getExprForFDESymbol(llvm::MCSymbol const*, unsigned int, llvm::MCStreamer&) const
mold: error: undefined symbol: lib/Target/DirectX/MCTargetDesc/CMakeFiles/LLVMDirectXDesc.dir/DirectXMCTargetDesc.cpp.o: llvm::MCAsmInfo::isAcceptableChar(char) const
mold: error: undefined symbol: lib/Target/DirectX/MCTargetDesc/CMakeFiles/LLVMDirectXDesc.dir/DirectXMCTargetDesc.cpp.o: llvm::MCAsmInfo::isValidUnquotedName(llvm::StringRef) const
mold: error: undefined symbol: lib/Target/DirectX/MCTargetDesc/CMakeFiles/LLVMDirectXDesc.dir/DirectXMCTargetDesc.cpp.o: llvm::MCAsmInfo::shouldOmitSectionDirective(llvm::StringRef) const
```

This is with the ToT llvm-project from today.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJztWt1v46oS_2ucF4sodZo0fchDPs-NTvqhprs9bysM2OYWgw_gtOlffwfstE6arvbqaI_q1UoWNjDMzG8YhjF2rOhu_JAxGTKJY8FlGpoMa0ZDwWMTxiUX1IRKQlWWz0E0C23GwvlfYYzJI5M0TDAXJrTKETyGGFo0M0psWWhUDsUuj5UwQX8S9OZBb18Oe_Xlq8vJar2YA40TGkRLKNfrr1dzrhmxf82ZIV2jumfDlNuwZgC0QTSEC27L0mgoYy6hJALLNIimcKGz8xAlt6sZlFIhlXOLEo1zhgrFpWU6RClozZAF5MwgJcWuOcCwHEvLCfLEhTLccrAESrbc8JgLbnfQ5TgYlHFKwYjogWmtdNCfU2yBMQcTvLWVMi2xpowivAWz4ZqHZE9AhIVwpM9WY7iD-FKWBkgL7FT22j48aQ5cjdUwTwbqBBuL_i6xG5lzY6AZJZwJCnqBsljwF6aBsGDUI6kYCwVkrnAcKlNdjhBReYEt8go46Bx6eV4ITpzZQDubaVWmmRuktgxcBJknbkmGKEtwKWzFXCr2TFhhkd0VzDdJtOXagpKIWuVQUCYADzrRY8o0ZQDJ8decVuOdZjmTjn-FHBokEBg_GQ63YJi6di5hDiyuZumBWExRjncxA1OasiiUtuDXKKEcp1IZsIcBVsJJTpJSEjcOkPu7cXTY4kb9JgJ_CdH8er6YfvkjBAkC1gN6gQIsYJp1qSqMwATmEAkKk3_kp7kSdD8EpTT2yj-_tni9UEPTMHyjJg2t6tVa9xklwVng6XtLCKkfWGcVxT3WKbPwUNPA09WsanTkUJ1d4Ue25LB-oHLMjXL9NnamYG5gseib-L9Qf3C-rLukKLrqJ0hrDqyF7I2kwc8zeAiiKBhAeX5zt_pjdQ1ju93KKtATnrTRSibqzUaHJJvKxRrdTXnIxUcvtHYDoQiG7mWqVCpgypaZcjO3fCxj_Oj6xTaHWzW_lZTXkLePplWwg1j4hLXk1WMQXRx43UVo8aOL6zh0eoTchJQVgAYCFFBMQ6D1g2AA8papRnFpLKyrMBhM0UPNsOofzCvpzoWdxDq8TcISXDiBGaZ12H-L6P-SH3mBzm59t0NczeZvxJWwirjqDi4WH1NEoyC6_A3z58N8v06P0c0gmC5g735FdNjUBggTk0-rfOlESzR6I623qaoCnRxLyC7M50e4KWPrSVyEPN3YxHmveSFYCBu5sT6ozRrcNn6Xv2PJP2meaI13rrU_a9DuFVoybEvN_vwa9Bf_zzh4uIe85sS4q5lfUrdakTtmFtLq3R7e5CTlGuKvJLvvU95BBJ7QLZaEfY9wBY16Y3HKDggg7eGp8w1IYH-k47M72btI4GNb24OBB3EQDz4_Budwt9q_FzVANFs_K4qtf9kLE8j6P45fv9X-OX7f3Bz21c_qKB-qvl-vrdH-d9j8rBhcJsKfy-JPfpQHNpKay3qDbi-yd9nf1ayBup34EgfgmjFq7pjAz_7MqU7U6CmsB6lurJQ4SMPcYdz71M_xhaC_1Dj1518fJYmg2xrvVGlPCGmHddubTnwXReEqdyy99mdyDafQ-OmbgpSd4byerWZG3pZZO_HOB5UZJhnb8BeH-BdDNTFGEQ5rfcvt7teDtwb1frmJu9UsYZZkc26si85VJGkxoCv8vMe0gkjjdx4zyRim7Ybmvz-y-hClwudOtFuNyU0Xl3s4Lqmj71fXcfB_X2_TVn7CCiZTpaB7K0wo1cyYTYFJWyNNu18HD7TnZlN9SpxYlfMXtwSnu0390f4wj60JG0lmC2cLKBfPhV4qfcu0-1rqvsBXeI_h-sYPj02Pk_CNz-Zcptp2wyzni98GcStjQtyPDG5JzDLsXkGIv7USy1dwdPpF_l0qy-i795E2Hjcc7y83Obd1iKrY8O2PgTz6Gakq7zNu3KfyJ24z_8vTvbr3GqBCK_c9Nky0ykOrKN51O2x8NhxGw-FocHnRoeM-vexf4o7lVrBxMJjuTTKYh2v3l5Q3Z80b5E6_rNbzb5v_TO4W82_r1XQT9Oc319DRKbUYZ9YW_v-paAlXCmPKuEuU-zeg_kWgqRZUuTGlt_HgYtg_72TjCxqdRUM6JBHtk4icEYxHg0Ey6pERwed40BE4ZsI4TYMoil-POV5nMgLNO3wc9aKod9kbwb1_NuwOexdkFF2QZDjo0XN8GZz3WI656Dp9ukqnHT32qsVlaqBTQAZu3jqx8bGD1WIrSoblSy0PlzZTevxYwqLreExjD-h_kBTOsw">