================
@@ -259,6 +260,45 @@ void aix::Linker::ConstructJob(Compilation &C, const 
JobAction &JA,
   // Specify linker input file(s).
   AddLinkerInputs(ToolChain, Inputs, Args, CmdArgs, JA);
 
+  // Add sanitizer libraries.
+  const SanitizerArgs &Sanitize = ToolChain.getSanitizerArgs(Args);
+  const char *sanitizer = nullptr;
+  bool NeedsSanitizerDeps = false;
+  // For now, only support address sanitizer.
+  if (Sanitize.needsAsanRt())
+    sanitizer = "AddressSanitizer";
+
+  if (sanitizer) {
+    if (Sanitize.needsSharedRt()) {
+      
ToolChain.getDriver().Diag(diag::err_drv_unsupported_shared_sanitizer_aix)
+          << sanitizer;
+      return;
+    }
+    NeedsSanitizerDeps = addSanitizerRuntimes(ToolChain, Args, CmdArgs);
+  }
+
+  // Add sanitizer runtime dependencies.
+  if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nostartfiles,
+                   options::OPT_shared, options::OPT_r)) {
----------------
daltenty wrote:

Summarizing an offline discussion: the AIX linkage model, which by default 
doesn't have runtime pre-emption of symbols, makes it problematic when shared 
libraries have static copies of runtimes we'd have linked into the main 
application (i.e. we'd likely end up with multiple copies of the runtime in an 
application if allowed this, which isn't what we want)

https://github.com/llvm/llvm-project/pull/129925
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to