Skip to content

Fix DBI loading problem on Linux - #82461

Merged
mikem8361 merged 2 commits into
dotnet:mainfrom
mikem8361:fixdbiimport
Feb 22, 2023
Merged

Fix DBI loading problem on Linux#82461
mikem8361 merged 2 commits into
dotnet:mainfrom
mikem8361:fixdbiimport

Conversation

@mikem8361

@mikem8361mikem8361 commented Feb 22, 2023

Copy link
Copy Markdown
Contributor

Part of PR #81573 needed to be undone to build libmscordbi.so without any undefined symbols from the DAC. The DAC_PAL_RegisterModule, etc. stubs I recommended didn't work and DBI could not be loaded by SOS (and I assume other debuggers) because of missing exports.

The double pass at the libraries from the target_link_libraries(mscordbi ${COREDBI_LIBRARIES} ${COREDBI_LIBRARIES}) cmake file needed to be restored. The stubs were not needed after that.

Before the changes:

~/diagnostics/.dotnet-test/shared/Microsoft.NETCore.App/8.0.0-preview.2.23116.1$ ldd -r libmscordbi.so
linux-vdso.so.1 (0x00007ffe54bee000)
libmscordaccore.so => /home/mikem/diagnostics/.dotnet-test/shared/Microsoft.NETCore.App/8.0.0-preview.2.23116.1/./libmscordaccore.so (0x00007fc29f686000)
libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fc29f499000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fc29f34a000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fc29f32f000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fc29f13d000)
/lib64/ld-linux-x86-64.so.2 (0x00007fc29faa0000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fc29f118000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fc29f10e000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fc29f108000)
undefined symbol: _Z22DAC_PAL_RegisterModulePKc (./libmscordbi.so)
undefined symbol: _Z24DAC_PAL_UnregisterModulePv (./libmscordbi.so)

When I build the latest main I locally I get even more undefines before this fix:

 linux-vdso.so.1 (0x00007ffef5dfe000)
libmscordaccore.so => /home/mikem/runtime/artifacts/bin/coreclr/linux.x64.Release/sharedFramework/./libmscordaccore.so (0x00007f4f1bb77000)
libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f4f1b98a000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f4f1b83b000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f4f1b820000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f4f1b62e000)
/lib64/ld-linux-x86-64.so.2 (0x00007f4f1bf73000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f4f1b609000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f4f1b5ff000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f4f1b5f9000)
undefined symbol: _ZN14UTSemReadWrite11UnlockWriteEv (./libmscordbi.so)
undefined symbol: _ZN14UTSemReadWriteC1Ev (./libmscordbi.so)
undefined symbol: _ZNK9PEDecoder14CheckCorHeaderEv (./libmscordbi.so)
undefined symbol: _Z17SplitPathInteriorPKDsPS0_PmS1_S2_S1_S2_S1_S2_ (./libmscordbi.so)
undefined symbol: _ZN14UTSemReadWrite8LockReadEv (./libmscordbi.so)
undefined symbol: _ZNK9PEDecoder11GetMetadataEPj (./libmscordbi.so)
undefined symbol: DAC_PAL_UnregisterModule (./libmscordbi.so)
undefined symbol: _ZN14UTSemReadWrite9LockWriteEv (./libmscordbi.so)
undefined symbol: _ZN8MDFormat15VerifySignatureEP16STORAGESIGNATUREj (./libmscordbi.so)
undefined symbol: DAC_PAL_RegisterModule (./libmscordbi.so)
undefined symbol: _ZN14UTSemReadWrite4InitEv (./libmscordbi.so)
undefined symbol: _ZNK9PEDecoder14CheckNTHeadersEv (./libmscordbi.so)
undefined symbol: _Z19_FillMDDefaultValuehPKvjP15_MDDefaultValue (./libmscordbi.so)
undefined symbol: _ZN8MDFormat14GetFirstStreamEP13STORAGEHEADERPKv (./libmscordbi.so)
undefined symbol: _ZNK9PEDecoder10GetRvaDataEj8IsNullOK (./libmscordbi.so)
undefined symbol: _ZNK9PEDecoder12HasNTHeadersEv (./libmscordbi.so)
undefined symbol: _ZN14UTSemReadWrite10UnlockReadEv (./libmscordbi.so)
undefined symbol: _ZN14UTSemReadWriteD1Ev (./libmscordbi.so)
undefined symbol: _ZNK9PEDecoder20FindReadyToRunHeaderEv (./libmscordbi.so)

Part of PR dotnet#81573 needed to be undone to build libmscordbi.so without
any undefined symbols from the DAC. The DAC_PAL_RegisterModule, etc. stubs I recommended didn't work and DBI
could not be loaded by SOS because of missing exports.
The double pass at the libraries from the `target_link_libraries(mscordbi ${COREDBI_LIBRARIES} ${COREDBI_LIBRARIES})`
cmake file needed to be restored. The stubs were not needed after that.
@mikem8361mikem8361 self-assigned this Feb 22, 2023
@am11

am11 commented Feb 22, 2023

Copy link
Copy Markdown
Member

@mikem8361, unfortunately it breaks clang 16 build. It's currently in rc3 stage (scheduled to be released on March 7):

# host environment: bash on ubuntu 20.04 amd64
$ docker build - -t dotnet-prereq-clang16 <<EOFFROM amd64/ubuntuRUN apt update; apt install -y cmake curl wget software-properties-common gnupg liblttng-ust-dev libkrb5-dev libicu-dev libssl-dev libz-dev; \ curl -sSL https://apt.llvm.org/llvm.sh | bash -s - 16 allEOF
$ docker run --rm -v$(pwd):/runtime dotnet-prereq-clang16 /runtime/src/coreclr/build-runtime.sh
# snip
[ 85%] Linking CXX shared library libclrjit.so
[ 85%] Building CXX object jit/CMakeFiles/clrjit_win_x86_x64.dir/lir.cpp.o
ld.lld: error: version script assignment of 'V1.0' to symbol 'PAL_RegisterModule' failed: symbol not defined
ld.lld: error: version script assignment of 'V1.0' to symbol 'PAL_UnregisterModule' failed: symbol not defined
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [dlls/mscordbi/CMakeFiles/mscordbi.dir/build.make:187: dlls/mscordbi/libmscordbi.so] Error 1
make[1]: *** [CMakeFiles/Makefile2:4537: dlls/mscordbi/CMakeFiles/mscordbi.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
[ 85%] Building CXX object jit/CMakeFiles/clrjit_unix_x64_x64.dir/lsra.cpp.o
[ 85%] Building CXX object jit/CMakeFiles/clrjit_win_x64_x64.dir/emitxarch.cpp.o
...
make: *** [Makefile:136: all] Error 2
/
Failed to build "CoreCLR component".

Do you see another way to satisfy both lld-16 and SOS?

@am11

am11 commented Feb 22, 2023

Copy link
Copy Markdown
Member

With main the build succeeds and ldd resolves all symbols:

$ docker run --rm -v$(pwd):/runtime dotnet-prereq-clang16 \
ldd /runtime/artifacts/bin/coreclr/linux.x64.Debug/libmscordbi.so
linux-vdso.so.1 (0x00007ffda470a000)
libmscordaccore.so => /runtime/artifacts/bin/coreclr/linux.x64.Debug/libmscordaccore.so (0x00007fdd66eec000)
libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fdd66cbb000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fdd66bd4000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fdd66bb4000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fdd6698c000)
/lib64/ld-linux-x86-64.so.2 (0x00007fdd677db000)

@mikem8361

Copy link
Copy Markdown
ContributorAuthor

I think you need the -r to show the undefined symbols.

@hoyosjs

Copy link
Copy Markdown
Member

We might have to merge this while we figure out next steps. It would block upstack repos from debugging.

@mikem8361

Copy link
Copy Markdown
ContributorAuthor

I have no idea why this is happening with clang 16 and not older versions.

Like Juan said it is breaking SOS, VS debugging and our debugger testing. We should merge this and figure out the clang 16 issue.

@am11am11 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Figured out a way to make both worlds happy.

@@ -100,7 +100,10 @@ elseif(CLR_CMAKE_HOST_UNIX)
mscordaccore
)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
# Before llvm 16, lld was setting `--undefined-version` by default. The default was
# flipped to `--no-undefined-version` in lld 16, so we will explicitly set it to
# `--undefined-version` for our use-case.
#
include(CheckLinkerFlag OPTIONAL)
if(COMMAND check_linker_flag)
check_linker_flag(CXX -Wl,--undefined-version LINKER_SUPPORTS_UNDEFINED_VERSION)
if (LINKER_SUPPORTS_UNDEFINED_VERSION)
add_linker_flag(-Wl,--undefined-version)
endif(LINKER_SUPPORTS_UNDEFINED_VERSION)
endif(COMMAND check_linker_flag)

Fixes the compilation error and ldd -r libmscordbi.so reports no missing symbols.

@am11am11 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM. Thanks! :)

@mikem8361
mikem8361 merged commit 71034dd into dotnet:mainFeb 22, 2023
@mikem8361
mikem8361 deleted the fixdbiimport branch February 22, 2023 07:28
@ghostghost locked as resolved and limited conversation to collaborators Mar 24, 2023
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@mikem8361@am11@hoyosjs@jeffhandley
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Fix DBI loading problem on Linux by mikem8361 · Pull Request #82461 · dotnet/runtime · GitHub
Skip to content

