Skip to content

Commit 5dbf8f3

Browse files
Revert "[llvm-cov][WebAssembly] Read __llvm_prf_names from data segments" (llvm#112520)
This reverts commit efc9dd4 in order to fix Windows test failure: llvm#111332 (comment)
1 parent a1a7a17 commit 5dbf8f3

File tree

4 files changed

+9
-66
lines changed

4 files changed

+9
-66
lines changed

llvm/lib/ProfileData/Coverage/CoverageMappingReader.cpp

Lines changed: 9 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,12 @@
1818
#include "llvm/ADT/SmallVector.h"
1919
#include "llvm/ADT/Statistic.h"
2020
#include "llvm/ADT/StringRef.h"
21-
#include "llvm/BinaryFormat/Wasm.h"
2221
#include "llvm/Object/Archive.h"
2322
#include "llvm/Object/Binary.h"
2423
#include "llvm/Object/COFF.h"
2524
#include "llvm/Object/Error.h"
2625
#include "llvm/Object/MachOUniversal.h"
2726
#include "llvm/Object/ObjectFile.h"
28-
#include "llvm/Object/Wasm.h"
2927
#include "llvm/ProfileData/InstrProf.h"
3028
#include "llvm/Support/Casting.h"
3129
#include "llvm/Support/Compression.h"
@@ -1077,53 +1075,6 @@ lookupSections(ObjectFile &OF, InstrProfSectKind IPSK) {
10771075
return Sections;
10781076
}
10791077

1080-
/// Find a section that matches \p Name and is allocatable at runtime.
1081-
///
1082-
/// Returns the contents of the section and its start offset in the object file.
1083-
static Expected<std::pair<StringRef, uint64_t>>
1084-
lookupAllocatableSection(ObjectFile &OF, InstrProfSectKind IPSK) {
1085-
// On Wasm, allocatable sections can live only in data segments.
1086-
if (auto *WOF = dyn_cast<WasmObjectFile>(&OF)) {
1087-
std::vector<const WasmSegment *> Segments;
1088-
auto ObjFormat = OF.getTripleObjectFormat();
1089-
auto Name =
1090-
getInstrProfSectionName(IPSK, ObjFormat, /*AddSegmentInfo=*/false);
1091-
for (const auto &DebugName : WOF->debugNames()) {
1092-
if (DebugName.Type != wasm::NameType::DATA_SEGMENT ||
1093-
DebugName.Name != Name)
1094-
continue;
1095-
if (DebugName.Index >= WOF->dataSegments().size())
1096-
return make_error<CoverageMapError>(coveragemap_error::malformed);
1097-
auto &Segment = WOF->dataSegments()[DebugName.Index];
1098-
Segments.push_back(&Segment);
1099-
}
1100-
if (Segments.empty())
1101-
return make_error<CoverageMapError>(coveragemap_error::no_data_found);
1102-
if (Segments.size() != 1)
1103-
return make_error<CoverageMapError>(coveragemap_error::malformed);
1104-
1105-
const auto &Segment = *Segments.front();
1106-
auto &Data = Segment.Data;
1107-
StringRef Content(reinterpret_cast<const char *>(Data.Content.data()),
1108-
Data.Content.size());
1109-
return std::make_pair(Content, Segment.SectionOffset);
1110-
}
1111-
1112-
// On other object file types, delegate to lookupSections to find the section.
1113-
auto Sections = lookupSections(OF, IPSK);
1114-
if (!Sections)
1115-
return Sections.takeError();
1116-
if (Sections->size() != 1)
1117-
return make_error<CoverageMapError>(
1118-
coveragemap_error::malformed,
1119-
"the size of coverage mapping section is not one");
1120-
auto &Section = Sections->front();
1121-
auto ContentsOrErr = Section.getContents();
1122-
if (!ContentsOrErr)
1123-
return ContentsOrErr.takeError();
1124-
return std::make_pair(*ContentsOrErr, Section.getAddress());
1125-
}
1126-
11271078
static Expected<std::unique_ptr<BinaryCoverageReader>>
11281079
loadBinaryFormat(std::unique_ptr<Binary> Bin, StringRef Arch,
11291080
StringRef CompilationDir = "",
@@ -1154,20 +1105,23 @@ loadBinaryFormat(std::unique_ptr<Binary> Bin, StringRef Arch,
11541105

11551106
// Look for the sections that we are interested in.
11561107
auto ProfileNames = std::make_unique<InstrProfSymtab>();
1108+
std::vector<SectionRef> NamesSectionRefs;
11571109
// If IPSK_name is not found, fallback to search for IPK_covname, which is
11581110
// used when binary correlation is enabled.
1159-
auto NamesSection = lookupAllocatableSection(*OF, IPSK_name);
1111+
auto NamesSection = lookupSections(*OF, IPSK_name);
11601112
if (auto E = NamesSection.takeError()) {
11611113
consumeError(std::move(E));
1162-
NamesSection = lookupAllocatableSection(*OF, IPSK_covname);
1114+
NamesSection = lookupSections(*OF, IPSK_covname);
11631115
if (auto E = NamesSection.takeError())
11641116
return std::move(E);
11651117
}
1118+
NamesSectionRefs = *NamesSection;
11661119

1167-
uint64_t NamesAddress;
1168-
StringRef NamesContent;
1169-
std::tie(NamesContent, NamesAddress) = *NamesSection;
1170-
if (Error E = ProfileNames->create(NamesContent, NamesAddress))
1120+
if (NamesSectionRefs.size() != 1)
1121+
return make_error<CoverageMapError>(
1122+
coveragemap_error::malformed,
1123+
"the size of coverage mapping section is not one");
1124+
if (Error E = ProfileNames->create(NamesSectionRefs.back()))
11711125
return std::move(E);
11721126

11731127
auto CoverageSection = lookupSections(*OF, IPSK_covmap);
Binary file not shown.

llvm/test/tools/llvm-cov/Inputs/binary-formats.wasm.proftext

Lines changed: 0 additions & 4 deletions
This file was deleted.

llvm/test/tools/llvm-cov/binary-formats.c

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,4 @@ int main(int argc, const char *argv[]) {}
1010
// RUN: llvm-cov show %S/Inputs/binary-formats.v3.macho64l -instr-profile %t.profdata -path-equivalence=/tmp,%S %s | FileCheck %s
1111
// RUN: llvm-cov show %S/Inputs/binary-formats.v6.linux64l -instr-profile %t.profdata -path-equivalence=/tmp,%S %s | FileCheck %s
1212

13-
// RUN: llvm-profdata merge %S/Inputs/binary-formats.wasm.proftext -o %t.wasm.profdata
14-
// NOTE: The wasm binary is built with the following command:
15-
// clang -target wasm32-unknown-wasi %s -o %S/Inputs/binary-formats.v6.wasm32 \
16-
// -mllvm -enable-name-compression=false \
17-
// -fprofile-instr-generate -fcoverage-mapping -lwasi-emulated-getpid -lwasi-emulated-mman
18-
// RUN: llvm-cov show %S/Inputs/binary-formats.v6.wasm32 -instr-profile %t.wasm.profdata -path-equivalence=/tmp,%S %s | FileCheck %s
19-
2013
// RUN: llvm-cov export %S/Inputs/binary-formats.macho64l -instr-profile %t.profdata | FileCheck %S/Inputs/binary-formats.canonical.json

0 commit comments

Comments
 (0)