Skip to content

Commit 819a743

Browse files
add var fragment handline
1 parent fd99e1c commit 819a743

File tree

1 file changed

+17
-11
lines changed

1 file changed

+17
-11
lines changed

llvm/lib/MCCAS/MCCASObjectV1.cpp

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2154,29 +2154,35 @@ MCCASBuilder::mergeMCFragmentContents(const MCSection *Section,
21542154
return mergedData;
21552155
for (const MCFragment &Fragment : *Section) {
21562156
if (Fragment.getKind() == MCFragment::FT_Dwarf)
2157-
if (IsDebugLineSection)
2157+
if (IsDebugLineSection) {
21582158
llvm::append_range(mergedData, Fragment.getContents());
2159-
else
2159+
llvm::append_range(mergedData, Fragment.getVarContents());
2160+
} else
21602161
return createStringError(
21612162
inconvertibleErrorCode(),
21622163
"Invalid MCFragment::FT_Dwarf type in a non debug line section");
21632164
else if (const auto *CVDefRangeFragment =
2164-
dyn_cast<MCCVDefRangeFragment>(&Fragment))
2165+
dyn_cast<MCCVDefRangeFragment>(&Fragment)) {
21652166
llvm::append_range(mergedData, CVDefRangeFragment->getContents());
2167+
llvm::append_range(mergedData, CVDefRangeFragment->getVarContents());
2168+
}
2169+
21662170
else if (const auto *CVInlineLineTableFragment =
2167-
dyn_cast<MCCVInlineLineTableFragment>(&Fragment))
2171+
dyn_cast<MCCVInlineLineTableFragment>(&Fragment)) {
21682172
llvm::append_range(mergedData, CVInlineLineTableFragment->getContents());
2169-
else if (Fragment.getKind() == MCFragment::FT_Align) {
2173+
llvm::append_range(mergedData,
2174+
CVInlineLineTableFragment->getVarContents());
2175+
} else if (Fragment.getKind() == MCFragment::FT_Align) {
21702176
auto FragmentSize = Asm.computeFragmentSize(Fragment);
21712177
raw_svector_ostream OS(mergedData);
21722178
if (auto E = writeAlignFragment(*this, Fragment, OS, FragmentSize))
21732179
return std::move(E);
2174-
} else if (Fragment.getFixedSize() != 0)
2175-
llvm::append_range(mergedData, Fragment.getContents());
2176-
else
2177-
// All other fragment types can be considered empty, see
2178-
// getFragmentContents() for all fragments that have contents.
2179-
continue;
2180+
} else {
2181+
if (Fragment.getFixedSize() != 0)
2182+
llvm::append_range(mergedData, Fragment.getContents());
2183+
if (Fragment.getVarSize() != 0)
2184+
llvm::append_range(mergedData, Fragment.getVarContents());
2185+
}
21802186
}
21812187
return mergedData;
21822188
}

0 commit comments

Comments
 (0)