Fix DBI loading problem on Linux - #82461

Merged
mikem8361 merged 2 commits into
dotnet:mainfrom
mikem8361:fixdbiimport
Feb 22, 2023
Merged

Fix DBI loading problem on Linux#82461
mikem8361 merged 2 commits into
dotnet:mainfrom
mikem8361:fixdbiimport

Conversation

@mikem8361

@mikem8361mikem8361 commented Feb 22, 2023

Copy link
Copy Markdown
Contributor

Part of PR #81573 needed to be undone to build libmscordbi.so without any undefined symbols from the DAC. The DAC_PAL_RegisterModule, etc. stubs I recommended didn't work and DBI could not be loaded by SOS (and I assume other debuggers) because of missing exports.

The double pass at the libraries from the target_link_libraries(mscordbi ${COREDBI_LIBRARIES} ${COREDBI_LIBRARIES}) cmake file needed to be restored. The stubs were not needed after that.

Before the changes:

~/diagnostics/.dotnet-test/shared/Microsoft.NETCore.App/8.0.0-preview.2.23116.1$ ldd -r libmscordbi.so
linux-vdso.so.1 (0x00007ffe54bee000)
libmscordaccore.so => /home/mikem/diagnostics/.dotnet-test/shared/Microsoft.NETCore.App/8.0.0-preview.2.23116.1/./libmscordaccore.so (0x00007fc29f686000)
libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fc29f499000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fc29f34a000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fc29f32f000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fc29f13d000)
/lib64/ld-linux-x86-64.so.2 (0x00007fc29faa0000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fc29f118000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fc29f10e000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fc29f108000)
undefined symbol: _Z22DAC_PAL_RegisterModulePKc (./libmscordbi.so)
undefined symbol: _Z24DAC_PAL_UnregisterModulePv (./libmscordbi.so)

When I build the latest main I locally I get even more undefines before this fix:

 linux-vdso.so.1 (0x00007ffef5dfe000)
libmscordaccore.so => /home/mikem/runtime/artifacts/bin/coreclr/linux.x64.Release/sharedFramework/./libmscordaccore.so (0x00007f4f1bb77000)
libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f4f1b98a000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f4f1b83b000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f4f1b820000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f4f1b62e000)
/lib64/ld-linux-x86-64.so.2 (0x00007f4f1bf73000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f4f1b609000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f4f1b5ff000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f4f1b5f9000)
undefined symbol: _ZN14UTSemReadWrite11UnlockWriteEv (./libmscordbi.so)
undefined symbol: _ZN14UTSemReadWriteC1Ev (./libmscordbi.so)
undefined symbol: _ZNK9PEDecoder14CheckCorHeaderEv (./libmscordbi.so)
undefined symbol: _Z17SplitPathInteriorPKDsPS0_PmS1_S2_S1_S2_S1_S2_ (./libmscordbi.so)
undefined symbol: _ZN14UTSemReadWrite8LockReadEv (./libmscordbi.so)
undefined symbol: _ZNK9PEDecoder11GetMetadataEPj (./libmscordbi.so)
undefined symbol: DAC_PAL_UnregisterModule (./libmscordbi.so)
undefined symbol: _ZN14UTSemReadWrite9LockWriteEv (./libmscordbi.so)
undefined symbol: _ZN8MDFormat15VerifySignatureEP16STORAGESIGNATUREj (./libmscordbi.so)
undefined symbol: DAC_PAL_RegisterModule (./libmscordbi.so)
undefined symbol: _ZN14UTSemReadWrite4InitEv (./libmscordbi.so)
undefined symbol: _ZNK9PEDecoder14CheckNTHeadersEv (./libmscordbi.so)
undefined symbol: _Z19_FillMDDefaultValuehPKvjP15_MDDefaultValue (./libmscordbi.so)
undefined symbol: _ZN8MDFormat14GetFirstStreamEP13STORAGEHEADERPKv (./libmscordbi.so)
undefined symbol: _ZNK9PEDecoder10GetRvaDataEj8IsNullOK (./libmscordbi.so)
undefined symbol: _ZNK9PEDecoder12HasNTHeadersEv (./libmscordbi.so)
undefined symbol: _ZN14UTSemReadWrite10UnlockReadEv (./libmscordbi.so)
undefined symbol: _ZN14UTSemReadWriteD1Ev (./libmscordbi.so)
undefined symbol: _ZNK9PEDecoder20FindReadyToRunHeaderEv (./libmscordbi.so)

Part of PR dotnet#81573 needed to be undone to build libmscordbi.so without
any undefined symbols from the DAC. The DAC_PAL_RegisterModule, etc. stubs I recommended didn't work and DBI
could not be loaded by SOS because of missing exports.
The double pass at the libraries from the `target_link_libraries(mscordbi ${COREDBI_LIBRARIES} ${COREDBI_LIBRARIES})`
cmake file needed to be restored. The stubs were not needed after that.
@mikem8361mikem8361 self-assigned this Feb 22, 2023
@am11

am11 commented Feb 22, 2023

Copy link
Copy Markdown
Member

@mikem8361, unfortunately it breaks clang 16 build. It's currently in rc3 stage (scheduled to be released on March 7):

# host environment: bash on ubuntu 20.04 amd64
$ docker build - -t dotnet-prereq-clang16 <<EOFFROM amd64/ubuntuRUN apt update; apt install -y cmake curl wget software-properties-common gnupg liblttng-ust-dev libkrb5-dev libicu-dev libssl-dev libz-dev; \ curl -sSL https://apt.llvm.org/llvm.sh | bash -s - 16 allEOF
$ docker run --rm -v$(pwd):/runtime dotnet-prereq-clang16 /runtime/src/coreclr/build-runtime.sh
# snip
[ 85%] Linking CXX shared library libclrjit.so
[ 85%] Building CXX object jit/CMakeFiles/clrjit_win_x86_x64.dir/lir.cpp.o
ld.lld: error: version script assignment of 'V1.0' to symbol 'PAL_RegisterModule' failed: symbol not defined
ld.lld: error: version script assignment of 'V1.0' to symbol 'PAL_UnregisterModule' failed: symbol not defined
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [dlls/mscordbi/CMakeFiles/mscordbi.dir/build.make:187: dlls/mscordbi/libmscordbi.so] Error 1
make[1]: *** [CMakeFiles/Makefile2:4537: dlls/mscordbi/CMakeFiles/mscordbi.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
[ 85%] Building CXX object jit/CMakeFiles/clrjit_unix_x64_x64.dir/lsra.cpp.o
[ 85%] Building CXX object jit/CMakeFiles/clrjit_win_x64_x64.dir/emitxarch.cpp.o
...
make: *** [Makefile:136: all] Error 2
/
Failed to build "CoreCLR component".

Do you see another way to satisfy both lld-16 and SOS?

@am11

am11 commented Feb 22, 2023

Copy link
Copy Markdown
Member

With main the build succeeds and ldd resolves all symbols:

$ docker run --rm -v$(pwd):/runtime dotnet-prereq-clang16 \
ldd /runtime/artifacts/bin/coreclr/linux.x64.Debug/libmscordbi.so
linux-vdso.so.1 (0x00007ffda470a000)
libmscordaccore.so => /runtime/artifacts/bin/coreclr/linux.x64.Debug/libmscordaccore.so (0x00007fdd66eec000)
libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fdd66cbb000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fdd66bd4000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fdd66bb4000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fdd6698c000)
/lib64/ld-linux-x86-64.so.2 (0x00007fdd677db000)

@mikem8361

Copy link
Copy Markdown
ContributorAuthor

I think you need the -r to show the undefined symbols.

@hoyosjs

Copy link
Copy Markdown
Member

We might have to merge this while we figure out next steps. It would block upstack repos from debugging.

@mikem8361

Copy link
Copy Markdown
ContributorAuthor

I have no idea why this is happening with clang 16 and not older versions.

Like Juan said it is breaking SOS, VS debugging and our debugger testing. We should merge this and figure out the clang 16 issue.

@am11am11 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Figured out a way to make both worlds happy.

@@ -100,7 +100,10 @@ elseif(CLR_CMAKE_HOST_UNIX)
mscordaccore
)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
# Before llvm 16, lld was setting `--undefined-version` by default. The default was
# flipped to `--no-undefined-version` in lld 16, so we will explicitly set it to
# `--undefined-version` for our use-case.
#
include(CheckLinkerFlag OPTIONAL)
if(COMMAND check_linker_flag)
check_linker_flag(CXX -Wl,--undefined-version LINKER_SUPPORTS_UNDEFINED_VERSION)
if (LINKER_SUPPORTS_UNDEFINED_VERSION)
add_linker_flag(-Wl,--undefined-version)
endif(LINKER_SUPPORTS_UNDEFINED_VERSION)
endif(COMMAND check_linker_flag)

Fixes the compilation error and ldd -r libmscordbi.so reports no missing symbols.

@am11am11 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM. Thanks! :)

@mikem8361
mikem8361 merged commit 71034dd into dotnet:mainFeb 22, 2023
@mikem8361
mikem8361 deleted the fixdbiimport branch February 22, 2023 07:28
@ghostghost locked as resolved and limited conversation to collaborators Mar 24, 2023
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@mikem8361@am11@hoyosjs@jeffhandley
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Fix DBI loading problem on Linux by mikem8361 · Pull Request #82461 · dotnet/runtime · GitHub
Skip to content

