Skip to content

Commit cd5ee21

Browse files
Edit MCAlignFragmentRef::create and materialize to match what is there in MCAssembler.cpp writeFragment, FT_Align fragments have data in them now?
1 parent 1b0dc8e commit cd5ee21

File tree

1 file changed

+14
-2
lines changed

1 file changed

+14
-2
lines changed

llvm/lib/MCCAS/MCCASObjectV1.cpp

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1539,7 +1539,9 @@ MCAlignFragmentRef::create(MCCASBuilder &MB, const MCFragment &F,
15391539
if (!B)
15401540
return B.takeError();
15411541

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();
15431545
if (F.hasAlignEmitNops()) {
15441546
// Write 0 as size and use backend to emit nop.
15451547
writeVBR8(0, B->Data);
@@ -1559,9 +1561,16 @@ MCAlignFragmentRef::create(MCCASBuilder &MB, const MCFragment &F,
15591561
Expected<uint64_t> MCAlignFragmentRef::materialize(MCCASReader &Reader,
15601562
raw_ostream *Stream) const
15611563
{
1562-
uint64_t Count;
1564+
uint64_t Count, FragContentSize;
15631565
auto Remaining = getData();
15641566
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+
15651574
if (auto E = consumeVBR8(Remaining, Count))
15661575
return std::move(E);
15671576

@@ -2869,6 +2878,9 @@ static ArrayRef<char> getFragmentContents(const MCFragment &Fragment) {
28692878
case MCFragment::FT_LEB: {
28702879
return Fragment.getContents();
28712880
}
2881+
case MCFragment::FT_Align: {
2882+
return Fragment.getContents();
2883+
}
28722884
default:
28732885
return ArrayRef<char>();
28742886
}

0 commit comments

Comments
 (0)