mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-11-25 06:40:18 +00:00
Reland "[CMake] Support installation of InstrProfData.inc"
This header fragment is useful on its own for any consumer that wants to use custom instruction profile runtime with the LLVM instrumentation. The concrete use case is in Fuchsia's kernel where we want to use instruction profile instrumentation, but we cannot use the compiler-rt runtime because it's not designed for use in the kernel environment. This change allows installing this header as part of compiler-rt. Differential Revision: https://reviews.llvm.org/D64532
This commit is contained in:
parent
90f641f2f1
commit
f35032e03d
@ -28,10 +28,17 @@ if (COMPILER_RT_BUILD_XRAY)
|
||||
)
|
||||
endif(COMPILER_RT_BUILD_XRAY)
|
||||
|
||||
if (COMPILER_RT_BUILD_PROFILE)
|
||||
set(PROFILE_HEADERS
|
||||
profile/InstrProfData.inc
|
||||
)
|
||||
endif(COMPILER_RT_BUILD_PROFILE)
|
||||
|
||||
set(COMPILER_RT_HEADERS
|
||||
${SANITIZER_HEADERS}
|
||||
${FUZZER_HEADERS}
|
||||
${XRAY_HEADERS})
|
||||
${XRAY_HEADERS}
|
||||
${PROFILE_HEADERS})
|
||||
|
||||
set(output_dir ${COMPILER_RT_OUTPUT_DIR}/include)
|
||||
|
||||
@ -66,6 +73,11 @@ install(FILES ${XRAY_HEADERS}
|
||||
COMPONENT compiler-rt-headers
|
||||
PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ
|
||||
DESTINATION ${COMPILER_RT_INSTALL_PATH}/include/xray)
|
||||
# Install profile headers.
|
||||
install(FILES ${PROFILE_HEADERS}
|
||||
COMPONENT compiler-rt-headers
|
||||
PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ
|
||||
DESTINATION ${COMPILER_RT_INSTALL_PATH}/include/profile)
|
||||
|
||||
if (NOT CMAKE_CONFIGURATION_TYPES) # don't add this for IDEs.
|
||||
add_custom_target(install-compiler-rt-headers
|
||||
|
@ -68,7 +68,6 @@ set(PROFILE_SOURCES
|
||||
)
|
||||
|
||||
set(PROFILE_HEADERS
|
||||
InstrProfData.inc
|
||||
InstrProfiling.h
|
||||
InstrProfilingInternal.h
|
||||
InstrProfilingPort.h
|
||||
@ -82,6 +81,9 @@ if(WIN32)
|
||||
)
|
||||
endif()
|
||||
|
||||
include_directories(..)
|
||||
include_directories(../../include)
|
||||
|
||||
if(FUCHSIA OR UNIX)
|
||||
set(EXTRA_FLAGS
|
||||
-fPIC
|
||||
|
@ -15,7 +15,7 @@
|
||||
#include "InstrProfilingInternal.h"
|
||||
|
||||
#define INSTR_PROF_VALUE_PROF_DATA
|
||||
#include "InstrProfData.inc"
|
||||
#include "profile/InstrProfData.inc"
|
||||
|
||||
|
||||
COMPILER_RT_WEAK uint64_t INSTR_PROF_RAW_VERSION_VAR = INSTR_PROF_RAW_VERSION;
|
||||
|
@ -13,29 +13,29 @@
|
||||
#include <stdio.h>
|
||||
|
||||
#define INSTR_PROF_VISIBILITY COMPILER_RT_VISIBILITY
|
||||
#include "InstrProfData.inc"
|
||||
#include "profile/InstrProfData.inc"
|
||||
|
||||
enum ValueKind {
|
||||
#define VALUE_PROF_KIND(Enumerator, Value, Descr) Enumerator = Value,
|
||||
#include "InstrProfData.inc"
|
||||
#include "profile/InstrProfData.inc"
|
||||
};
|
||||
|
||||
typedef void *IntPtrT;
|
||||
typedef struct COMPILER_RT_ALIGNAS(INSTR_PROF_DATA_ALIGNMENT)
|
||||
__llvm_profile_data {
|
||||
#define INSTR_PROF_DATA(Type, LLVMType, Name, Initializer) Type Name;
|
||||
#include "InstrProfData.inc"
|
||||
#include "profile/InstrProfData.inc"
|
||||
} __llvm_profile_data;
|
||||
|
||||
typedef struct __llvm_profile_header {
|
||||
#define INSTR_PROF_RAW_HEADER(Type, Name, Initializer) Type Name;
|
||||
#include "InstrProfData.inc"
|
||||
#include "profile/InstrProfData.inc"
|
||||
} __llvm_profile_header;
|
||||
|
||||
typedef struct ValueProfNode * PtrToNodeT;
|
||||
typedef struct ValueProfNode {
|
||||
#define INSTR_PROF_VALUE_NODE(Type, LLVMType, Name, Initializer) Type Name;
|
||||
#include "InstrProfData.inc"
|
||||
#include "profile/InstrProfData.inc"
|
||||
} ValueProfNode;
|
||||
|
||||
/*!
|
||||
@ -120,7 +120,7 @@ int __llvm_profile_check_compatibility(const char *Profile,
|
||||
*/
|
||||
void INSTR_PROF_VALUE_PROF_FUNC(
|
||||
#define VALUE_PROF_FUNC_PARAM(ArgType, ArgName, ArgLLVMType) ArgType ArgName
|
||||
#include "InstrProfData.inc"
|
||||
#include "profile/InstrProfData.inc"
|
||||
);
|
||||
|
||||
void __llvm_profile_instrument_target_value(uint64_t TargetValue, void *Data,
|
||||
|
@ -14,7 +14,7 @@
|
||||
#include "InstrProfilingUtil.h"
|
||||
|
||||
#define INSTR_PROF_VALUE_PROF_DATA
|
||||
#include "InstrProfData.inc"
|
||||
#include "profile/InstrProfData.inc"
|
||||
|
||||
COMPILER_RT_VISIBILITY
|
||||
void (*VPMergeHook)(ValueProfData *, __llvm_profile_data *);
|
||||
|
@ -16,7 +16,7 @@
|
||||
#include "InstrProfilingUtil.h"
|
||||
|
||||
#define INSTR_PROF_VALUE_PROF_DATA
|
||||
#include "InstrProfData.inc"
|
||||
#include "profile/InstrProfData.inc"
|
||||
|
||||
/* Merge value profile data pointed to by SrcValueProfData into
|
||||
* in-memory profile counters pointed by to DstData. */
|
||||
|
@ -17,7 +17,7 @@
|
||||
|
||||
#define INSTR_PROF_VALUE_PROF_DATA
|
||||
#define INSTR_PROF_COMMON_API_IMPL
|
||||
#include "InstrProfData.inc"
|
||||
#include "profile/InstrProfData.inc"
|
||||
|
||||
static int hasStaticCounters = 1;
|
||||
static int OutOfNodesWarnings = 0;
|
||||
|
@ -17,7 +17,7 @@
|
||||
#include "InstrProfilingPort.h"
|
||||
|
||||
#define INSTR_PROF_VALUE_PROF_DATA
|
||||
#include "InstrProfData.inc"
|
||||
#include "profile/InstrProfData.inc"
|
||||
|
||||
COMPILER_RT_VISIBILITY void (*FreeHook)(void *) = NULL;
|
||||
static ProfBufferIO TheBufferIO;
|
||||
@ -280,7 +280,7 @@ lprofWriteDataImpl(ProfDataWriter *Writer, const __llvm_profile_data *DataBegin,
|
||||
|
||||
/* Initialize header structure. */
|
||||
#define INSTR_PROF_RAW_HEADER(Type, Name, Init) Header.Name = Init;
|
||||
#include "InstrProfData.inc"
|
||||
#include "profile/InstrProfData.inc"
|
||||
|
||||
/* Write the data. */
|
||||
ProfDataIOVec IOVec[] = {
|
||||
|
@ -3,6 +3,7 @@ import("//clang/resource_dir.gni")
|
||||
copy("include") {
|
||||
sources = [
|
||||
"fuzzer/FuzzedDataProvider.h",
|
||||
"profile/InstrProfData.inc",
|
||||
"sanitizer/allocator_interface.h",
|
||||
"sanitizer/asan_interface.h",
|
||||
"sanitizer/common_interface_defs.h",
|
||||
|
@ -25,6 +25,11 @@ static_library("profile") {
|
||||
cflags += [ "/wd4221" ]
|
||||
}
|
||||
|
||||
include_dirs = [
|
||||
"..",
|
||||
"../../include",
|
||||
]
|
||||
|
||||
sources = [
|
||||
"GCDAProfiling.c",
|
||||
"InstrProfiling.c",
|
||||
|
Loading…
Reference in New Issue
Block a user