Fix DBI loading problem on Linux - #82461

Merged
mikem8361 merged 2 commits into
dotnet:mainfrom
mikem8361:fixdbiimport
Feb 22, 2023
Merged

Fix DBI loading problem on Linux#82461
mikem8361 merged 2 commits into
dotnet:mainfrom
mikem8361:fixdbiimport

Conversation

@mikem8361

@mikem8361mikem8361 commented Feb 22, 2023

Copy link
Copy Markdown
Contributor

Part of PR #81573 needed to be undone to build libmscordbi.so without any undefined symbols from the DAC. The DAC_PAL_RegisterModule, etc. stubs I recommended didn't work and DBI could not be loaded by SOS (and I assume other debuggers) because of missing exports.

The double pass at the libraries from the target_link_libraries(mscordbi ${COREDBI_LIBRARIES} ${COREDBI_LIBRARIES}) cmake file needed to be restored. The stubs were not needed after that.

Before the changes:

~/diagnostics/.dotnet-test/shared/Microsoft.NETCore.App/8.0.0-preview.2.23116.1$ ldd -r libmscordbi.so
linux-vdso.so.1 (0x00007ffe54bee000)
libmscordaccore.so => /home/mikem/diagnostics/.dotnet-test/shared/Microsoft.NETCore.App/8.0.0-preview.2.23116.1/./libmscordaccore.so (0x00007fc29f686000)
libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fc29f499000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fc29f34a000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fc29f32f000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fc29f13d000)
/lib64/ld-linux-x86-64.so.2 (0x00007fc29faa0000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fc29f118000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fc29f10e000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fc29f108000)
undefined symbol: _Z22DAC_PAL_RegisterModulePKc (./libmscordbi.so)
undefined symbol: _Z24DAC_PAL_UnregisterModulePv (./libmscordbi.so)

When I build the latest main I locally I get even more undefines before this fix:

 linux-vdso.so.1 (0x00007ffef5dfe000)
libmscordaccore.so => /home/mikem/runtime/artifacts/bin/coreclr/linux.x64.Release/sharedFramework/./libmscordaccore.so (0x00007f4f1bb77000)
libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f4f1b98a000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f4f1b83b000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f4f1b820000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f4f1b62e000)
/lib64/ld-linux-x86-64.so.2 (0x00007f4f1bf73000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f4f1b609000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f4f1b5ff000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f4f1b5f9000)
undefined symbol: _ZN14UTSemReadWrite11UnlockWriteEv (./libmscordbi.so)
undefined symbol: _ZN14UTSemReadWriteC1Ev (./libmscordbi.so)
undefined symbol: _ZNK9PEDecoder14CheckCorHeaderEv (./libmscordbi.so)
undefined symbol: _Z17SplitPathInteriorPKDsPS0_PmS1_S2_S1_S2_S1_S2_ (./libmscordbi.so)
undefined symbol: _ZN14UTSemReadWrite8LockReadEv (./libmscordbi.so)
undefined symbol: _ZNK9PEDecoder11GetMetadataEPj (./libmscordbi.so)
undefined symbol: DAC_PAL_UnregisterModule (./libmscordbi.so)
undefined symbol: _ZN14UTSemReadWrite9LockWriteEv (./libmscordbi.so)
undefined symbol: _ZN8MDFormat15VerifySignatureEP16STORAGESIGNATUREj (./libmscordbi.so)
undefined symbol: DAC_PAL_RegisterModule (./libmscordbi.so)
undefined symbol: _ZN14UTSemReadWrite4InitEv (./libmscordbi.so)
undefined symbol: _ZNK9PEDecoder14CheckNTHeadersEv (./libmscordbi.so)
undefined symbol: _Z19_FillMDDefaultValuehPKvjP15_MDDefaultValue (./libmscordbi.so)
undefined symbol: _ZN8MDFormat14GetFirstStreamEP13STORAGEHEADERPKv (./libmscordbi.so)
undefined symbol: _ZNK9PEDecoder10GetRvaDataEj8IsNullOK (./libmscordbi.so)
undefined symbol: _ZNK9PEDecoder12HasNTHeadersEv (./libmscordbi.so)
undefined symbol: _ZN14UTSemReadWrite10UnlockReadEv (./libmscordbi.so)
undefined symbol: _ZN14UTSemReadWriteD1Ev (./libmscordbi.so)
undefined symbol: _ZNK9PEDecoder20FindReadyToRunHeaderEv (./libmscordbi.so)

Part of PR dotnet#81573 needed to be undone to build libmscordbi.so without
any undefined symbols from the DAC. The DAC_PAL_RegisterModule, etc. stubs I recommended didn't work and DBI
could not be loaded by SOS because of missing exports.
The double pass at the libraries from the `target_link_libraries(mscordbi ${COREDBI_LIBRARIES} ${COREDBI_LIBRARIES})`
cmake file needed to be restored. The stubs were not needed after that.
@mikem8361mikem8361 self-assigned this Feb 22, 2023
@am11

am11 commented Feb 22, 2023

Copy link
Copy Markdown
Member

@mikem8361, unfortunately it breaks clang 16 build. It's currently in rc3 stage (scheduled to be released on March 7):

# host environment: bash on ubuntu 20.04 amd64
$ docker build - -t dotnet-prereq-clang16 <<EOFFROM amd64/ubuntuRUN apt update; apt install -y cmake curl wget software-properties-common gnupg liblttng-ust-dev libkrb5-dev libicu-dev libssl-dev libz-dev; \ curl -sSL https://apt.llvm.org/llvm.sh | bash -s - 16 allEOF
$ docker run --rm -v$(pwd):/runtime dotnet-prereq-clang16 /runtime/src/coreclr/build-runtime.sh
# snip
[ 85%] Linking CXX shared library libclrjit.so
[ 85%] Building CXX object jit/CMakeFiles/clrjit_win_x86_x64.dir/lir.cpp.o
ld.lld: error: version script assignment of 'V1.0' to symbol 'PAL_RegisterModule' failed: symbol not defined
ld.lld: error: version script assignment of 'V1.0' to symbol 'PAL_UnregisterModule' failed: symbol not defined
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [dlls/mscordbi/CMakeFiles/mscordbi.dir/build.make:187: dlls/mscordbi/libmscordbi.so] Error 1
make[1]: *** [CMakeFiles/Makefile2:4537: dlls/mscordbi/CMakeFiles/mscordbi.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
[ 85%] Building CXX object jit/CMakeFiles/clrjit_unix_x64_x64.dir/lsra.cpp.o
[ 85%] Building CXX object jit/CMakeFiles/clrjit_win_x64_x64.dir/emitxarch.cpp.o
...
make: *** [Makefile:136: all] Error 2
/
Failed to build "CoreCLR component".

Do you see another way to satisfy both lld-16 and SOS?

@am11

am11 commented Feb 22, 2023

Copy link
Copy Markdown
Member

With main the build succeeds and ldd resolves all symbols:

$ docker run --rm -v$(pwd):/runtime dotnet-prereq-clang16 \
ldd /runtime/artifacts/bin/coreclr/linux.x64.Debug/libmscordbi.so
linux-vdso.so.1 (0x00007ffda470a000)
libmscordaccore.so => /runtime/artifacts/bin/coreclr/linux.x64.Debug/libmscordaccore.so (0x00007fdd66eec000)
libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fdd66cbb000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fdd66bd4000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fdd66bb4000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fdd6698c000)
/lib64/ld-linux-x86-64.so.2 (0x00007fdd677db000)

@mikem8361

Copy link
Copy Markdown
ContributorAuthor

I think you need the -r to show the undefined symbols.

@hoyosjs

Copy link
Copy Markdown
Member

We might have to merge this while we figure out next steps. It would block upstack repos from debugging.

@mikem8361

Copy link
Copy Markdown
ContributorAuthor

I have no idea why this is happening with clang 16 and not older versions.

Like Juan said it is breaking SOS, VS debugging and our debugger testing. We should merge this and figure out the clang 16 issue.

@am11am11 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Figured out a way to make both worlds happy.

@@ -100,7 +100,10 @@ elseif(CLR_CMAKE_HOST_UNIX)
mscordaccore
)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
# Before llvm 16, lld was setting `--undefined-version` by default. The default was
# flipped to `--no-undefined-version` in lld 16, so we will explicitly set it to
# `--undefined-version` for our use-case.
#
include(CheckLinkerFlag OPTIONAL)
if(COMMAND check_linker_flag)
check_linker_flag(CXX -Wl,--undefined-version LINKER_SUPPORTS_UNDEFINED_VERSION)
if (LINKER_SUPPORTS_UNDEFINED_VERSION)
add_linker_flag(-Wl,--undefined-version)
endif(LINKER_SUPPORTS_UNDEFINED_VERSION)
endif(COMMAND check_linker_flag)

Fixes the compilation error and ldd -r libmscordbi.so reports no missing symbols.

@am11am11 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM. Thanks! :)

@mikem8361
mikem8361 merged commit 71034dd into dotnet:mainFeb 22, 2023
@mikem8361
mikem8361 deleted the fixdbiimport branch February 22, 2023 07:28
@ghostghost locked as resolved and limited conversation to collaborators Mar 24, 2023
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@mikem8361@am11@hoyosjs@jeffhandley
, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Fix DBI loading problem on Linux by mikem8361 · Pull Request #82461 · dotnet/runtime · GitHub
Skip to content

