[asan] Disable asm instrumentation on unsupported platforms.
authorEvgeniy Stepanov <eugeni.stepanov@gmail.com>
Wed, 30 Apr 2014 14:04:31 +0000 (14:04 +0000)
committerEvgeniy Stepanov <eugeni.stepanov@gmail.com>
Wed, 30 Apr 2014 14:04:31 +0000 (14:04 +0000)
Only emit calls to compiler-rt asm routines on platforms where they are
present (currently limited to linux i386/x86_64).

Patch by Yuri Gorshenin.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@207651 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/X86/AsmParser/X86AsmInstrumentation.cpp

index 030778af7e1a27c3719cd74ff4201bac16810be8..c8b541f3af611dc361ee5d8eb7ddd619a7c09480 100644 (file)
@@ -11,6 +11,7 @@
 #include "X86AsmInstrumentation.h"
 #include "X86Operand.h"
 #include "llvm/ADT/StringExtras.h"
+#include "llvm/ADT/Triple.h"
 #include "llvm/IR/Function.h"
 #include "llvm/MC/MCContext.h"
 #include "llvm/MC/MCInst.h"
@@ -207,9 +208,11 @@ void X86AsmInstrumentation::InstrumentInstruction(
     MCContext &Ctx, const MCInstrInfo &MII, MCStreamer &Out) {}
 
 X86AsmInstrumentation *
-CreateX86AsmInstrumentation(const MCTargetOptions &MCOptions, const MCContext &Ctx,
-                            const MCSubtargetInfo &STI) {
-  if (MCOptions.SanitizeAddress) {
+CreateX86AsmInstrumentation(const MCTargetOptions &MCOptions,
+                            const MCContext &Ctx, const MCSubtargetInfo &STI) {
+  Triple T(STI.getTargetTriple());
+  const bool hasCompilerRTSupport = T.isOSLinux();
+  if (hasCompilerRTSupport && MCOptions.SanitizeAddress) {
     if ((STI.getFeatureBits() & X86::Mode32Bit) != 0)
       return new X86AddressSanitizer32(STI);
     if ((STI.getFeatureBits() & X86::Mode64Bit) != 0)