@@ -1543,15 +1543,17 @@ MCAlignFragmentRef::create(MCCASBuilder &MB, const MCFragment &F,
1543
1543
B->Data .append (FragmentContents.begin (), FragmentContents.end ());
1544
1544
uint64_t Count = (FragmentSize - F.getFixedSize ()) / F.getAlignFillLen ();
1545
1545
if (F.hasAlignEmitNops ()) {
1546
- // Write 0 as size and use backend to emit nop .
1547
- writeVBR8 (0 , B->Data );
1546
+ // Write 1 to signify that it has nops .
1547
+ writeVBR8 (1 , B->Data );
1548
1548
if (!MB.Asm .getBackend ().writeNopData (MB.FragmentOS , Count,
1549
1549
F.getSubtargetInfo ()))
1550
1550
report_fatal_error (" unable to write nop sequence of " + Twine (Count) +
1551
1551
" bytes" );
1552
1552
B->Data .append (MB.FragmentData );
1553
1553
return get (B->build ());
1554
1554
}
1555
+ // Write 0 to signify that it has nops.
1556
+ writeVBR8 (0 , B->Data );
1555
1557
writeVBR8 (Count, B->Data );
1556
1558
writeVBR8 (F.getAlignFill (), B->Data );
1557
1559
writeVBR8 (F.getAlignFillLen (), B->Data );
@@ -1561,7 +1563,7 @@ MCAlignFragmentRef::create(MCCASBuilder &MB, const MCFragment &F,
1561
1563
Expected<uint64_t > MCAlignFragmentRef::materialize (MCCASReader &Reader,
1562
1564
raw_ostream *Stream) const
1563
1565
{
1564
- uint64_t Count, FragContentSize;
1566
+ uint64_t Count, FragContentSize, HasNops ;
1565
1567
auto Remaining = getData ();
1566
1568
auto Endian = Reader.getEndian ();
1567
1569
if (auto E = consumeVBR8 (Remaining, FragContentSize))
@@ -1571,14 +1573,18 @@ Expected<uint64_t> MCAlignFragmentRef::materialize(MCCASReader &Reader,
1571
1573
1572
1574
Remaining = Remaining.drop_front (FragContentSize);
1573
1575
1574
- if (auto E = consumeVBR8 (Remaining, Count ))
1576
+ if (auto E = consumeVBR8 (Remaining, HasNops ))
1575
1577
return std::move (E);
1576
1578
1577
1579
// hasEmitNops.
1578
- if (!Count ) {
1580
+ if (HasNops ) {
1579
1581
*Stream << Remaining;
1580
1582
return Remaining.size () + FragContentSize;
1581
1583
}
1584
+
1585
+ if (auto E = consumeVBR8 (Remaining, Count))
1586
+ return std::move (E);
1587
+
1582
1588
int64_t Value;
1583
1589
unsigned ValueSize;
1584
1590
if (auto E = consumeVBR8 (Remaining, Value))
@@ -2871,7 +2877,6 @@ static void getFragmentContents(const MCFragment &Fragment,
2871
2877
Fragment.getContents ().end ()); \
2872
2878
FragContents.append (Fragment.getVarContents ().begin (), \
2873
2879
Fragment.getVarContents ().end ()); \
2874
- \
2875
2880
return ; \
2876
2881
}
2877
2882
#define MCFRAGMENT_ENCODED_FRAGMENT_ONLY
@@ -2880,13 +2885,14 @@ static void getFragmentContents(const MCFragment &Fragment,
2880
2885
const MCCVInlineLineTableFragment &SF =
2881
2886
cast<MCCVInlineLineTableFragment>(Fragment);
2882
2887
FragContents.append (SF.getContents ().begin (), SF.getContents ().end ());
2888
+ FragContents.append (SF.getVarContents ().begin (), SF.getVarContents ().end ());
2883
2889
return ;
2884
2890
}
2885
2891
case MCFragment::FT_LEB: {
2886
- auto FixedContent = Fragment.getContents ();
2887
- auto VarContent = Fragment.getVarContents ( );
2888
- FragContents.append (FixedContent. begin (), FixedContent. end ());
2889
- FragContents. append (VarContent. begin (), VarContent .end ());
2892
+ FragContents. append ( Fragment.getContents (). begin (),
2893
+ Fragment.getContents (). end () );
2894
+ FragContents.append (Fragment. getVarContents (). begin (),
2895
+ Fragment. getVarContents () .end ());
2890
2896
return ;
2891
2897
}
2892
2898
case MCFragment::FT_Align: {
0 commit comments