Fix DBI loading problem on Linux - #82461

Merged
mikem8361 merged 2 commits into
dotnet:mainfrom
mikem8361:fixdbiimport
Feb 22, 2023
Merged

Fix DBI loading problem on Linux#82461
mikem8361 merged 2 commits into
dotnet:mainfrom
mikem8361:fixdbiimport

Conversation

@mikem8361

@mikem8361mikem8361 commented Feb 22, 2023

Copy link
Copy Markdown
Contributor

Part of PR #81573 needed to be undone to build libmscordbi.so without any undefined symbols from the DAC. The DAC_PAL_RegisterModule, etc. stubs I recommended didn't work and DBI could not be loaded by SOS (and I assume other debuggers) because of missing exports.

The double pass at the libraries from the target_link_libraries(mscordbi ${COREDBI_LIBRARIES} ${COREDBI_LIBRARIES}) cmake file needed to be restored. The stubs were not needed after that.

Before the changes:

~/diagnostics/.dotnet-test/shared/Microsoft.NETCore.App/8.0.0-preview.2.23116.1$ ldd -r libmscordbi.so
linux-vdso.so.1 (0x00007ffe54bee000)
libmscordaccore.so => /home/mikem/diagnostics/.dotnet-test/shared/Microsoft.NETCore.App/8.0.0-preview.2.23116.1/./libmscordaccore.so (0x00007fc29f686000)
libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fc29f499000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fc29f34a000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fc29f32f000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fc29f13d000)
/lib64/ld-linux-x86-64.so.2 (0x00007fc29faa0000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fc29f118000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fc29f10e000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fc29f108000)
undefined symbol: _Z22DAC_PAL_RegisterModulePKc (./libmscordbi.so)
undefined symbol: _Z24DAC_PAL_UnregisterModulePv (./libmscordbi.so)

When I build the latest main I locally I get even more undefines before this fix:

 linux-vdso.so.1 (0x00007ffef5dfe000)
libmscordaccore.so => /home/mikem/runtime/artifacts/bin/coreclr/linux.x64.Release/sharedFramework/./libmscordaccore.so (0x00007f4f1bb77000)
libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f4f1b98a000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f4f1b83b000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f4f1b820000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f4f1b62e000)
/lib64/ld-linux-x86-64.so.2 (0x00007f4f1bf73000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f4f1b609000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f4f1b5ff000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f4f1b5f9000)
undefined symbol: _ZN14UTSemReadWrite11UnlockWriteEv (./libmscordbi.so)
undefined symbol: _ZN14UTSemReadWriteC1Ev (./libmscordbi.so)
undefined symbol: _ZNK9PEDecoder14CheckCorHeaderEv (./libmscordbi.so)
undefined symbol: _Z17SplitPathInteriorPKDsPS0_PmS1_S2_S1_S2_S1_S2_ (./libmscordbi.so)
undefined symbol: _ZN14UTSemReadWrite8LockReadEv (./libmscordbi.so)
undefined symbol: _ZNK9PEDecoder11GetMetadataEPj (./libmscordbi.so)
undefined symbol: DAC_PAL_UnregisterModule (./libmscordbi.so)
undefined symbol: _ZN14UTSemReadWrite9LockWriteEv (./libmscordbi.so)
undefined symbol: _ZN8MDFormat15VerifySignatureEP16STORAGESIGNATUREj (./libmscordbi.so)
undefined symbol: DAC_PAL_RegisterModule (./libmscordbi.so)
undefined symbol: _ZN14UTSemReadWrite4InitEv (./libmscordbi.so)
undefined symbol: _ZNK9PEDecoder14CheckNTHeadersEv (./libmscordbi.so)
undefined symbol: _Z19_FillMDDefaultValuehPKvjP15_MDDefaultValue (./libmscordbi.so)
undefined symbol: _ZN8MDFormat14GetFirstStreamEP13STORAGEHEADERPKv (./libmscordbi.so)
undefined symbol: _ZNK9PEDecoder10GetRvaDataEj8IsNullOK (./libmscordbi.so)
undefined symbol: _ZNK9PEDecoder12HasNTHeadersEv (./libmscordbi.so)
undefined symbol: _ZN14UTSemReadWrite10UnlockReadEv (./libmscordbi.so)
undefined symbol: _ZN14UTSemReadWriteD1Ev (./libmscordbi.so)
undefined symbol: _ZNK9PEDecoder20FindReadyToRunHeaderEv (./libmscordbi.so)

Part of PR dotnet#81573 needed to be undone to build libmscordbi.so without
any undefined symbols from the DAC. The DAC_PAL_RegisterModule, etc. stubs I recommended didn't work and DBI
could not be loaded by SOS because of missing exports.
The double pass at the libraries from the `target_link_libraries(mscordbi ${COREDBI_LIBRARIES} ${COREDBI_LIBRARIES})`
cmake file needed to be restored. The stubs were not needed after that.
@mikem8361mikem8361 self-assigned this Feb 22, 2023
@am11

am11 commented Feb 22, 2023

Copy link
Copy Markdown
Member

@mikem8361, unfortunately it breaks clang 16 build. It's currently in rc3 stage (scheduled to be released on March 7):

# host environment: bash on ubuntu 20.04 amd64
$ docker build - -t dotnet-prereq-clang16 <<EOFFROM amd64/ubuntuRUN apt update; apt install -y cmake curl wget software-properties-common gnupg liblttng-ust-dev libkrb5-dev libicu-dev libssl-dev libz-dev; \ curl -sSL https://apt.llvm.org/llvm.sh | bash -s - 16 allEOF
$ docker run --rm -v$(pwd):/runtime dotnet-prereq-clang16 /runtime/src/coreclr/build-runtime.sh
# snip
[ 85%] Linking CXX shared library libclrjit.so
[ 85%] Building CXX object jit/CMakeFiles/clrjit_win_x86_x64.dir/lir.cpp.o
ld.lld: error: version script assignment of 'V1.0' to symbol 'PAL_RegisterModule' failed: symbol not defined
ld.lld: error: version script assignment of 'V1.0' to symbol 'PAL_UnregisterModule' failed: symbol not defined
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [dlls/mscordbi/CMakeFiles/mscordbi.dir/build.make:187: dlls/mscordbi/libmscordbi.so] Error 1
make[1]: *** [CMakeFiles/Makefile2:4537: dlls/mscordbi/CMakeFiles/mscordbi.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
[ 85%] Building CXX object jit/CMakeFiles/clrjit_unix_x64_x64.dir/lsra.cpp.o
[ 85%] Building CXX object jit/CMakeFiles/clrjit_win_x64_x64.dir/emitxarch.cpp.o
...
make: *** [Makefile:136: all] Error 2
/
Failed to build "CoreCLR component".

Do you see another way to satisfy both lld-16 and SOS?

@am11

am11 commented Feb 22, 2023

Copy link
Copy Markdown
Member

With main the build succeeds and ldd resolves all symbols:

$ docker run --rm -v$(pwd):/runtime dotnet-prereq-clang16 \
ldd /runtime/artifacts/bin/coreclr/linux.x64.Debug/libmscordbi.so
linux-vdso.so.1 (0x00007ffda470a000)
libmscordaccore.so => /runtime/artifacts/bin/coreclr/linux.x64.Debug/libmscordaccore.so (0x00007fdd66eec000)
libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fdd66cbb000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fdd66bd4000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fdd66bb4000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fdd6698c000)
/lib64/ld-linux-x86-64.so.2 (0x00007fdd677db000)

@mikem8361

Copy link
Copy Markdown
ContributorAuthor

I think you need the -r to show the undefined symbols.

@hoyosjs

Copy link
Copy Markdown
Member

We might have to merge this while we figure out next steps. It would block upstack repos from debugging.

@mikem8361

Copy link
Copy Markdown
ContributorAuthor

I have no idea why this is happening with clang 16 and not older versions.

Like Juan said it is breaking SOS, VS debugging and our debugger testing. We should merge this and figure out the clang 16 issue.

@am11am11 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Figured out a way to make both worlds happy.

@@ -100,7 +100,10 @@ elseif(CLR_CMAKE_HOST_UNIX)
mscordaccore
)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
# Before llvm 16, lld was setting `--undefined-version` by default. The default was
# flipped to `--no-undefined-version` in lld 16, so we will explicitly set it to
# `--undefined-version` for our use-case.
#
include(CheckLinkerFlag OPTIONAL)
if(COMMAND check_linker_flag)
check_linker_flag(CXX -Wl,--undefined-version LINKER_SUPPORTS_UNDEFINED_VERSION)
if (LINKER_SUPPORTS_UNDEFINED_VERSION)
add_linker_flag(-Wl,--undefined-version)
endif(LINKER_SUPPORTS_UNDEFINED_VERSION)
endif(COMMAND check_linker_flag)

Fixes the compilation error and ldd -r libmscordbi.so reports no missing symbols.

@am11am11 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM. Thanks! :)

@mikem8361
mikem8361 merged commit 71034dd into dotnet:mainFeb 22, 2023
@mikem8361
mikem8361 deleted the fixdbiimport branch February 22, 2023 07:28
@ghostghost locked as resolved and limited conversation to collaborators Mar 24, 2023
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@mikem8361@am11@hoyosjs@jeffhandley
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' Fix DBI loading problem on Linux by mikem8361 · Pull Request #82461 · dotnet/runtime · GitHub
Skip to content

