Revert "[compiler-rt][XRay] Make xray_interface.h
C compliant" (#141570)
Reverts llvm/llvm-project#140068 Failures on PPC buildbots.
This commit is contained in:
parent
7569de5272
commit
bf6cd24aaa
@ -1,4 +1,4 @@
|
||||
//===- xray_interface.h ---------------------------------------------------===//
|
||||
//===- xray_interface.h -----------------------------------------*- C++ -*-===//
|
||||
//
|
||||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||
// See https://llvm.org/LICENSE.txt for license information.
|
||||
@ -14,17 +14,10 @@
|
||||
#ifndef XRAY_XRAY_INTERFACE_H
|
||||
#define XRAY_XRAY_INTERFACE_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
#include <cstddef>
|
||||
#include <cstdint>
|
||||
#else
|
||||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/// Synchronize this with AsmPrinter::SledKind in LLVM.
|
||||
enum XRayEntryType {
|
||||
@ -56,7 +49,7 @@ enum XRayEntryType {
|
||||
/// achieved by marking them all with: __attribute__((xray_never_instrument))
|
||||
///
|
||||
/// Returns 1 on success, 0 on error.
|
||||
extern int __xray_set_handler(void (*entry)(int32_t, enum XRayEntryType));
|
||||
extern int __xray_set_handler(void (*entry)(int32_t, XRayEntryType));
|
||||
|
||||
/// This removes whatever the currently provided handler is. Returns 1 on
|
||||
/// success, 0 on error.
|
||||
@ -67,7 +60,7 @@ extern int __xray_remove_handler();
|
||||
/// start logging their subsequent affected function calls (if patched).
|
||||
///
|
||||
/// Returns 1 on success, 0 on error.
|
||||
extern int __xray_set_handler_arg1(void (*entry)(int32_t, enum XRayEntryType,
|
||||
extern int __xray_set_handler_arg1(void (*entry)(int32_t, XRayEntryType,
|
||||
uint64_t));
|
||||
|
||||
/// Disables the XRay handler used to log first arguments of function calls.
|
||||
@ -75,7 +68,7 @@ extern int __xray_set_handler_arg1(void (*entry)(int32_t, enum XRayEntryType,
|
||||
extern int __xray_remove_handler_arg1();
|
||||
|
||||
/// Provide a function to invoke when XRay encounters a custom event.
|
||||
extern int __xray_set_customevent_handler(void (*entry)(void *, size_t));
|
||||
extern int __xray_set_customevent_handler(void (*entry)(void *, std::size_t));
|
||||
|
||||
/// This removes whatever the currently provided custom event handler is.
|
||||
/// Returns 1 on success, 0 on error.
|
||||
@ -102,39 +95,39 @@ enum XRayPatchingStatus {
|
||||
|
||||
/// This tells XRay to patch the instrumentation points in all currently loaded
|
||||
/// objects. See XRayPatchingStatus for possible result values.
|
||||
extern enum XRayPatchingStatus __xray_patch();
|
||||
extern XRayPatchingStatus __xray_patch();
|
||||
|
||||
/// This tells XRay to patch the instrumentation points in the given object.
|
||||
/// See XRayPatchingStatus for possible result values.
|
||||
extern enum XRayPatchingStatus __xray_patch_object(int32_t ObjId);
|
||||
extern XRayPatchingStatus __xray_patch_object(int32_t ObjId);
|
||||
|
||||
/// Reverses the effect of __xray_patch(). See XRayPatchingStatus for possible
|
||||
/// result values.
|
||||
extern enum XRayPatchingStatus __xray_unpatch();
|
||||
extern XRayPatchingStatus __xray_unpatch();
|
||||
|
||||
/// Reverses the effect of __xray_patch_object. See XRayPatchingStatus for
|
||||
/// possible result values.
|
||||
extern enum XRayPatchingStatus __xray_unpatch_object(int32_t ObjId);
|
||||
extern XRayPatchingStatus __xray_unpatch_object(int32_t ObjId);
|
||||
|
||||
/// This unpacks the given (packed) function id and patches
|
||||
/// the corresponding function. See XRayPatchingStatus for possible
|
||||
/// result values.
|
||||
extern enum XRayPatchingStatus __xray_patch_function(int32_t FuncId);
|
||||
extern XRayPatchingStatus __xray_patch_function(int32_t FuncId);
|
||||
|
||||
/// This patches a specific function in the given object. See XRayPatchingStatus
|
||||
/// for possible result values.
|
||||
extern enum XRayPatchingStatus __xray_patch_function_in_object(int32_t FuncId,
|
||||
int32_t ObjId);
|
||||
extern XRayPatchingStatus __xray_patch_function_in_object(int32_t FuncId,
|
||||
int32_t ObjId);
|
||||
|
||||
/// This unpacks the given (packed) function id and unpatches
|
||||
/// the corresponding function. See XRayPatchingStatus for possible
|
||||
/// result values.
|
||||
extern enum XRayPatchingStatus __xray_unpatch_function(int32_t FuncId);
|
||||
extern XRayPatchingStatus __xray_unpatch_function(int32_t FuncId);
|
||||
|
||||
/// This unpatches a specific function in the given object.
|
||||
/// See XRayPatchingStatus for possible result values.
|
||||
extern enum XRayPatchingStatus __xray_unpatch_function_in_object(int32_t FuncId,
|
||||
int32_t ObjId);
|
||||
extern XRayPatchingStatus __xray_unpatch_function_in_object(int32_t FuncId,
|
||||
int32_t ObjId);
|
||||
|
||||
/// This function unpacks the given (packed) function id and returns the address
|
||||
/// of the corresponding function. We return 0 if we encounter any error, even
|
||||
@ -180,8 +173,6 @@ extern int32_t __xray_pack_id(int32_t FuncId, int32_t ObjId);
|
||||
/// Calling __xray_init() more than once is safe across multiple threads.
|
||||
extern void __xray_init();
|
||||
|
||||
#ifdef __cplusplus
|
||||
} // end extern "C"
|
||||
#endif
|
||||
|
||||
#endif // XRAY_XRAY_INTERFACE_H
|
||||
|
@ -1,51 +0,0 @@
|
||||
// Check that we can patch and un-patch on demand, and that logging gets invoked
|
||||
// appropriately.
|
||||
//
|
||||
// RUN: %clang_xray -fxray-instrument -std=c23 %s -o %t
|
||||
// RUN: env XRAY_OPTIONS="patch_premain=false" %run %t 2>&1 | FileCheck %s
|
||||
// RUN: %clang_xray -fxray-instrument -fno-xray-function-index -std=c23 %s -o %t
|
||||
// RUN: env XRAY_OPTIONS="patch_premain=false" %run %t 2>&1 | FileCheck %s
|
||||
|
||||
// UNSUPPORTED: target-is-mips64,target-is-mips64el
|
||||
|
||||
#include "xray/xray_interface.h"
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
bool called = false;
|
||||
|
||||
void test_handler(int32_t fid, enum XRayEntryType type) {
|
||||
printf("called: %d, type=%d\n", fid, (int32_t)(type));
|
||||
called = true;
|
||||
}
|
||||
|
||||
[[clang::xray_always_instrument]] void always_instrument() {
|
||||
printf("always instrumented called\n");
|
||||
}
|
||||
|
||||
int main() {
|
||||
__xray_set_handler(test_handler);
|
||||
always_instrument();
|
||||
// CHECK: always instrumented called
|
||||
auto status = __xray_patch();
|
||||
printf("patching status: %d\n", (int32_t)status);
|
||||
// CHECK-NEXT: patching status: 1
|
||||
always_instrument();
|
||||
// CHECK-NEXT: called: {{.*}}, type=0
|
||||
// CHECK-NEXT: always instrumented called
|
||||
// CHECK-NEXT: called: {{.*}}, type=1
|
||||
status = __xray_unpatch();
|
||||
printf("patching status: %d\n", (int32_t)status);
|
||||
// CHECK-NEXT: patching status: 1
|
||||
always_instrument();
|
||||
// CHECK-NEXT: always instrumented called
|
||||
status = __xray_patch();
|
||||
printf("patching status: %d\n", (int32_t)status);
|
||||
// CHECK-NEXT: patching status: 1
|
||||
__xray_remove_handler();
|
||||
always_instrument();
|
||||
// CHECK-NEXT: always instrumented called
|
||||
status = __xray_unpatch();
|
||||
printf("patching status: %d\n", (int32_t)status);
|
||||
// CHECK-NEXT: patching status: 1
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user