43 lines · cpp
1// Check that we can get the first function argument logged2// using a custom logging function.3//4// RUN: %clangxx_xray -std=c++11 %s -o %t5// RUN: rm -f arg1-logger-*6// RUN: env XRAY_OPTIONS="patch_premain=true verbosity=1 xray_mode=xray-basic \7// RUN: xray_logfile_base=arg1-logger-" %run %t 2>&1 | FileCheck %s8//9// After all that, clean up the XRay log file.10//11// RUN: rm -f arg1-logger-*12 13// REQUIRES: target={{(aarch64|x86_64)-.*}}14 15#include "xray/xray_interface.h"16 17#include <cinttypes>18#include <cstdio>19 20void arg1logger(int32_t fn, XRayEntryType t, uint64_t a1) {21 printf("Arg1: %" PRIx64 ", XRayEntryType %u\n", a1, t);22}23 24[[clang::xray_always_instrument, clang::xray_log_args(1)]] void foo(void *) {}25 26int main() {27 // CHECK: XRay: Log file in 'arg1-logger-{{.*}}'28 29 __xray_set_handler_arg1(arg1logger);30 foo(nullptr);31 // CHECK: Arg1: 0, XRayEntryType 332 33 __xray_remove_handler_arg1();34 foo((void *) 0xBADC0DE);35 // nothing expected to see here36 37 __xray_set_handler_arg1(arg1logger);38 foo((void *) 0xDEADBEEFCAFE);39 // CHECK-NEXT: Arg1: deadbeefcafe, XRayEntryType 340 foo((void *) -1);41 // CHECK-NEXT: Arg1: ffffffffffffffff, XRayEntryType 342}43