Skip to content

[Swift+WASM] [IRGen] disable debugger tuning and atomics on WebAssembly #24119

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions lib/IRGen/IRGen.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -156,6 +156,14 @@ swift::getIRTargetOptions(IRGenOptions &Opts, ASTContext &Ctx) {

auto *Clang = static_cast<ClangImporter *>(Ctx.getClangModuleLoader());
clang::TargetOptions &ClangOpts = Clang->getTargetInfo().getTargetOpts();

// WebAssembly doesn't support atomics or DWARF5 yet.
// (LLVM debugger tuning generates a DWARF5 accel table even when DWARF5 is disabled)
if (Clang->getTargetInfo().getTriple().isOSBinFormatWasm()) {
TargetOpts.DebuggerTuning = llvm::DebuggerKind::Default;
Copy link
Member

Choose a reason for hiding this comment

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

Why change the debugger tuning? That controls whether the debug info is better suited for LLDB or for GDB. You want the DebugVersion.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Tuning for LLDB causes llvm to always generate DWARF5 accel tables: https://github.com/apple/swift-llvm/blob/8d1b92b83c0bd9735f4b8771b26ce96f8c2a3724/lib/CodeGen/AsmPrinter/DwarfDebug.cpp#L300

I'll change the comment to clarify this.

Copy link
Contributor

Choose a reason for hiding this comment

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

llvm has a -accel-tables option, but that isn't a great solution either. I think the best solution would be to lower the DWARF version to DWARF4 for the WASM platform.

Copy link
Contributor

@MaxDesiatov MaxDesiatov May 24, 2022

Choose a reason for hiding this comment

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

@adrian-prantl DWARF version is already set to 4 here https://github.com/apple/swift/blob/5bef9f21187d4297253892a2220737ef222d2689/include/swift/Basic/Dwarf.h#L24 and we don't set it to 5 anywhere for Wasm, so I assume these tweaks are still needed to turn off accel tables? Or would you suggest us to use some other setting for this?

TargetOpts.ThreadModel = llvm::ThreadModel::Single;
}

return std::make_tuple(TargetOpts, ClangOpts.CPU, ClangOpts.Features, ClangOpts.Triple);
}

Expand Down