Fix DBI loading problem on Linux - #82461

Merged
mikem8361 merged 2 commits into
dotnet:mainfrom
mikem8361:fixdbiimport
Feb 22, 2023
Merged

Fix DBI loading problem on Linux#82461
mikem8361 merged 2 commits into
dotnet:mainfrom
mikem8361:fixdbiimport

Conversation

@mikem8361

@mikem8361mikem8361 commented Feb 22, 2023

Copy link
Copy Markdown
Contributor

Part of PR #81573 needed to be undone to build libmscordbi.so without any undefined symbols from the DAC. The DAC_PAL_RegisterModule, etc. stubs I recommended didn't work and DBI could not be loaded by SOS (and I assume other debuggers) because of missing exports.

The double pass at the libraries from the target_link_libraries(mscordbi ${COREDBI_LIBRARIES} ${COREDBI_LIBRARIES}) cmake file needed to be restored. The stubs were not needed after that.

Before the changes:

~/diagnostics/.dotnet-test/shared/Microsoft.NETCore.App/8.0.0-preview.2.23116.1$ ldd -r libmscordbi.so
linux-vdso.so.1 (0x00007ffe54bee000)
libmscordaccore.so => /home/mikem/diagnostics/.dotnet-test/shared/Microsoft.NETCore.App/8.0.0-preview.2.23116.1/./libmscordaccore.so (0x00007fc29f686000)
libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fc29f499000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fc29f34a000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fc29f32f000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fc29f13d000)
/lib64/ld-linux-x86-64.so.2 (0x00007fc29faa0000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fc29f118000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fc29f10e000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fc29f108000)
undefined symbol: _Z22DAC_PAL_RegisterModulePKc (./libmscordbi.so)
undefined symbol: _Z24DAC_PAL_UnregisterModulePv (./libmscordbi.so)

When I build the latest main I locally I get even more undefines before this fix:

 linux-vdso.so.1 (0x00007ffef5dfe000)
libmscordaccore.so => /home/mikem/runtime/artifacts/bin/coreclr/linux.x64.Release/sharedFramework/./libmscordaccore.so (0x00007f4f1bb77000)
libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f4f1b98a000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f4f1b83b000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f4f1b820000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f4f1b62e000)
/lib64/ld-linux-x86-64.so.2 (0x00007f4f1bf73000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f4f1b609000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f4f1b5ff000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f4f1b5f9000)
undefined symbol: _ZN14UTSemReadWrite11UnlockWriteEv (./libmscordbi.so)
undefined symbol: _ZN14UTSemReadWriteC1Ev (./libmscordbi.so)
undefined symbol: _ZNK9PEDecoder14CheckCorHeaderEv (./libmscordbi.so)
undefined symbol: _Z17SplitPathInteriorPKDsPS0_PmS1_S2_S1_S2_S1_S2_ (./libmscordbi.so)
undefined symbol: _ZN14UTSemReadWrite8LockReadEv (./libmscordbi.so)
undefined symbol: _ZNK9PEDecoder11GetMetadataEPj (./libmscordbi.so)
undefined symbol: DAC_PAL_UnregisterModule (./libmscordbi.so)
undefined symbol: _ZN14UTSemReadWrite9LockWriteEv (./libmscordbi.so)
undefined symbol: _ZN8MDFormat15VerifySignatureEP16STORAGESIGNATUREj (./libmscordbi.so)
undefined symbol: DAC_PAL_RegisterModule (./libmscordbi.so)
undefined symbol: _ZN14UTSemReadWrite4InitEv (./libmscordbi.so)
undefined symbol: _ZNK9PEDecoder14CheckNTHeadersEv (./libmscordbi.so)
undefined symbol: _Z19_FillMDDefaultValuehPKvjP15_MDDefaultValue (./libmscordbi.so)
undefined symbol: _ZN8MDFormat14GetFirstStreamEP13STORAGEHEADERPKv (./libmscordbi.so)
undefined symbol: _ZNK9PEDecoder10GetRvaDataEj8IsNullOK (./libmscordbi.so)
undefined symbol: _ZNK9PEDecoder12HasNTHeadersEv (./libmscordbi.so)
undefined symbol: _ZN14UTSemReadWrite10UnlockReadEv (./libmscordbi.so)
undefined symbol: _ZN14UTSemReadWriteD1Ev (./libmscordbi.so)
undefined symbol: _ZNK9PEDecoder20FindReadyToRunHeaderEv (./libmscordbi.so)

Part of PR dotnet#81573 needed to be undone to build libmscordbi.so without
any undefined symbols from the DAC. The DAC_PAL_RegisterModule, etc. stubs I recommended didn't work and DBI
could not be loaded by SOS because of missing exports.
The double pass at the libraries from the `target_link_libraries(mscordbi ${COREDBI_LIBRARIES} ${COREDBI_LIBRARIES})`
cmake file needed to be restored. The stubs were not needed after that.
@mikem8361mikem8361 self-assigned this Feb 22, 2023
@am11

am11 commented Feb 22, 2023

Copy link
Copy Markdown
Member

@mikem8361, unfortunately it breaks clang 16 build. It's currently in rc3 stage (scheduled to be released on March 7):

# host environment: bash on ubuntu 20.04 amd64
$ docker build - -t dotnet-prereq-clang16 <<EOFFROM amd64/ubuntuRUN apt update; apt install -y cmake curl wget software-properties-common gnupg liblttng-ust-dev libkrb5-dev libicu-dev libssl-dev libz-dev; \ curl -sSL https://apt.llvm.org/llvm.sh | bash -s - 16 allEOF
$ docker run --rm -v$(pwd):/runtime dotnet-prereq-clang16 /runtime/src/coreclr/build-runtime.sh
# snip
[ 85%] Linking CXX shared library libclrjit.so
[ 85%] Building CXX object jit/CMakeFiles/clrjit_win_x86_x64.dir/lir.cpp.o
ld.lld: error: version script assignment of 'V1.0' to symbol 'PAL_RegisterModule' failed: symbol not defined
ld.lld: error: version script assignment of 'V1.0' to symbol 'PAL_UnregisterModule' failed: symbol not defined
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [dlls/mscordbi/CMakeFiles/mscordbi.dir/build.make:187: dlls/mscordbi/libmscordbi.so] Error 1
make[1]: *** [CMakeFiles/Makefile2:4537: dlls/mscordbi/CMakeFiles/mscordbi.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
[ 85%] Building CXX object jit/CMakeFiles/clrjit_unix_x64_x64.dir/lsra.cpp.o
[ 85%] Building CXX object jit/CMakeFiles/clrjit_win_x64_x64.dir/emitxarch.cpp.o
...
make: *** [Makefile:136: all] Error 2
/
Failed to build "CoreCLR component".

Do you see another way to satisfy both lld-16 and SOS?

@am11

am11 commented Feb 22, 2023

Copy link
Copy Markdown
Member

With main the build succeeds and ldd resolves all symbols:

$ docker run --rm -v$(pwd):/runtime dotnet-prereq-clang16 \
ldd /runtime/artifacts/bin/coreclr/linux.x64.Debug/libmscordbi.so
linux-vdso.so.1 (0x00007ffda470a000)
libmscordaccore.so => /runtime/artifacts/bin/coreclr/linux.x64.Debug/libmscordaccore.so (0x00007fdd66eec000)
libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fdd66cbb000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fdd66bd4000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fdd66bb4000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fdd6698c000)
/lib64/ld-linux-x86-64.so.2 (0x00007fdd677db000)

@mikem8361

Copy link
Copy Markdown
ContributorAuthor

I think you need the -r to show the undefined symbols.

@hoyosjs

Copy link
Copy Markdown
Member

We might have to merge this while we figure out next steps. It would block upstack repos from debugging.

@mikem8361

Copy link
Copy Markdown
ContributorAuthor

I have no idea why this is happening with clang 16 and not older versions.

Like Juan said it is breaking SOS, VS debugging and our debugger testing. We should merge this and figure out the clang 16 issue.

@am11am11 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Figured out a way to make both worlds happy.

@@ -100,7 +100,10 @@ elseif(CLR_CMAKE_HOST_UNIX)
mscordaccore
)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
# Before llvm 16, lld was setting `--undefined-version` by default. The default was
# flipped to `--no-undefined-version` in lld 16, so we will explicitly set it to
# `--undefined-version` for our use-case.
#
include(CheckLinkerFlag OPTIONAL)
if(COMMAND check_linker_flag)
check_linker_flag(CXX -Wl,--undefined-version LINKER_SUPPORTS_UNDEFINED_VERSION)
if (LINKER_SUPPORTS_UNDEFINED_VERSION)
add_linker_flag(-Wl,--undefined-version)
endif(LINKER_SUPPORTS_UNDEFINED_VERSION)
endif(COMMAND check_linker_flag)

Fixes the compilation error and ldd -r libmscordbi.so reports no missing symbols.

@am11am11 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM. Thanks! :)

@mikem8361
mikem8361 merged commit 71034dd into dotnet:mainFeb 22, 2023
@mikem8361
mikem8361 deleted the fixdbiimport branch February 22, 2023 07:28
@ghostghost locked as resolved and limited conversation to collaborators Mar 24, 2023
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@mikem8361@am11@hoyosjs@jeffhandley
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Fix DBI loading problem on Linux by mikem8361 · Pull Request #82461 · dotnet/runtime · GitHub
Skip to content

