Skip to content

Commit a0d48fd

Browse files
committed
Add explicit visibility macros to InstrProfData.inc
Annotating these symbols will fix missing symbols for InstrProfTest when using shared library builds on windows. Also duplicate changes to the second copy of InstrProfData.inc in compiler-rt . Add a empty fallback definition for LLVM_ABI macro so the code works in compiler-rt. This is part of the work to enable LLVM_BUILD_LLVM_DYLIB and plugins on window.
1 parent 74cfd20 commit a0d48fd

File tree

2 files changed

+22
-4
lines changed

2 files changed

+22
-4
lines changed

compiler-rt/include/profile/InstrProfData.inc

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,15 @@
6262
#define INSTR_PROF_VISIBILITY
6363
#endif
6464

65+
/* This is include is needed for symbol visibility macros used on
66+
* ValueProfRecord\ValueProfData so there functions are exported from the
67+
* LLVM shared library on windows. */
68+
#ifdef __cplusplus
69+
#include "llvm/Support/Compiler.h"
70+
#else
71+
#define LLVM_ABI
72+
#endif
73+
6574
// clang-format off:consider re-enabling clang-format if auto-formatted C macros
6675
// are readable (e.g., after `issue #82426` is fixed)
6776
/* INSTR_PROF_DATA start. */
@@ -358,7 +367,7 @@ INSTR_PROF_SECT_ENTRY(IPSK_covname, \
358367
* This is the header of the data structure that defines the on-disk
359368
* layout of the value profile data of a particular kind for one function.
360369
*/
361-
typedef struct ValueProfRecord {
370+
typedef struct LLVM_ABI ValueProfRecord {
362371
/* The kind of the value profile record. */
363372
uint32_t Kind;
364373
/*
@@ -408,7 +417,7 @@ typedef struct ValueProfRecord {
408417
* Per-function header/control data structure for value profiling
409418
* data in indexed format.
410419
*/
411-
typedef struct ValueProfData {
420+
typedef struct LLVM_ABI ValueProfData {
412421
/*
413422
* Total size in bytes including this field. It must be a multiple
414423
* of sizeof(uint64_t).

llvm/include/llvm/ProfileData/InstrProfData.inc

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,15 @@
6262
#define INSTR_PROF_VISIBILITY
6363
#endif
6464

65+
/* This is include is needed for symbol visibility macros used on
66+
* ValueProfRecord\ValueProfData so there functions are exported from the
67+
* LLVM shared library on windows. */
68+
#ifdef __cplusplus
69+
#include "llvm/Support/Compiler.h"
70+
#else
71+
#define LLVM_ABI
72+
#endif
73+
6574
// clang-format off:consider re-enabling clang-format if auto-formatted C macros
6675
// are readable (e.g., after `issue #82426` is fixed)
6776
/* INSTR_PROF_DATA start. */
@@ -358,7 +367,7 @@ INSTR_PROF_SECT_ENTRY(IPSK_covname, \
358367
* This is the header of the data structure that defines the on-disk
359368
* layout of the value profile data of a particular kind for one function.
360369
*/
361-
typedef struct ValueProfRecord {
370+
typedef struct LLVM_ABI ValueProfRecord {
362371
/* The kind of the value profile record. */
363372
uint32_t Kind;
364373
/*
@@ -408,7 +417,7 @@ typedef struct ValueProfRecord {
408417
* Per-function header/control data structure for value profiling
409418
* data in indexed format.
410419
*/
411-
typedef struct ValueProfData {
420+
typedef struct LLVM_ABI ValueProfData {
412421
/*
413422
* Total size in bytes including this field. It must be a multiple
414423
* of sizeof(uint64_t).

0 commit comments

Comments
 (0)