diff --git a/clang/lib/Driver/ToolChains/Fuchsia.cpp b/clang/lib/Driver/ToolChains/Fuchsia.cpp --- a/clang/lib/Driver/ToolChains/Fuchsia.cpp +++ b/clang/lib/Driver/ToolChains/Fuchsia.cpp @@ -53,6 +53,13 @@ CmdArgs.push_back("-z"); CmdArgs.push_back("now"); + // 0 is never a valid code address for Fuchsia (user or kernel), so using the + // traditional 0 value for references to discarded code is always fine on + // Fuchsia. The new defaults of -1 and such in lld confuse some older tools + // for no benefit to Fuchsia. + CmdArgs.push_back("-z"); + CmdArgs.push_back("dead-reloc-in-nonalloc=*=0"); + const char *Exec = Args.MakeArgString(ToolChain.GetLinkerPath()); if (llvm::sys::path::filename(Exec).equals_lower("ld.lld") || llvm::sys::path::stem(Exec).equals_lower("ld.lld")) {