Fix DBI loading problem on Linux - #82461

Merged
mikem8361 merged 2 commits into
dotnet:mainfrom
mikem8361:fixdbiimport
Feb 22, 2023
Merged

Fix DBI loading problem on Linux#82461
mikem8361 merged 2 commits into
dotnet:mainfrom
mikem8361:fixdbiimport

Conversation

@mikem8361

@mikem8361mikem8361 commented Feb 22, 2023

Copy link
Copy Markdown
Contributor

Part of PR #81573 needed to be undone to build libmscordbi.so without any undefined symbols from the DAC. The DAC_PAL_RegisterModule, etc. stubs I recommended didn't work and DBI could not be loaded by SOS (and I assume other debuggers) because of missing exports.

The double pass at the libraries from the target_link_libraries(mscordbi ${COREDBI_LIBRARIES} ${COREDBI_LIBRARIES}) cmake file needed to be restored. The stubs were not needed after that.

Before the changes:

~/diagnostics/.dotnet-test/shared/Microsoft.NETCore.App/8.0.0-preview.2.23116.1$ ldd -r libmscordbi.so
linux-vdso.so.1 (0x00007ffe54bee000)
libmscordaccore.so => /home/mikem/diagnostics/.dotnet-test/shared/Microsoft.NETCore.App/8.0.0-preview.2.23116.1/./libmscordaccore.so (0x00007fc29f686000)
libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fc29f499000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fc29f34a000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fc29f32f000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fc29f13d000)
/lib64/ld-linux-x86-64.so.2 (0x00007fc29faa0000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fc29f118000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fc29f10e000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fc29f108000)
undefined symbol: _Z22DAC_PAL_RegisterModulePKc (./libmscordbi.so)
undefined symbol: _Z24DAC_PAL_UnregisterModulePv (./libmscordbi.so)

When I build the latest main I locally I get even more undefines before this fix:

 linux-vdso.so.1 (0x00007ffef5dfe000)
libmscordaccore.so => /home/mikem/runtime/artifacts/bin/coreclr/linux.x64.Release/sharedFramework/./libmscordaccore.so (0x00007f4f1bb77000)
libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f4f1b98a000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f4f1b83b000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f4f1b820000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f4f1b62e000)
/lib64/ld-linux-x86-64.so.2 (0x00007f4f1bf73000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f4f1b609000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f4f1b5ff000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f4f1b5f9000)
undefined symbol: _ZN14UTSemReadWrite11UnlockWriteEv (./libmscordbi.so)
undefined symbol: _ZN14UTSemReadWriteC1Ev (./libmscordbi.so)
undefined symbol: _ZNK9PEDecoder14CheckCorHeaderEv (./libmscordbi.so)
undefined symbol: _Z17SplitPathInteriorPKDsPS0_PmS1_S2_S1_S2_S1_S2_ (./libmscordbi.so)
undefined symbol: _ZN14UTSemReadWrite8LockReadEv (./libmscordbi.so)
undefined symbol: _ZNK9PEDecoder11GetMetadataEPj (./libmscordbi.so)
undefined symbol: DAC_PAL_UnregisterModule (./libmscordbi.so)
undefined symbol: _ZN14UTSemReadWrite9LockWriteEv (./libmscordbi.so)
undefined symbol: _ZN8MDFormat15VerifySignatureEP16STORAGESIGNATUREj (./libmscordbi.so)
undefined symbol: DAC_PAL_RegisterModule (./libmscordbi.so)
undefined symbol: _ZN14UTSemReadWrite4InitEv (./libmscordbi.so)
undefined symbol: _ZNK9PEDecoder14CheckNTHeadersEv (./libmscordbi.so)
undefined symbol: _Z19_FillMDDefaultValuehPKvjP15_MDDefaultValue (./libmscordbi.so)
undefined symbol: _ZN8MDFormat14GetFirstStreamEP13STORAGEHEADERPKv (./libmscordbi.so)
undefined symbol: _ZNK9PEDecoder10GetRvaDataEj8IsNullOK (./libmscordbi.so)
undefined symbol: _ZNK9PEDecoder12HasNTHeadersEv (./libmscordbi.so)
undefined symbol: _ZN14UTSemReadWrite10UnlockReadEv (./libmscordbi.so)
undefined symbol: _ZN14UTSemReadWriteD1Ev (./libmscordbi.so)
undefined symbol: _ZNK9PEDecoder20FindReadyToRunHeaderEv (./libmscordbi.so)

Part of PR dotnet#81573 needed to be undone to build libmscordbi.so without
any undefined symbols from the DAC. The DAC_PAL_RegisterModule, etc. stubs I recommended didn't work and DBI
could not be loaded by SOS because of missing exports.
The double pass at the libraries from the `target_link_libraries(mscordbi ${COREDBI_LIBRARIES} ${COREDBI_LIBRARIES})`
cmake file needed to be restored. The stubs were not needed after that.
@mikem8361mikem8361 self-assigned this Feb 22, 2023
@am11

am11 commented Feb 22, 2023

Copy link
Copy Markdown
Member

@mikem8361, unfortunately it breaks clang 16 build. It's currently in rc3 stage (scheduled to be released on March 7):

# host environment: bash on ubuntu 20.04 amd64
$ docker build - -t dotnet-prereq-clang16 <<EOFFROM amd64/ubuntuRUN apt update; apt install -y cmake curl wget software-properties-common gnupg liblttng-ust-dev libkrb5-dev libicu-dev libssl-dev libz-dev; \ curl -sSL https://apt.llvm.org/llvm.sh | bash -s - 16 allEOF
$ docker run --rm -v$(pwd):/runtime dotnet-prereq-clang16 /runtime/src/coreclr/build-runtime.sh
# snip
[ 85%] Linking CXX shared library libclrjit.so
[ 85%] Building CXX object jit/CMakeFiles/clrjit_win_x86_x64.dir/lir.cpp.o
ld.lld: error: version script assignment of 'V1.0' to symbol 'PAL_RegisterModule' failed: symbol not defined
ld.lld: error: version script assignment of 'V1.0' to symbol 'PAL_UnregisterModule' failed: symbol not defined
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [dlls/mscordbi/CMakeFiles/mscordbi.dir/build.make:187: dlls/mscordbi/libmscordbi.so] Error 1
make[1]: *** [CMakeFiles/Makefile2:4537: dlls/mscordbi/CMakeFiles/mscordbi.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
[ 85%] Building CXX object jit/CMakeFiles/clrjit_unix_x64_x64.dir/lsra.cpp.o
[ 85%] Building CXX object jit/CMakeFiles/clrjit_win_x64_x64.dir/emitxarch.cpp.o
...
make: *** [Makefile:136: all] Error 2
/
Failed to build "CoreCLR component".

Do you see another way to satisfy both lld-16 and SOS?

@am11

am11 commented Feb 22, 2023

Copy link
Copy Markdown
Member

With main the build succeeds and ldd resolves all symbols:

$ docker run --rm -v$(pwd):/runtime dotnet-prereq-clang16 \
ldd /runtime/artifacts/bin/coreclr/linux.x64.Debug/libmscordbi.so
linux-vdso.so.1 (0x00007ffda470a000)
libmscordaccore.so => /runtime/artifacts/bin/coreclr/linux.x64.Debug/libmscordaccore.so (0x00007fdd66eec000)
libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fdd66cbb000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fdd66bd4000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fdd66bb4000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fdd6698c000)
/lib64/ld-linux-x86-64.so.2 (0x00007fdd677db000)

@mikem8361

Copy link
Copy Markdown
ContributorAuthor

I think you need the -r to show the undefined symbols.

@hoyosjs

Copy link
Copy Markdown
Member

We might have to merge this while we figure out next steps. It would block upstack repos from debugging.

@mikem8361

Copy link
Copy Markdown
ContributorAuthor

I have no idea why this is happening with clang 16 and not older versions.

Like Juan said it is breaking SOS, VS debugging and our debugger testing. We should merge this and figure out the clang 16 issue.

@am11am11 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Figured out a way to make both worlds happy.

@@ -100,7 +100,10 @@ elseif(CLR_CMAKE_HOST_UNIX)
mscordaccore
)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
# Before llvm 16, lld was setting `--undefined-version` by default. The default was
# flipped to `--no-undefined-version` in lld 16, so we will explicitly set it to
# `--undefined-version` for our use-case.
#
include(CheckLinkerFlag OPTIONAL)
if(COMMAND check_linker_flag)
check_linker_flag(CXX -Wl,--undefined-version LINKER_SUPPORTS_UNDEFINED_VERSION)
if (LINKER_SUPPORTS_UNDEFINED_VERSION)
add_linker_flag(-Wl,--undefined-version)
endif(LINKER_SUPPORTS_UNDEFINED_VERSION)
endif(COMMAND check_linker_flag)

Fixes the compilation error and ldd -r libmscordbi.so reports no missing symbols.

@am11am11 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM. Thanks! :)

@mikem8361
mikem8361 merged commit 71034dd into dotnet:mainFeb 22, 2023
@mikem8361
mikem8361 deleted the fixdbiimport branch February 22, 2023 07:28
@ghostghost locked as resolved and limited conversation to collaborators Mar 24, 2023
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@mikem8361@am11@hoyosjs@jeffhandley
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Fix DBI loading problem on Linux by mikem8361 · Pull Request #82461 · dotnet/runtime · GitHub
Skip to content

