Changeset View
Changeset View
Standalone View
Standalone View
include/xray/xray_interface.h
- This file was added.
//===-- xray_interface.h ----------------------------------------*- C++ -*-===// | |||||
// | |||||
// The LLVM Compiler Infrastructure | |||||
// | |||||
// This file is distributed under the University of Illinois Open Source | |||||
// License. See LICENSE.TXT for details. | |||||
// | |||||
//===----------------------------------------------------------------------===// | |||||
// | |||||
// This file is a part of XRay, a dynamic runtime instrumentation system. | |||||
// | |||||
// APIs for controlling XRay functionality explicitly. | |||||
//===----------------------------------------------------------------------===// | |||||
#ifndef XRAY_XRAY_INTERFACE_H | |||||
#define XRAY_XRAY_INTERFACE_H | |||||
#include <cstdint> | |||||
extern "C" { | |||||
rnk: Are you sure you want to use a C++ scoped enum in this interface? The whole thing is extern "C"… | |||||
Not Done ReplyInline ActionsGood point, switched to using a C-style enum instead. dberris: Good point, switched to using a C-style enum instead. | |||||
enum XRayEntryType { ENTRY = 0, EXIT = 1 }; | |||||
// Provide a function to invoke for when instrumentation points are hit. This is | |||||
// a user-visible control surface that overrides the default implementation. The | |||||
// function provided should take the following arguments: | |||||
// | |||||
// - function id: an identifier that indicates the id of a function; this id | |||||
// is generated by xray; the mapping between the function id | |||||
// and the actual function pointer is available through | |||||
// __xray_table. | |||||
// - entry type: identifies what kind of instrumentation point was encountered | |||||
// (function entry, function exit, etc.). See the enum | |||||
// XRayEntryType for more details. | |||||
// | |||||
// Returns 1 on success, 0 on error. | |||||
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. | |||||
extern int __xray_remove_handler(); | |||||
enum XRayPatchingStatus { | |||||
NOT_INITIALIZED = 0, | |||||
NOTIFIED = 1, | |||||
ONGOING = 2, | |||||
FAILED = 3 | |||||
}; | |||||
Maybe this should be another enum? XRayPatchingStatus? rnk: Maybe this should be another enum? XRayPatchingStatus? | |||||
// This tells XRay to patch the instrumentation points. This is an asynchronous | |||||
// process, and returns the following status in specific cases: | |||||
// | |||||
// - 0 : XRay is not initialized. | |||||
// - 1 : We've done the notification. | |||||
// - 2 : Patching / un-patching is on-going. | |||||
extern XRayPatchingStatus __xray_patch(); | |||||
// Reverses the effect of __xray_patch(). This is an asynchronous process, and | |||||
// returns the following status in specific cases. | |||||
// | |||||
// - 0 : XRay is not initialized. | |||||
// - 1 : We've done the notification. | |||||
// - 2 : Patching / un-patching is on-going. | |||||
extern int __xray_unpatch(); | |||||
} | |||||
#endif |
Are you sure you want to use a C++ scoped enum in this interface? The whole thing is extern "C", it might be nicer to make it a C style enum, so you can use it in the handler prototype instead of unsigned short.