[compiler-rt] r305660 - [XRay][compiler-rt][NFC] Add a test for both arg1 and arg0 handling in the same binary

Dean Michael Berris via llvm-commits llvm-commits at lists.llvm.org
Sun Jun 18 20:52:26 PDT 2017


Author: dberris
Date: Sun Jun 18 22:52:25 2017
New Revision: 305660

URL: http://llvm.org/viewvc/llvm-project?rev=305660&view=rev
Log:
[XRay][compiler-rt][NFC] Add a test for both arg1 and arg0 handling in the same binary

This test makes sure we can handle both arg0 and arg1 handling in the
same binary, and making sure that the XRay runtime calls the correct
trampoline when handlers for both of these cases are installed.

Added:
    compiler-rt/trunk/test/xray/TestCases/Linux/arg1-arg0-logging.cc

Added: compiler-rt/trunk/test/xray/TestCases/Linux/arg1-arg0-logging.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/xray/TestCases/Linux/arg1-arg0-logging.cc?rev=305660&view=auto
==============================================================================
--- compiler-rt/trunk/test/xray/TestCases/Linux/arg1-arg0-logging.cc (added)
+++ compiler-rt/trunk/test/xray/TestCases/Linux/arg1-arg0-logging.cc Sun Jun 18 22:52:25 2017
@@ -0,0 +1,39 @@
+// Allow having both the no-arg and arg1 logging implementation live together,
+// and be called in the correct cases.
+//
+// RUN: rm arg0-arg1-logging-* || true
+// RUN: %clangxx_xray -std=c++11 %s -o %t
+// RUN: XRAY_OPTIONS="patch_premain=true verbosity=1 xray_logfile_base=arg0-arg1-logging-" %run %t
+//
+// TODO: Support these in ARM and PPC
+// XFAIL: arm || aarch64 || mips
+// UNSUPPORTED: powerpc64le
+
+#include "xray/xray_interface.h"
+#include <cassert>
+#include <cstdio>
+
+using namespace std;
+
+bool arg0loggercalled = false;
+void arg0logger(int32_t, XRayEntryType) { arg0loggercalled = true; }
+
+[[clang::xray_always_instrument]] void arg0fn() { printf("hello, arg0!\n"); }
+
+bool arg1loggercalled = false;
+void arg1logger(int32_t, XRayEntryType, uint64_t) { arg1loggercalled = true; }
+
+[[ clang::xray_always_instrument, clang::xray_log_args(1) ]] void
+arg1fn(uint64_t arg1) {
+  printf("hello, arg1!\n");
+}
+
+int main(int argc, char *argv[]) {
+  __xray_set_handler(arg0logger);
+  __xray_set_handler_arg1(arg1logger);
+  arg0fn();
+  arg1fn(0xcafef00d);
+  __xray_remove_handler_arg1();
+  __xray_remove_handler();
+  assert(arg0loggercalled && arg1loggercalled);
+}




More information about the llvm-commits mailing list