Skip to content

Commit

Permalink
Add explicit symbol visibility macros to InstrProfData.inc (llvm#110732)
Browse files Browse the repository at this point in the history
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()
```
  • Loading branch information
fsfod authored Oct 28, 2024
1 parent 86f76c3 commit d7ca703
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 4 deletions.
13 changes: 11 additions & 2 deletions compiler-rt/include/profile/InstrProfData.inc
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,15 @@
#define INSTR_PROF_VISIBILITY
#endif

/* This include is needed for symbol visibility macros used on
* ValueProfRecord\ValueProfData so there functions are exported from the
* LLVM shared library on windows. */
#ifdef __cplusplus
#include "llvm/Support/Compiler.h"
#else
#define LLVM_ABI
#endif

// clang-format off:consider re-enabling clang-format if auto-formatted C macros
// are readable (e.g., after `issue #82426` is fixed)
/* INSTR_PROF_DATA start. */
Expand Down Expand Up @@ -373,7 +382,7 @@ INSTR_PROF_SECT_ENTRY(IPSK_covinit, \
* This is the header of the data structure that defines the on-disk
* layout of the value profile data of a particular kind for one function.
*/
typedef struct ValueProfRecord {
typedef struct LLVM_ABI ValueProfRecord {
/* The kind of the value profile record. */
uint32_t Kind;
/*
Expand Down Expand Up @@ -423,7 +432,7 @@ typedef struct ValueProfRecord {
* Per-function header/control data structure for value profiling
* data in indexed format.
*/
typedef struct ValueProfData {
typedef struct LLVM_ABI ValueProfData {
/*
* Total size in bytes including this field. It must be a multiple
* of sizeof(uint64_t).
Expand Down
13 changes: 11 additions & 2 deletions llvm/include/llvm/ProfileData/InstrProfData.inc
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,15 @@
#define INSTR_PROF_VISIBILITY
#endif

/* This include is needed for symbol visibility macros used on
* ValueProfRecord\ValueProfData so there functions are exported from the
* LLVM shared library on windows. */
#ifdef __cplusplus
#include "llvm/Support/Compiler.h"
#else
#define LLVM_ABI
#endif

// clang-format off:consider re-enabling clang-format if auto-formatted C macros
// are readable (e.g., after `issue #82426` is fixed)
/* INSTR_PROF_DATA start. */
Expand Down Expand Up @@ -373,7 +382,7 @@ INSTR_PROF_SECT_ENTRY(IPSK_covinit, \
* This is the header of the data structure that defines the on-disk
* layout of the value profile data of a particular kind for one function.
*/
typedef struct ValueProfRecord {
typedef struct LLVM_ABI ValueProfRecord {
/* The kind of the value profile record. */
uint32_t Kind;
/*
Expand Down Expand Up @@ -423,7 +432,7 @@ typedef struct ValueProfRecord {
* Per-function header/control data structure for value profiling
* data in indexed format.
*/
typedef struct ValueProfData {
typedef struct LLVM_ABI ValueProfData {
/*
* Total size in bytes including this field. It must be a multiple
* of sizeof(uint64_t).
Expand Down

0 comments on commit d7ca703

Please sign in to comment.