[llvm] [llvm] annotate interfaces in llvm/ProfileData for DLL export (PR #142861)
via llvm-commits
llvm-commits at lists.llvm.org
Mon Jun 9 12:13:41 PDT 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-pgo
Author: Andrew Rogers (andrurogerz)
<details>
<summary>Changes</summary>
## Purpose
This patch is one in a series of code-mods that annotate LLVM’s public interface for export. This patch annotates the `llvm/ProfileData` library. These annotations currently have no meaningful impact on the LLVM build; however, they are a prerequisite to support an LLVM Windows DLL (shared library) build.
## Background
This effort is tracked in #<!-- -->109483. Additional context is provided in [this discourse](https://discourse.llvm.org/t/psa-annotating-llvm-public-interface/85307), and documentation for `LLVM_ABI` and related annotations is found in the LLVM repo [here](https://github.com/llvm/llvm-project/blob/main/llvm/docs/InterfaceExportAnnotations.rst).
The bulk of these changes were generated automatically using the [Interface Definition Scanner (IDS)](https://github.com/compnerd/ids) tool, followed formatting with `git clang-format`.
The following manual adjustments were also applied after running IDS on Linux:
- Manually annotate the file `llvm/include/llvm/ProfileData/InstrProfData.inc` because it is skipped by IDS
- Add `LLVM_TEMPLATE_ABI` and `LLVM_EXPORT_TEMPLATE` to exported instantiated templates.
- Add `LLVM_ABI_FRIEND` to friend member functions declared with `LLVM_ABI`
- Add `LLVM_ABI` to a small number of symbols that require export but are not declared in headers
## Validation
Local builds and tests to validate cross-platform compatibility. This included llvm, clang, and lldb on the following configurations:
- Windows with MSVC
- Windows with Clang
- Linux with GCC
- Linux with Clang
- Darwin with Clang
---
Patch is 102.56 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/142861.diff
28 Files Affected:
- (modified) llvm/include/llvm/ProfileData/Coverage/CoverageMapping.h (+27-23)
- (modified) llvm/include/llvm/ProfileData/Coverage/CoverageMappingReader.h (+10-9)
- (modified) llvm/include/llvm/ProfileData/Coverage/CoverageMappingWriter.h (+5-4)
- (modified) llvm/include/llvm/ProfileData/DataAccessProf.h (+11-8)
- (modified) llvm/include/llvm/ProfileData/GCOV.h (+20-19)
- (modified) llvm/include/llvm/ProfileData/IndexedMemProfData.h (+2-1)
- (modified) llvm/include/llvm/ProfileData/InstrProf.h (+104-93)
- (modified) llvm/include/llvm/ProfileData/InstrProfCorrelator.h (+7-6)
- (modified) llvm/include/llvm/ProfileData/InstrProfData.inc (+10-10)
- (modified) llvm/include/llvm/ProfileData/InstrProfReader.h (+16-13)
- (modified) llvm/include/llvm/ProfileData/InstrProfWriter.h (+40-36)
- (modified) llvm/include/llvm/ProfileData/ItaniumManglingCanonicalizer.h (+7-6)
- (modified) llvm/include/llvm/ProfileData/MemProf.h (+18-16)
- (modified) llvm/include/llvm/ProfileData/MemProfCommon.h (+5-3)
- (modified) llvm/include/llvm/ProfileData/MemProfRadixTree.h (+7)
- (modified) llvm/include/llvm/ProfileData/MemProfReader.h (+8-6)
- (modified) llvm/include/llvm/ProfileData/MemProfSummary.h (+5-3)
- (modified) llvm/include/llvm/ProfileData/MemProfSummaryBuilder.h (+4-3)
- (modified) llvm/include/llvm/ProfileData/PGOCtxProfReader.h (+4-2)
- (modified) llvm/include/llvm/ProfileData/PGOCtxProfWriter.h (+3-2)
- (modified) llvm/include/llvm/ProfileData/ProfileCommon.h (+21-20)
- (modified) llvm/include/llvm/ProfileData/SampleProf.h (+42-39)
- (modified) llvm/include/llvm/ProfileData/SampleProfReader.h (+20-16)
- (modified) llvm/include/llvm/ProfileData/SampleProfWriter.h (+11-8)
- (modified) llvm/include/llvm/ProfileData/SymbolRemappingReader.h (+3-2)
- (modified) llvm/lib/ProfileData/MemProfCommon.cpp (+5-4)
- (modified) llvm/lib/ProfileData/MemProfRadixTree.cpp (+9-8)
- (modified) llvm/unittests/ProfileData/MemProfTest.cpp (+6-4)
``````````diff
diff --git a/llvm/include/llvm/ProfileData/Coverage/CoverageMapping.h b/llvm/include/llvm/ProfileData/Coverage/CoverageMapping.h
index 4fc0133443192..e62ce5e3d8fa6 100644
--- a/llvm/include/llvm/ProfileData/Coverage/CoverageMapping.h
+++ b/llvm/include/llvm/ProfileData/Coverage/CoverageMapping.h
@@ -71,13 +71,13 @@ enum class coveragemap_error {
invalid_or_missing_arch_specifier
};
-const std::error_category &coveragemap_category();
+LLVM_ABI const std::error_category &coveragemap_category();
inline std::error_code make_error_code(coveragemap_error E) {
return std::error_code(static_cast<int>(E), coveragemap_category());
}
-class CoverageMapError : public ErrorInfo<CoverageMapError> {
+class LLVM_ABI CoverageMapError : public ErrorInfo<CoverageMapError> {
public:
CoverageMapError(coveragemap_error Err, const Twine &ErrStr = Twine())
: Err(Err), Msg(ErrStr.str()) {
@@ -210,11 +210,11 @@ class CounterExpressionBuilder {
ArrayRef<CounterExpression> getExpressions() const { return Expressions; }
/// Return a counter that represents the expression that adds LHS and RHS.
- Counter add(Counter LHS, Counter RHS, bool Simplify = true);
+ LLVM_ABI Counter add(Counter LHS, Counter RHS, bool Simplify = true);
/// Return a counter that represents the expression that subtracts RHS from
/// LHS.
- Counter subtract(Counter LHS, Counter RHS, bool Simplify = true);
+ LLVM_ABI Counter subtract(Counter LHS, Counter RHS, bool Simplify = true);
/// K to V map. K will be Counter in most cases. V may be Counter or
/// Expression.
@@ -222,7 +222,7 @@ class CounterExpressionBuilder {
/// \return A counter equivalent to \C, with each term in its
/// expression replaced with term from \p Map.
- Counter subst(Counter C, const SubstMap &Map);
+ LLVM_ABI Counter subst(Counter C, const SubstMap &Map);
};
using LineColPair = std::pair<unsigned, unsigned>;
@@ -473,7 +473,7 @@ struct MCDCRecord {
// Compare executed test vectors against each other to find an independence
// pairs for each condition. This processing takes the most time.
- void findIndependencePairs();
+ LLVM_ABI void findIndependencePairs();
const CounterMappingRegion &getDecisionRegion() const { return Region; }
unsigned getNumConditions() const {
@@ -665,7 +665,8 @@ class TVIdxBuilder {
/// \param NextIDs The list of {FalseID, TrueID} indexed by ID
/// The first element [0] should be the root node.
/// \param Offset Offset of index to final decisions.
- TVIdxBuilder(const SmallVectorImpl<ConditionIDs> &NextIDs, int Offset = 0);
+ LLVM_ABI TVIdxBuilder(const SmallVectorImpl<ConditionIDs> &NextIDs,
+ int Offset = 0);
};
} // namespace mcdc
@@ -684,21 +685,21 @@ class CounterMappingContext {
void setCounts(ArrayRef<uint64_t> Counts) { CounterValues = Counts; }
void setBitmap(BitVector &&Bitmap_) { Bitmap = std::move(Bitmap_); }
- void dump(const Counter &C, raw_ostream &OS) const;
+ LLVM_ABI void dump(const Counter &C, raw_ostream &OS) const;
void dump(const Counter &C) const { dump(C, dbgs()); }
/// Return the number of times that a region of code associated with this
/// counter was executed.
- Expected<int64_t> evaluate(const Counter &C) const;
+ LLVM_ABI Expected<int64_t> evaluate(const Counter &C) const;
/// Return an MCDC record that indicates executed test vectors and condition
/// pairs.
- Expected<MCDCRecord>
+ LLVM_ABI Expected<MCDCRecord>
evaluateMCDCRegion(const CounterMappingRegion &Region,
ArrayRef<const CounterMappingRegion *> Branches,
bool IsVersion11);
- unsigned getMaxCounterID(const Counter &C) const;
+ LLVM_ABI unsigned getMaxCounterID(const Counter &C) const;
};
/// Code coverage information for a single function.
@@ -761,7 +762,7 @@ class FunctionRecordIterator
StringRef Filename;
/// Skip records whose primary file is not \c Filename.
- void skipOtherFiles();
+ LLVM_ABI void skipOtherFiles();
public:
FunctionRecordIterator(ArrayRef<FunctionRecord> Records_,
@@ -1007,7 +1008,7 @@ class CoverageMapping {
/// defined in the specified file. This is guaranteed to return a superset of
/// such records: extra records not in the file may be included if there is
/// a hash collision on the filename. Clients must be robust to collisions.
- ArrayRef<unsigned>
+ LLVM_ABI ArrayRef<unsigned>
getImpreciseRecordIndicesForFilename(StringRef Filename) const;
public:
@@ -1015,14 +1016,14 @@ class CoverageMapping {
CoverageMapping &operator=(const CoverageMapping &) = delete;
/// Load the coverage mapping using the given readers.
- static Expected<std::unique_ptr<CoverageMapping>>
+ LLVM_ABI static Expected<std::unique_ptr<CoverageMapping>>
load(ArrayRef<std::unique_ptr<CoverageMappingReader>> CoverageReaders,
IndexedInstrProfReader &ProfileReader);
/// Load the coverage mapping from the given object files and profile. If
/// \p Arches is non-empty, it must specify an architecture for each object.
/// Ignores non-instrumented object files unless all are not instrumented.
- static Expected<std::unique_ptr<CoverageMapping>>
+ LLVM_ABI static Expected<std::unique_ptr<CoverageMapping>>
load(ArrayRef<StringRef> ObjectFilenames, StringRef ProfileFilename,
vfs::FileSystem &FS, ArrayRef<StringRef> Arches = {},
StringRef CompilationDir = "",
@@ -1045,20 +1046,22 @@ class CoverageMapping {
/// Returns a lexicographically sorted, unique list of files that are
/// covered.
- std::vector<StringRef> getUniqueSourceFiles() const;
+ LLVM_ABI std::vector<StringRef> getUniqueSourceFiles() const;
/// Get the coverage for a particular file.
///
/// The given filename must be the name as recorded in the coverage
/// information. That is, only names returned from getUniqueSourceFiles will
/// yield a result.
- CoverageData getCoverageForFile(StringRef Filename) const;
+ LLVM_ABI CoverageData getCoverageForFile(StringRef Filename) const;
/// Get the coverage for a particular function.
- CoverageData getCoverageForFunction(const FunctionRecord &Function) const;
+ LLVM_ABI CoverageData
+ getCoverageForFunction(const FunctionRecord &Function) const;
/// Get the coverage for an expansion within a coverage set.
- CoverageData getCoverageForExpansion(const ExpansionRecord &Expansion) const;
+ LLVM_ABI CoverageData
+ getCoverageForExpansion(const ExpansionRecord &Expansion) const;
/// Gets all of the functions covered by this profile.
iterator_range<FunctionRecordIterator> getCoveredFunctions() const {
@@ -1079,7 +1082,7 @@ class CoverageMapping {
///
/// Every instantiation group in a program is attributed to exactly one file:
/// the file in which the definition for the common function begins.
- std::vector<InstantiationGroup>
+ LLVM_ABI std::vector<InstantiationGroup>
getInstantiationGroups(StringRef Filename) const;
};
@@ -1096,8 +1099,9 @@ class LineCoverageStats {
LineCoverageStats() = default;
public:
- LineCoverageStats(ArrayRef<const CoverageSegment *> LineSegments,
- const CoverageSegment *WrappedSegment, unsigned Line);
+ LLVM_ABI LineCoverageStats(ArrayRef<const CoverageSegment *> LineSegments,
+ const CoverageSegment *WrappedSegment,
+ unsigned Line);
uint64_t getExecutionCount() const { return ExecutionCount; }
@@ -1136,7 +1140,7 @@ class LineCoverageIterator
const LineCoverageStats &operator*() const { return Stats; }
- LineCoverageIterator &operator++();
+ LLVM_ABI LineCoverageIterator &operator++();
LineCoverageIterator getEnd() const {
auto EndIt = *this;
diff --git a/llvm/include/llvm/ProfileData/Coverage/CoverageMappingReader.h b/llvm/include/llvm/ProfileData/Coverage/CoverageMappingReader.h
index 886b4d3d6894d..e91ba9147a745 100644
--- a/llvm/include/llvm/ProfileData/Coverage/CoverageMappingReader.h
+++ b/llvm/include/llvm/ProfileData/Coverage/CoverageMappingReader.h
@@ -18,6 +18,7 @@
#include "llvm/ADT/StringRef.h"
#include "llvm/ProfileData/Coverage/CoverageMapping.h"
#include "llvm/ProfileData/InstrProf.h"
+#include "llvm/Support/Compiler.h"
#include "llvm/Support/Error.h"
#include "llvm/Support/MemoryBuffer.h"
#include <cstddef>
@@ -46,7 +47,7 @@ class CoverageMappingIterator {
CoverageMappingRecord Record;
coveragemap_error ReadErr;
- void increment();
+ LLVM_ABI void increment();
public:
using iterator_category = std::input_iterator_tag;
@@ -112,10 +113,10 @@ class RawCoverageReader {
RawCoverageReader(StringRef Data) : Data(Data) {}
- Error readULEB128(uint64_t &Result);
- Error readIntMax(uint64_t &Result, uint64_t MaxPlus1);
- Error readSize(uint64_t &Result);
- Error readString(StringRef &Result);
+ LLVM_ABI Error readULEB128(uint64_t &Result);
+ LLVM_ABI Error readIntMax(uint64_t &Result, uint64_t MaxPlus1);
+ LLVM_ABI Error readSize(uint64_t &Result);
+ LLVM_ABI Error readString(StringRef &Result);
};
/// Checks if the given coverage mapping data is exported for
@@ -125,7 +126,7 @@ class RawCoverageMappingDummyChecker : public RawCoverageReader {
RawCoverageMappingDummyChecker(StringRef MappingData)
: RawCoverageReader(MappingData) {}
- Expected<bool> isDummy();
+ LLVM_ABI Expected<bool> isDummy();
};
/// Reader for the raw coverage mapping data.
@@ -149,7 +150,7 @@ class RawCoverageMappingReader : public RawCoverageReader {
RawCoverageMappingReader &
operator=(const RawCoverageMappingReader &) = delete;
- Error read();
+ LLVM_ABI Error read();
private:
Error decodeCounter(unsigned Value, Counter &C);
@@ -161,7 +162,7 @@ class RawCoverageMappingReader : public RawCoverageReader {
/// Reader for the coverage mapping data that is emitted by the
/// frontend and stored in an object file.
-class BinaryCoverageReader : public CoverageMappingReader {
+class LLVM_ABI BinaryCoverageReader : public CoverageMappingReader {
public:
struct ProfileMappingRecord {
CovMapVersion Version;
@@ -245,7 +246,7 @@ class RawCoverageFilenamesReader : public RawCoverageReader {
RawCoverageFilenamesReader &
operator=(const RawCoverageFilenamesReader &) = delete;
- Error read(CovMapVersion Version);
+ LLVM_ABI Error read(CovMapVersion Version);
};
} // end namespace coverage
diff --git a/llvm/include/llvm/ProfileData/Coverage/CoverageMappingWriter.h b/llvm/include/llvm/ProfileData/Coverage/CoverageMappingWriter.h
index 02848deaba9db..5341b9879a9fe 100644
--- a/llvm/include/llvm/ProfileData/Coverage/CoverageMappingWriter.h
+++ b/llvm/include/llvm/ProfileData/Coverage/CoverageMappingWriter.h
@@ -17,6 +17,7 @@
#include "llvm/ADT/ArrayRef.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/ProfileData/Coverage/CoverageMapping.h"
+#include "llvm/Support/Compiler.h"
namespace llvm {
@@ -30,11 +31,11 @@ class CoverageFilenamesSectionWriter {
ArrayRef<std::string> Filenames;
public:
- CoverageFilenamesSectionWriter(ArrayRef<std::string> Filenames);
+ LLVM_ABI CoverageFilenamesSectionWriter(ArrayRef<std::string> Filenames);
/// Write encoded filenames to the given output stream. If \p Compress is
/// true, attempt to compress the filenames.
- void write(raw_ostream &OS, bool Compress = true);
+ LLVM_ABI void write(raw_ostream &OS, bool Compress = true);
};
/// Writer for instrumentation based coverage mapping data.
@@ -51,7 +52,7 @@ class CoverageMappingWriter {
MappingRegions(MappingRegions) {}
/// Write encoded coverage mapping data to the given output stream.
- void write(raw_ostream &OS);
+ LLVM_ABI void write(raw_ostream &OS);
};
/// Writer for the coverage mapping testing format.
@@ -70,7 +71,7 @@ class TestingFormatWriter {
CoverageRecordsData(CoverageRecordsData) {}
/// Encode to the given output stream.
- void
+ LLVM_ABI void
write(raw_ostream &OS,
TestingFormatVersion Version = TestingFormatVersion::CurrentVersion);
};
diff --git a/llvm/include/llvm/ProfileData/DataAccessProf.h b/llvm/include/llvm/ProfileData/DataAccessProf.h
index c0f0c6d9c9fc1..f410096d83f5e 100644
--- a/llvm/include/llvm/ProfileData/DataAccessProf.h
+++ b/llvm/include/llvm/ProfileData/DataAccessProf.h
@@ -24,6 +24,7 @@
#include "llvm/ADT/StringRef.h"
#include "llvm/ProfileData/InstrProf.h"
#include "llvm/Support/Allocator.h"
+#include "llvm/Support/Compiler.h"
#include "llvm/Support/Error.h"
#include "llvm/Support/StringSaver.h"
@@ -138,33 +139,35 @@ class DataAccessProfData {
/// - Serialized strings.
/// - The encoded hashes.
/// - Records.
- Error serialize(ProfOStream &OS) const;
+ LLVM_ABI Error serialize(ProfOStream &OS) const;
/// Deserialize this class from the given buffer.
- Error deserialize(const unsigned char *&Ptr);
+ LLVM_ABI Error deserialize(const unsigned char *&Ptr);
/// Returns a profile record for \p SymbolID, or std::nullopt if there
/// isn't a record. Internally, this function will canonicalize the symbol
/// name before the lookup.
- std::optional<DataAccessProfRecord>
+ LLVM_ABI std::optional<DataAccessProfRecord>
getProfileRecord(const SymbolHandleRef SymID) const;
/// Returns true if \p SymID is seen in profiled binaries and cold.
- bool isKnownColdSymbol(const SymbolHandleRef SymID) const;
+ LLVM_ABI bool isKnownColdSymbol(const SymbolHandleRef SymID) const;
/// Methods to set symbolized data access profile. Returns error if
/// duplicated symbol names or content hashes are seen. The user of this
/// class should aggregate counters that correspond to the same symbol name
/// or with the same string literal hash before calling 'set*' methods.
- Error setDataAccessProfile(SymbolHandleRef SymbolID, uint64_t AccessCount);
+ LLVM_ABI Error setDataAccessProfile(SymbolHandleRef SymbolID,
+ uint64_t AccessCount);
/// Similar to the method above, for records with \p Locations representing
/// the `filename:line` where this symbol shows up. Note because of linker's
/// merge of identical symbols (e.g., unnamed_addr string literals), one
/// symbol is likely to have multiple locations.
- Error setDataAccessProfile(SymbolHandleRef SymbolID, uint64_t AccessCount,
- ArrayRef<SourceLocation> Locations);
+ LLVM_ABI Error setDataAccessProfile(SymbolHandleRef SymbolID,
+ uint64_t AccessCount,
+ ArrayRef<SourceLocation> Locations);
/// Add a symbol that's seen in the profiled binary without samples.
- Error addKnownSymbolWithoutSamples(SymbolHandleRef SymbolID);
+ LLVM_ABI Error addKnownSymbolWithoutSamples(SymbolHandleRef SymbolID);
/// The following methods return array reference for various internal data
/// structures.
diff --git a/llvm/include/llvm/ProfileData/GCOV.h b/llvm/include/llvm/ProfileData/GCOV.h
index c8af71dbf61ef..0dc33d062e4f8 100644
--- a/llvm/include/llvm/ProfileData/GCOV.h
+++ b/llvm/include/llvm/ProfileData/GCOV.h
@@ -21,6 +21,7 @@
#include "llvm/ADT/StringRef.h"
#include "llvm/ADT/iterator.h"
#include "llvm/ADT/iterator_range.h"
+#include "llvm/Support/Compiler.h"
#include "llvm/Support/DataExtractor.h"
#include "llvm/Support/MemoryBuffer.h"
#include "llvm/Support/raw_ostream.h"
@@ -192,11 +193,11 @@ class GCOVFile {
public:
GCOVFile() = default;
- bool readGCNO(GCOVBuffer &Buffer);
- bool readGCDA(GCOVBuffer &Buffer);
+ LLVM_ABI bool readGCNO(GCOVBuffer &Buffer);
+ LLVM_ABI bool readGCDA(GCOVBuffer &Buffer);
GCOV::GCOVVersion getVersion() const { return version; }
- void print(raw_ostream &OS) const;
- void dump() const;
+ LLVM_ABI void print(raw_ostream &OS) const;
+ LLVM_ABI void dump() const;
std::vector<std::string> filenames;
StringMap<unsigned> filenameToIdx;
@@ -223,7 +224,7 @@ class GCOVFile {
struct GCOVArc {
GCOVArc(GCOVBlock &src, GCOVBlock &dst, uint32_t flags)
: src(src), dst(dst), flags(flags) {}
- bool onTree() const;
+ LLVM_ABI bool onTree() const;
GCOVBlock &src;
GCOVBlock &dst;
@@ -240,18 +241,18 @@ class GCOVFunction {
GCOVFunction(GCOVFile &file) : file(file) {}
- StringRef getName(bool demangle) const;
- StringRef getFilename() const;
- uint64_t getEntryCount() const;
- GCOVBlock &getExitBlock() const;
+ LLVM_ABI StringRef getName(bool demangle) const;
+ LLVM_ABI StringRef getFilename() const;
+ LLVM_ABI uint64_t getEntryCount() const;
+ LLVM_ABI GCOVBlock &getExitBlock() const;
iterator_range<BlockIterator> blocksRange() const {
return make_range(blocks.begin(), blocks.end());
}
- void propagateCounts(const GCOVBlock &v, GCOVArc *pred);
- void print(raw_ostream &OS) const;
- void dump() const;
+ LLVM_ABI void propagateCounts(const GCOVBlock &v, GCOVArc *pred);
+ LLVM_ABI void print(raw_ostream &OS) const;
+ LLVM_ABI void dump() const;
GCOVFile &file;
uint32_t ident = 0;
@@ -296,14 +297,14 @@ class GCOVBlock {
return make_range(succ.begin(), succ.end());
}
- void print(raw_ostream &OS) const;
- void dump() const;
+ LLVM_ABI void print(raw_ostream &OS) const;
+ LLVM_ABI void dump() const;
- static uint64_t
+ LLVM_ABI static uint64_t
augmentOneCycle(GCOVBlock *src,
std::vector<std::pair<GCOVBlock *, size_t>> &stack);
- static uint64_t getCyclesCount(const BlockVector &blocks);
- static uint64_t getLineCount(const BlockVector &Blocks);
+ LLVM_ABI static uint64_t getCyclesCount(const BlockVector &blocks);
+ LLVM_ABI static uint64_t getLineCount(const BlockVector &Blocks);
public:
uint32_t number;
@@ -315,8 +316,8 @@ class GCOVBlock {
GCOVArc *incoming = nullptr;
};
-void gcovOneInput(const GCOV::Options &options, StringRef filename,
- StringRef gcno, StringRef gcda, GCOVFile &file);
+LLVM_ABI void gcovOneInput(const GCOV::Options &options, StringRef filename,
+ StringRef gcno, StringRef gcda, GCOVFile &file);
} // end namespace llvm
diff --git a/llvm/include/llvm/ProfileData/IndexedMemProfData.h b/llvm/include/llvm/ProfileData/IndexedMemProfData.h
index 9af8755281be4..dae0928d50ca7 100644
--- a/llvm/include/llvm/ProfileData/IndexedMemProfData.h
+++ b/llvm/include/llvm/ProfileData/IndexedMemProfData.h
@@ -18,6 +18,7 @@
#include "llvm/ProfileData/DataAccessProf.h"
#include "llvm/ProfileData/InstrProf.h"
#include "llvm/ProfileData/MemProf.h"
+#include "llvm/Support/Compiler.h"
#include <functional>
#include <optional>
@@ -87,7 +88,7 @@ struct IndexedMemProfData {
} // namespace memprof
// Write the MemProf data to OS.
-Error writeMemProf(
+LLVM_ABI Error writeMemProf(
ProfOStream &OS, memprof::IndexedMemProfData &MemProfData,
memprof::IndexedVersion MemProfVersionRequested, bool MemProfFullSchema,
std::unique_ptr<memprof::DataAccessProfData> DataAccessProfileData,
diff --git a/llvm/include/llvm/ProfileData/InstrProf.h b/llvm/include/llvm/ProfileData/InstrProf.h
index 544a59df43ed3..f53602424b583 100644
--- a/llvm/include/llvm/ProfileData/InstrProf.h
+++ b/llvm/include/llvm/ProfileData/InstrProf.h
@@ -69,18 +69,18 @@ struct PatchItem {
// back patching.
class ProfOStream {
public:
- ProfOStream(raw_fd_ostream &FD);
- ProfOStream(raw_string_ostream &STR);
+ LLVM_ABI ProfOStream(raw_fd_ostream &FD);
+ LLVM_ABI ProfOStream(raw_string_ostream &STR);
- [[nodiscard]] uint64_t tell() const;
- void write(uint64_t V);
- void write32(uint32_t V);
- void writeByte(uint8_t V);
+ [[nodiscard]] LLVM_ABI uint64_t tell() const;
+ LLVM_ABI void write(uint64_t V);
+ LLVM_ABI void write32(uint32_t V);
+ LLVM_ABI void writeByte(uint8_t V);
// \c patch can only be called when all data is written and flushed.
// For raw_string_ostream, the patch is done on the target string
// directly and it won't be reflected in the stream's internal buffer.
- void patch(ArrayRef<PatchItem> P);
+ LLVM_ABI void patch(ArrayRef<PatchItem> P);
// If \c OS is an instance of \c raw_fd_ostream, this field will be
// true. Otherwise, \c OS will be an raw_string_ostream.
@@ -104,9 +104,9 @@ inline uint64_t getInstrMaxCountValue() {
/// The name of the section depends on the object format type \p OF. If
/// \p AddSegmentInfo is true, a segment prefix and additional...
[truncated]
``````````
</details>
https://github.com/llvm/llvm-project/pull/142861
More information about the llvm-commits
mailing list