]> git.lizzy.rs Git - rust.git/blob - src/rustllvm/CoverageMappingWrapper.cpp
pin docs: add some forward references
[rust.git] / src / rustllvm / CoverageMappingWrapper.cpp
1 #include "rustllvm.h"
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"
6
7 #include <iostream>
8
9 using namespace llvm;
10
11 extern "C" void LLVMRustCoverageWriteFilenamesSectionToBuffer(
12     const char* const Filenames[],
13     size_t FilenamesLen,
14     RustStringRef BufferOut) {
15   SmallVector<StringRef,32> FilenameRefs;
16   for (size_t i = 0; i < FilenamesLen; i++) {
17     FilenameRefs.push_back(StringRef(Filenames[i]));
18   }
19   auto FilenamesWriter = coverage::CoverageFilenamesSectionWriter(
20     makeArrayRef(FilenameRefs));
21   RawRustStringOstream OS(BufferOut);
22   FilenamesWriter.write(OS);
23 }
24
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);
39 }
40
41 extern "C" uint64_t LLVMRustCoverageComputeHash(const char *Name) {
42   StringRef NameRef(Name);
43   return IndexedInstrProf::ComputeHash(NameRef);
44 }
45
46 extern "C" void LLVMRustCoverageWriteSectionNameToString(LLVMModuleRef M,
47                                                          RustStringRef Str) {
48   Triple TargetTriple(unwrap(M)->getTargetTriple());
49   auto name = getInstrProfSectionName(IPSK_covmap,
50                                       TargetTriple.getObjectFormat());
51   RawRustStringOstream OS(Str);
52   OS << name;
53 }
54
55 extern "C" void LLVMRustCoverageWriteMappingVarNameToString(RustStringRef Str) {
56   auto name = getCoverageMappingVarName();
57   RawRustStringOstream OS(Str);
58   OS << name;
59 }
60
61 extern "C" uint32_t LLVMRustCoverageMappingVersion() {
62   return coverage::CovMapVersion::CurrentVersion;
63 }