@@ -1809,6 +1809,12 @@ Expected<SmallVector<char, 0>> MCCASBuilder::mergeMCFragmentContents(
1809
1809
for (const MCFragment &Fragment : FragmentList) {
1810
1810
if (const auto *DataFragment = dyn_cast<MCDataFragment>(&Fragment))
1811
1811
llvm::append_range (mergedData, DataFragment->getContents ());
1812
+ else if (const auto *CompactEncodedInstFragment =
1813
+ dyn_cast<MCCompactEncodedInstFragment>(&Fragment))
1814
+ llvm::append_range (mergedData, CompactEncodedInstFragment->getContents ());
1815
+ else if (const auto *RelaxableFragment =
1816
+ dyn_cast<MCRelaxableFragment>(&Fragment))
1817
+ llvm::append_range (mergedData, RelaxableFragment->getContents ());
1812
1818
else if (const auto *DwarfLineAddrFrag =
1813
1819
dyn_cast<MCDwarfLineAddrFragment>(&Fragment))
1814
1820
if (IsDebugLineSection)
@@ -1817,9 +1823,29 @@ Expected<SmallVector<char, 0>> MCCASBuilder::mergeMCFragmentContents(
1817
1823
return createStringError (
1818
1824
inconvertibleErrorCode (),
1819
1825
" Invalid MCDwarfLineAddrFragment in a non debug line section" );
1820
- else
1821
- return createStringError (inconvertibleErrorCode (),
1822
- " Invalid fragment type" );
1826
+ else if (const auto *DwarfCallFrameFragment =
1827
+ dyn_cast<MCDwarfCallFrameFragment>(&Fragment))
1828
+ llvm::append_range (mergedData, DwarfCallFrameFragment->getContents ());
1829
+ else if (const auto *CVDefRangeFragment =
1830
+ dyn_cast<MCCVDefRangeFragment>(&Fragment))
1831
+ llvm::append_range (mergedData, CVDefRangeFragment->getContents ());
1832
+ else if (const auto *PseudoProbeAddrFragment =
1833
+ dyn_cast<MCPseudoProbeAddrFragment>(&Fragment))
1834
+ llvm::append_range (mergedData, PseudoProbeAddrFragment->getContents ());
1835
+ else if (const auto *LEBFragment = dyn_cast<MCLEBFragment>(&Fragment))
1836
+ llvm::append_range (mergedData, LEBFragment->getContents ());
1837
+ else if (const auto *CVInlineLineTableFragment =
1838
+ dyn_cast<MCCVInlineLineTableFragment>(&Fragment))
1839
+ llvm::append_range (mergedData, CVInlineLineTableFragment->getContents ());
1840
+ else if (const auto *AlignFragment = dyn_cast<MCAlignFragment>(&Fragment)) {
1841
+ auto FragmentSize = Asm.computeFragmentSize (Layout, Fragment);
1842
+ raw_svector_ostream OS (mergedData);
1843
+ if (auto E = writeAlignFragment (*this , *AlignFragment, OS, FragmentSize))
1844
+ return std::move (E);
1845
+ } else
1846
+ // All other fragment types can be considered empty, see
1847
+ // getFragmentContents() for all fragments that have contents.
1848
+ continue ;
1823
1849
}
1824
1850
return mergedData;
1825
1851
}
0 commit comments