[AArch64] Registering default MCInstrAnalysis
authorMike Aizatsky <aizatsky@chromium.org>
Fri, 12 Aug 2016 20:28:05 +0000 (20:28 +0000)
committerMike Aizatsky <aizatsky@chromium.org>
Fri, 12 Aug 2016 20:28:05 +0000 (20:28 +0000)
Even in this form it is useful: it can detect branch instructions.

https://github.com/google/sanitizers/issues/706

Subscribers: aemerson, rengolin

Differential Revision: https://reviews.llvm.org/D23426

llvm-svn: 278560

llvm/lib/Target/AArch64/MCTargetDesc/AArch64MCTargetDesc.cpp
llvm/test/tools/sancov/Inputs/test-linux_android_aarch64 [new file with mode: 0644]
llvm/test/tools/sancov/print_coverage_pcs.test

index 7027806..dec7e38 100644 (file)
@@ -15,6 +15,7 @@
 #include "AArch64ELFStreamer.h"
 #include "AArch64MCAsmInfo.h"
 #include "InstPrinter/AArch64InstPrinter.h"
+#include "llvm/MC/MCInstrAnalysis.h"
 #include "llvm/MC/MCInstrInfo.h"
 #include "llvm/MC/MCRegisterInfo.h"
 #include "llvm/MC/MCStreamer.h"
@@ -116,6 +117,10 @@ static MCStreamer *createMachOStreamer(MCContext &Ctx, MCAsmBackend &TAB,
                              /*LabelSections*/ true);
 }
 
+static MCInstrAnalysis *createAArch64InstrAnalysis(const MCInstrInfo *Info) {
+  return new MCInstrAnalysis(Info);
+}
+
 // Force static initialization.
 extern "C" void LLVMInitializeAArch64TargetMC() {
   for (Target *T :
@@ -135,6 +140,9 @@ extern "C" void LLVMInitializeAArch64TargetMC() {
     // Register the MC subtarget info.
     TargetRegistry::RegisterMCSubtargetInfo(*T, createAArch64MCSubtargetInfo);
 
+    // Register the MC instruction analyzer.
+    TargetRegistry::RegisterMCInstrAnalysis(*T, createAArch64InstrAnalysis);
+
     // Register the MC Code Emitter
     TargetRegistry::RegisterMCCodeEmitter(*T, createAArch64MCCodeEmitter);
 
diff --git a/llvm/test/tools/sancov/Inputs/test-linux_android_aarch64 b/llvm/test/tools/sancov/Inputs/test-linux_android_aarch64
new file mode 100644 (file)
index 0000000..854459d
Binary files /dev/null and b/llvm/test/tools/sancov/Inputs/test-linux_android_aarch64 differ
index da304bd..3e3358c 100644 (file)
@@ -3,6 +3,7 @@ RUN: sancov -print-coverage-pcs %p/Inputs/test-linux_x86_64 | FileCheck %s --che
 RUN: llvm-objdump -d %p/Inputs/test-windows_x86_64 | FileCheck %s --check-prefix=DISAS_WIN
 RUN: sancov -print-coverage-pcs %p/Inputs/test-windows_x86_64 | FileCheck %s --check-prefix=WINDOWS
 RUN: sancov -print-coverage-pcs %p/Inputs/test-darwin_x86_64 | FileCheck %s --check-prefix=DARWIN
+RUN: not sancov -print-coverage-pcs %p/Inputs/test-linux_android_aarch64 2>&1 | FileCheck %s --check-prefix=AARCH64
 
 LINUX: 0x4e132b
 LINUX: 0x4e1472
@@ -57,3 +58,6 @@ DARWIN: 0x1000018e0
 DARWIN: 0x100001906
 DARWIN: 0x1000019dc
 DARWIN: 0x100001a28
+
+AARCH64: Error: __sanitizer_cov* functions not found
+