@@ -1539,7 +1539,9 @@ MCAlignFragmentRef::create(MCCASBuilder &MB, const MCFragment &F,
1539
1539
if (!B)
1540
1540
return B.takeError ();
1541
1541
1542
- uint64_t Count = FragmentSize / F.getAlignFillLen ();
1542
+ writeVBR8 (FragmentContents.size (), B->Data );
1543
+ B->Data .append (FragmentContents.begin (), FragmentContents.end ());
1544
+ uint64_t Count = (FragmentSize - F.getFixedSize ()) / F.getAlignFillLen ();
1543
1545
if (F.hasAlignEmitNops ()) {
1544
1546
// Write 0 as size and use backend to emit nop.
1545
1547
writeVBR8 (0 , B->Data );
@@ -1559,9 +1561,16 @@ MCAlignFragmentRef::create(MCCASBuilder &MB, const MCFragment &F,
1559
1561
Expected<uint64_t > MCAlignFragmentRef::materialize (MCCASReader &Reader,
1560
1562
raw_ostream *Stream) const
1561
1563
{
1562
- uint64_t Count;
1564
+ uint64_t Count, FragContentSize ;
1563
1565
auto Remaining = getData ();
1564
1566
auto Endian = Reader.getEndian ();
1567
+ if (auto E = consumeVBR8 (Remaining, FragContentSize))
1568
+ return std::move (E);
1569
+
1570
+ *Stream << Remaining.substr (0 , FragContentSize);
1571
+
1572
+ Remaining = Remaining.drop_front (FragContentSize);
1573
+
1565
1574
if (auto E = consumeVBR8 (Remaining, Count))
1566
1575
return std::move (E);
1567
1576
@@ -2869,6 +2878,9 @@ static ArrayRef<char> getFragmentContents(const MCFragment &Fragment) {
2869
2878
case MCFragment::FT_LEB: {
2870
2879
return Fragment.getContents ();
2871
2880
}
2881
+ case MCFragment::FT_Align: {
2882
+ return Fragment.getContents ();
2883
+ }
2872
2884
default :
2873
2885
return ArrayRef<char >();
2874
2886
}
0 commit comments