Skip to content

Commit 7236e20

Browse files
fsfodvgvassilev
authored andcommitted
Add explicit symbol visibility macros to InstrProfData.inc
Annotating these symbols will fix missing symbols for InstrProfTest when using shared library builds on windows with explicit visibility macros enabled. 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. ``` llvm\lld-link : error : undefined symbol: public: void ValueProfData::deserializeTo(InstrProfRecord&, InstrProfSymtab*) >>> referenced by unittests\ProfileData\InstrProfTest.cpp:1372 void ValueProfileReadWriteTest_value_prof_data_read_write_Test::TestBody() ```
1 parent 3dedcab commit 7236e20

File tree

2 files changed

+22
-4
lines changed

2 files changed

+22
-4
lines changed

compiler-rt/include/profile/InstrProfData.inc

+11-2
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

+11-2
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)