Index: projects/compiler-rt/lib/safestack/CMakeLists.txt =================================================================== --- projects/compiler-rt/lib/safestack/CMakeLists.txt +++ projects/compiler-rt/lib/safestack/CMakeLists.txt @@ -9,13 +9,13 @@ if(APPLE) # Build universal binary on APPLE. add_compiler_rt_runtime(clang_rt.safestack - STATIC + SHARED OS osx ARCHS ${SAFESTACK_SUPPORTED_ARCH} SOURCES ${SAFESTACK_SOURCES} $ $ - $ + $ CFLAGS ${SAFESTACK_CFLAGS} PARENT_TARGET safestack) else() Index: tools/clang/lib/Driver/ToolChains.cpp =================================================================== --- tools/clang/lib/Driver/ToolChains.cpp +++ tools/clang/lib/Driver/ToolChains.cpp @@ -413,6 +413,8 @@ AddLinkSanitizerLibArgs(Args, CmdArgs, "ubsan"); if (Sanitize.needsTsanRt()) AddLinkSanitizerLibArgs(Args, CmdArgs, "tsan"); + if (Sanitize.needsSafeStackRt()) + AddLinkSanitizerLibArgs(Args, CmdArgs, "safestack"); // Otherwise link libSystem, then the dynamic runtime library, and finally any // target specific static runtime library. Index: tools/clang/lib/Driver/Tools.cpp =================================================================== --- tools/clang/lib/Driver/Tools.cpp +++ tools/clang/lib/Driver/Tools.cpp @@ -6958,15 +6958,6 @@ if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nostartfiles)) getMachOToolChain().addStartObjectFileArgs(Args, CmdArgs); - // SafeStack requires its own runtime libraries - // These libraries should be linked first, to make sure the - // __safestack_init constructor executes before everything else - if (getToolChain().getSanitizerArgs().needsSafeStackRt()) { - getMachOToolChain().AddLinkRuntimeLib(Args, CmdArgs, - "libclang_rt.safestack_osx.a", - /*AlwaysLink=*/true); - } - Args.AddAllArgs(CmdArgs, options::OPT_L); AddLinkerInputs(getToolChain(), Inputs, Args, CmdArgs);