Fix DBI loading problem on Linux - #82461

Merged
mikem8361 merged 2 commits into
dotnet:mainfrom
mikem8361:fixdbiimport
Feb 22, 2023
Merged

Fix DBI loading problem on Linux#82461
mikem8361 merged 2 commits into
dotnet:mainfrom
mikem8361:fixdbiimport

Conversation

@mikem8361

@mikem8361mikem8361 commented Feb 22, 2023

Copy link
Copy Markdown
Contributor

Part of PR #81573 needed to be undone to build libmscordbi.so without any undefined symbols from the DAC. The DAC_PAL_RegisterModule, etc. stubs I recommended didn't work and DBI could not be loaded by SOS (and I assume other debuggers) because of missing exports.

The double pass at the libraries from the target_link_libraries(mscordbi ${COREDBI_LIBRARIES} ${COREDBI_LIBRARIES}) cmake file needed to be restored. The stubs were not needed after that.

Before the changes:

~/diagnostics/.dotnet-test/shared/Microsoft.NETCore.App/8.0.0-preview.2.23116.1$ ldd -r libmscordbi.so
linux-vdso.so.1 (0x00007ffe54bee000)
libmscordaccore.so => /home/mikem/diagnostics/.dotnet-test/shared/Microsoft.NETCore.App/8.0.0-preview.2.23116.1/./libmscordaccore.so (0x00007fc29f686000)
libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fc29f499000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fc29f34a000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fc29f32f000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fc29f13d000)
/lib64/ld-linux-x86-64.so.2 (0x00007fc29faa0000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fc29f118000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fc29f10e000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fc29f108000)
undefined symbol: _Z22DAC_PAL_RegisterModulePKc (./libmscordbi.so)
undefined symbol: _Z24DAC_PAL_UnregisterModulePv (./libmscordbi.so)

When I build the latest main I locally I get even more undefines before this fix:

 linux-vdso.so.1 (0x00007ffef5dfe000)
libmscordaccore.so => /home/mikem/runtime/artifacts/bin/coreclr/linux.x64.Release/sharedFramework/./libmscordaccore.so (0x00007f4f1bb77000)
libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f4f1b98a000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f4f1b83b000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f4f1b820000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f4f1b62e000)
/lib64/ld-linux-x86-64.so.2 (0x00007f4f1bf73000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f4f1b609000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f4f1b5ff000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f4f1b5f9000)
undefined symbol: _ZN14UTSemReadWrite11UnlockWriteEv (./libmscordbi.so)
undefined symbol: _ZN14UTSemReadWriteC1Ev (./libmscordbi.so)
undefined symbol: _ZNK9PEDecoder14CheckCorHeaderEv (./libmscordbi.so)
undefined symbol: _Z17SplitPathInteriorPKDsPS0_PmS1_S2_S1_S2_S1_S2_ (./libmscordbi.so)
undefined symbol: _ZN14UTSemReadWrite8LockReadEv (./libmscordbi.so)
undefined symbol: _ZNK9PEDecoder11GetMetadataEPj (./libmscordbi.so)
undefined symbol: DAC_PAL_UnregisterModule (./libmscordbi.so)
undefined symbol: _ZN14UTSemReadWrite9LockWriteEv (./libmscordbi.so)
undefined symbol: _ZN8MDFormat15VerifySignatureEP16STORAGESIGNATUREj (./libmscordbi.so)
undefined symbol: DAC_PAL_RegisterModule (./libmscordbi.so)
undefined symbol: _ZN14UTSemReadWrite4InitEv (./libmscordbi.so)
undefined symbol: _ZNK9PEDecoder14CheckNTHeadersEv (./libmscordbi.so)
undefined symbol: _Z19_FillMDDefaultValuehPKvjP15_MDDefaultValue (./libmscordbi.so)
undefined symbol: _ZN8MDFormat14GetFirstStreamEP13STORAGEHEADERPKv (./libmscordbi.so)
undefined symbol: _ZNK9PEDecoder10GetRvaDataEj8IsNullOK (./libmscordbi.so)
undefined symbol: _ZNK9PEDecoder12HasNTHeadersEv (./libmscordbi.so)
undefined symbol: _ZN14UTSemReadWrite10UnlockReadEv (./libmscordbi.so)
undefined symbol: _ZN14UTSemReadWriteD1Ev (./libmscordbi.so)
undefined symbol: _ZNK9PEDecoder20FindReadyToRunHeaderEv (./libmscordbi.so)

Part of PR dotnet#81573 needed to be undone to build libmscordbi.so without
any undefined symbols from the DAC. The DAC_PAL_RegisterModule, etc. stubs I recommended didn't work and DBI
could not be loaded by SOS because of missing exports.
The double pass at the libraries from the `target_link_libraries(mscordbi ${COREDBI_LIBRARIES} ${COREDBI_LIBRARIES})`
cmake file needed to be restored. The stubs were not needed after that.
@mikem8361mikem8361 self-assigned this Feb 22, 2023
@am11

am11 commented Feb 22, 2023

Copy link
Copy Markdown
Member

@mikem8361, unfortunately it breaks clang 16 build. It's currently in rc3 stage (scheduled to be released on March 7):

# host environment: bash on ubuntu 20.04 amd64
$ docker build - -t dotnet-prereq-clang16 <<EOFFROM amd64/ubuntuRUN apt update; apt install -y cmake curl wget software-properties-common gnupg liblttng-ust-dev libkrb5-dev libicu-dev libssl-dev libz-dev; \ curl -sSL https://apt.llvm.org/llvm.sh | bash -s - 16 allEOF
$ docker run --rm -v$(pwd):/runtime dotnet-prereq-clang16 /runtime/src/coreclr/build-runtime.sh
# snip
[ 85%] Linking CXX shared library libclrjit.so
[ 85%] Building CXX object jit/CMakeFiles/clrjit_win_x86_x64.dir/lir.cpp.o
ld.lld: error: version script assignment of 'V1.0' to symbol 'PAL_RegisterModule' failed: symbol not defined
ld.lld: error: version script assignment of 'V1.0' to symbol 'PAL_UnregisterModule' failed: symbol not defined
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [dlls/mscordbi/CMakeFiles/mscordbi.dir/build.make:187: dlls/mscordbi/libmscordbi.so] Error 1
make[1]: *** [CMakeFiles/Makefile2:4537: dlls/mscordbi/CMakeFiles/mscordbi.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
[ 85%] Building CXX object jit/CMakeFiles/clrjit_unix_x64_x64.dir/lsra.cpp.o
[ 85%] Building CXX object jit/CMakeFiles/clrjit_win_x64_x64.dir/emitxarch.cpp.o
...
make: *** [Makefile:136: all] Error 2
/
Failed to build "CoreCLR component".

Do you see another way to satisfy both lld-16 and SOS?

@am11

am11 commented Feb 22, 2023

Copy link
Copy Markdown
Member

With main the build succeeds and ldd resolves all symbols:

$ docker run --rm -v$(pwd):/runtime dotnet-prereq-clang16 \
ldd /runtime/artifacts/bin/coreclr/linux.x64.Debug/libmscordbi.so
linux-vdso.so.1 (0x00007ffda470a000)
libmscordaccore.so => /runtime/artifacts/bin/coreclr/linux.x64.Debug/libmscordaccore.so (0x00007fdd66eec000)
libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fdd66cbb000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fdd66bd4000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fdd66bb4000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fdd6698c000)
/lib64/ld-linux-x86-64.so.2 (0x00007fdd677db000)

@mikem8361

Copy link
Copy Markdown
ContributorAuthor

I think you need the -r to show the undefined symbols.

@hoyosjs

Copy link
Copy Markdown
Member

We might have to merge this while we figure out next steps. It would block upstack repos from debugging.

@mikem8361

Copy link
Copy Markdown
ContributorAuthor

I have no idea why this is happening with clang 16 and not older versions.

Like Juan said it is breaking SOS, VS debugging and our debugger testing. We should merge this and figure out the clang 16 issue.

@am11am11 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Figured out a way to make both worlds happy.

@@ -100,7 +100,10 @@ elseif(CLR_CMAKE_HOST_UNIX)
mscordaccore
)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
# Before llvm 16, lld was setting `--undefined-version` by default. The default was
# flipped to `--no-undefined-version` in lld 16, so we will explicitly set it to
# `--undefined-version` for our use-case.
#
include(CheckLinkerFlag OPTIONAL)
if(COMMAND check_linker_flag)
check_linker_flag(CXX -Wl,--undefined-version LINKER_SUPPORTS_UNDEFINED_VERSION)
if (LINKER_SUPPORTS_UNDEFINED_VERSION)
add_linker_flag(-Wl,--undefined-version)
endif(LINKER_SUPPORTS_UNDEFINED_VERSION)
endif(COMMAND check_linker_flag)

Fixes the compilation error and ldd -r libmscordbi.so reports no missing symbols.

@am11am11 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM. Thanks! :)

@mikem8361
mikem8361 merged commit 71034dd into dotnet:mainFeb 22, 2023
@mikem8361
mikem8361 deleted the fixdbiimport branch February 22, 2023 07:28
@ghostghost locked as resolved and limited conversation to collaborators Mar 24, 2023
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@mikem8361@am11@hoyosjs@jeffhandley
, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); Fix DBI loading problem on Linux by mikem8361 · Pull Request #82461 · dotnet/runtime · GitHub
Skip to content

