2 #include "llvm/ProfileData/Coverage/CoverageMapping.h"
3 #include "llvm/ProfileData/Coverage/CoverageMappingWriter.h"
4 #include "llvm/ProfileData/InstrProf.h"
5 #include "llvm/ADT/ArrayRef.h"
11 extern "C" void LLVMRustCoverageWriteFilenamesSectionToBuffer(
12 const char* const Filenames[],
14 RustStringRef BufferOut) {
15 SmallVector<StringRef,32> FilenameRefs;
16 for (size_t i = 0; i < FilenamesLen; i++) {
17 FilenameRefs.push_back(StringRef(Filenames[i]));
19 auto FilenamesWriter = coverage::CoverageFilenamesSectionWriter(
20 makeArrayRef(FilenameRefs));
21 RawRustStringOstream OS(BufferOut);
22 FilenamesWriter.write(OS);
25 extern "C" void LLVMRustCoverageWriteMappingToBuffer(
26 const unsigned *VirtualFileMappingIDs,
27 unsigned NumVirtualFileMappingIDs,
28 const coverage::CounterExpression *Expressions,
29 unsigned NumExpressions,
30 coverage::CounterMappingRegion *MappingRegions,
31 unsigned NumMappingRegions,
32 RustStringRef BufferOut) {
33 auto CoverageMappingWriter = coverage::CoverageMappingWriter(
34 makeArrayRef(VirtualFileMappingIDs, NumVirtualFileMappingIDs),
35 makeArrayRef(Expressions, NumExpressions),
36 makeMutableArrayRef(MappingRegions, NumMappingRegions));
37 RawRustStringOstream OS(BufferOut);
38 CoverageMappingWriter.write(OS);
41 extern "C" uint64_t LLVMRustCoverageComputeHash(const char *Name) {
42 StringRef NameRef(Name);
43 return IndexedInstrProf::ComputeHash(NameRef);
46 extern "C" void LLVMRustCoverageWriteSectionNameToString(LLVMModuleRef M,
48 Triple TargetTriple(unwrap(M)->getTargetTriple());
49 auto name = getInstrProfSectionName(IPSK_covmap,
50 TargetTriple.getObjectFormat());
51 RawRustStringOstream OS(Str);
55 extern "C" void LLVMRustCoverageWriteMappingVarNameToString(RustStringRef Str) {
56 auto name = getCoverageMappingVarName();
57 RawRustStringOstream OS(Str);
61 extern "C" uint32_t LLVMRustCoverageMappingVersion() {
62 return coverage::CovMapVersion::CurrentVersion;