Fix DBI loading problem on Linux - #82461

Merged
mikem8361 merged 2 commits into
dotnet:mainfrom
mikem8361:fixdbiimport
Feb 22, 2023
Merged

Fix DBI loading problem on Linux#82461
mikem8361 merged 2 commits into
dotnet:mainfrom
mikem8361:fixdbiimport

Conversation

@mikem8361

@mikem8361mikem8361 commented Feb 22, 2023

Copy link
Copy Markdown
Contributor

Part of PR #81573 needed to be undone to build libmscordbi.so without any undefined symbols from the DAC. The DAC_PAL_RegisterModule, etc. stubs I recommended didn't work and DBI could not be loaded by SOS (and I assume other debuggers) because of missing exports.

The double pass at the libraries from the target_link_libraries(mscordbi ${COREDBI_LIBRARIES} ${COREDBI_LIBRARIES}) cmake file needed to be restored. The stubs were not needed after that.

Before the changes:

~/diagnostics/.dotnet-test/shared/Microsoft.NETCore.App/8.0.0-preview.2.23116.1$ ldd -r libmscordbi.so
linux-vdso.so.1 (0x00007ffe54bee000)
libmscordaccore.so => /home/mikem/diagnostics/.dotnet-test/shared/Microsoft.NETCore.App/8.0.0-preview.2.23116.1/./libmscordaccore.so (0x00007fc29f686000)
libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fc29f499000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fc29f34a000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fc29f32f000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fc29f13d000)
/lib64/ld-linux-x86-64.so.2 (0x00007fc29faa0000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fc29f118000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fc29f10e000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fc29f108000)
undefined symbol: _Z22DAC_PAL_RegisterModulePKc (./libmscordbi.so)
undefined symbol: _Z24DAC_PAL_UnregisterModulePv (./libmscordbi.so)

When I build the latest main I locally I get even more undefines before this fix:

 linux-vdso.so.1 (0x00007ffef5dfe000)
libmscordaccore.so => /home/mikem/runtime/artifacts/bin/coreclr/linux.x64.Release/sharedFramework/./libmscordaccore.so (0x00007f4f1bb77000)
libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f4f1b98a000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f4f1b83b000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f4f1b820000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f4f1b62e000)
/lib64/ld-linux-x86-64.so.2 (0x00007f4f1bf73000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f4f1b609000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f4f1b5ff000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f4f1b5f9000)
undefined symbol: _ZN14UTSemReadWrite11UnlockWriteEv (./libmscordbi.so)
undefined symbol: _ZN14UTSemReadWriteC1Ev (./libmscordbi.so)
undefined symbol: _ZNK9PEDecoder14CheckCorHeaderEv (./libmscordbi.so)
undefined symbol: _Z17SplitPathInteriorPKDsPS0_PmS1_S2_S1_S2_S1_S2_ (./libmscordbi.so)
undefined symbol: _ZN14UTSemReadWrite8LockReadEv (./libmscordbi.so)
undefined symbol: _ZNK9PEDecoder11GetMetadataEPj (./libmscordbi.so)
undefined symbol: DAC_PAL_UnregisterModule (./libmscordbi.so)
undefined symbol: _ZN14UTSemReadWrite9LockWriteEv (./libmscordbi.so)
undefined symbol: _ZN8MDFormat15VerifySignatureEP16STORAGESIGNATUREj (./libmscordbi.so)
undefined symbol: DAC_PAL_RegisterModule (./libmscordbi.so)
undefined symbol: _ZN14UTSemReadWrite4InitEv (./libmscordbi.so)
undefined symbol: _ZNK9PEDecoder14CheckNTHeadersEv (./libmscordbi.so)
undefined symbol: _Z19_FillMDDefaultValuehPKvjP15_MDDefaultValue (./libmscordbi.so)
undefined symbol: _ZN8MDFormat14GetFirstStreamEP13STORAGEHEADERPKv (./libmscordbi.so)
undefined symbol: _ZNK9PEDecoder10GetRvaDataEj8IsNullOK (./libmscordbi.so)
undefined symbol: _ZNK9PEDecoder12HasNTHeadersEv (./libmscordbi.so)
undefined symbol: _ZN14UTSemReadWrite10UnlockReadEv (./libmscordbi.so)
undefined symbol: _ZN14UTSemReadWriteD1Ev (./libmscordbi.so)
undefined symbol: _ZNK9PEDecoder20FindReadyToRunHeaderEv (./libmscordbi.so)

Part of PR dotnet#81573 needed to be undone to build libmscordbi.so without
any undefined symbols from the DAC. The DAC_PAL_RegisterModule, etc. stubs I recommended didn't work and DBI
could not be loaded by SOS because of missing exports.
The double pass at the libraries from the `target_link_libraries(mscordbi ${COREDBI_LIBRARIES} ${COREDBI_LIBRARIES})`
cmake file needed to be restored. The stubs were not needed after that.
@mikem8361mikem8361 self-assigned this Feb 22, 2023
@am11

am11 commented Feb 22, 2023

Copy link
Copy Markdown
Member

@mikem8361, unfortunately it breaks clang 16 build. It's currently in rc3 stage (scheduled to be released on March 7):

# host environment: bash on ubuntu 20.04 amd64
$ docker build - -t dotnet-prereq-clang16 <<EOFFROM amd64/ubuntuRUN apt update; apt install -y cmake curl wget software-properties-common gnupg liblttng-ust-dev libkrb5-dev libicu-dev libssl-dev libz-dev; \ curl -sSL https://apt.llvm.org/llvm.sh | bash -s - 16 allEOF
$ docker run --rm -v$(pwd):/runtime dotnet-prereq-clang16 /runtime/src/coreclr/build-runtime.sh
# snip
[ 85%] Linking CXX shared library libclrjit.so
[ 85%] Building CXX object jit/CMakeFiles/clrjit_win_x86_x64.dir/lir.cpp.o
ld.lld: error: version script assignment of 'V1.0' to symbol 'PAL_RegisterModule' failed: symbol not defined
ld.lld: error: version script assignment of 'V1.0' to symbol 'PAL_UnregisterModule' failed: symbol not defined
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [dlls/mscordbi/CMakeFiles/mscordbi.dir/build.make:187: dlls/mscordbi/libmscordbi.so] Error 1
make[1]: *** [CMakeFiles/Makefile2:4537: dlls/mscordbi/CMakeFiles/mscordbi.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
[ 85%] Building CXX object jit/CMakeFiles/clrjit_unix_x64_x64.dir/lsra.cpp.o
[ 85%] Building CXX object jit/CMakeFiles/clrjit_win_x64_x64.dir/emitxarch.cpp.o
...
make: *** [Makefile:136: all] Error 2
/
Failed to build "CoreCLR component".

Do you see another way to satisfy both lld-16 and SOS?

@am11

am11 commented Feb 22, 2023

Copy link
Copy Markdown
Member

With main the build succeeds and ldd resolves all symbols:

$ docker run --rm -v$(pwd):/runtime dotnet-prereq-clang16 \
ldd /runtime/artifacts/bin/coreclr/linux.x64.Debug/libmscordbi.so
linux-vdso.so.1 (0x00007ffda470a000)
libmscordaccore.so => /runtime/artifacts/bin/coreclr/linux.x64.Debug/libmscordaccore.so (0x00007fdd66eec000)
libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fdd66cbb000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fdd66bd4000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fdd66bb4000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fdd6698c000)
/lib64/ld-linux-x86-64.so.2 (0x00007fdd677db000)

@mikem8361

Copy link
Copy Markdown
ContributorAuthor

I think you need the -r to show the undefined symbols.

@hoyosjs

Copy link
Copy Markdown
Member

We might have to merge this while we figure out next steps. It would block upstack repos from debugging.

@mikem8361

Copy link
Copy Markdown
ContributorAuthor

I have no idea why this is happening with clang 16 and not older versions.

Like Juan said it is breaking SOS, VS debugging and our debugger testing. We should merge this and figure out the clang 16 issue.

@am11am11 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Figured out a way to make both worlds happy.

@@ -100,7 +100,10 @@ elseif(CLR_CMAKE_HOST_UNIX)
mscordaccore
)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
# Before llvm 16, lld was setting `--undefined-version` by default. The default was
# flipped to `--no-undefined-version` in lld 16, so we will explicitly set it to
# `--undefined-version` for our use-case.
#
include(CheckLinkerFlag OPTIONAL)
if(COMMAND check_linker_flag)
check_linker_flag(CXX -Wl,--undefined-version LINKER_SUPPORTS_UNDEFINED_VERSION)
if (LINKER_SUPPORTS_UNDEFINED_VERSION)
add_linker_flag(-Wl,--undefined-version)
endif(LINKER_SUPPORTS_UNDEFINED_VERSION)
endif(COMMAND check_linker_flag)

Fixes the compilation error and ldd -r libmscordbi.so reports no missing symbols.

@am11am11 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM. Thanks! :)

@mikem8361
mikem8361 merged commit 71034dd into dotnet:mainFeb 22, 2023
@mikem8361
mikem8361 deleted the fixdbiimport branch February 22, 2023 07:28
@ghostghost locked as resolved and limited conversation to collaborators Mar 24, 2023
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@mikem8361@am11@hoyosjs@jeffhandley