1010#include " llvm/ADT/SmallString.h"
1111#include " llvm/ADT/SmallVector.h"
1212#include " llvm/ADT/StringRef.h"
13+ #include " llvm/BinaryFormat/MachO.h"
1314#include " llvm/MC/MCAsmBackend.h"
1415#include " llvm/MC/MCAssembler.h"
1516#include " llvm/MC/MCCodeEmitter.h"
@@ -63,7 +64,7 @@ class MCMachOStreamer : public MCObjectStreamer {
6364
6465 void emitInstToData (const MCInst &Inst, const MCSubtargetInfo &STI) override ;
6566
66- void emitDataRegion (DataRegionData::KindTy Kind);
67+ void emitDataRegion (MachO::DataRegionType Kind);
6768 void emitDataRegionEnd ();
6869
6970public:
@@ -83,6 +84,10 @@ class MCMachOStreamer : public MCObjectStreamer {
8384 MCObjectStreamer::reset ();
8485 }
8586
87+ MachObjectWriter &getWriter () {
88+ return static_cast <MachObjectWriter &>(getAssembler ().getWriter ());
89+ }
90+
8691 // / @name MCStreamer Interface
8792 // / @{
8893
@@ -227,20 +232,18 @@ void MCMachOStreamer::emitAssignment(MCSymbol *Symbol, const MCExpr *Value) {
227232 MCObjectStreamer::emitAssignment (Symbol, Value);
228233}
229234
230- void MCMachOStreamer::emitDataRegion (DataRegionData::KindTy Kind) {
235+ void MCMachOStreamer::emitDataRegion (MachO::DataRegionType Kind) {
231236 // Create a temporary label to mark the start of the data region.
232237 MCSymbol *Start = getContext ().createTempSymbol ();
233238 emitLabel (Start);
234239 // Record the region for the object writer to use.
235- DataRegionData Data = { Kind, Start, nullptr };
236- std::vector<DataRegionData> &Regions = getAssembler ().getDataRegions ();
237- Regions.push_back (Data);
240+ getWriter ().getDataRegions ().push_back ({Kind, Start, nullptr });
238241}
239242
240243void MCMachOStreamer::emitDataRegionEnd () {
241- std::vector<DataRegionData> &Regions = getAssembler ().getDataRegions ();
244+ auto &Regions = getWriter ().getDataRegions ();
242245 assert (!Regions.empty () && " Mismatched .end_data_region!" );
243- DataRegionData &Data = Regions.back ();
246+ auto &Data = Regions.back ();
244247 assert (!Data.End && " Mismatched .end_data_region!" );
245248 // Create a temporary label to mark the end of the data region.
246249 Data.End = getContext ().createTempSymbol ();
@@ -269,16 +272,16 @@ void MCMachOStreamer::emitLinkerOptions(ArrayRef<std::string> Options) {
269272void MCMachOStreamer::emitDataRegion (MCDataRegionType Kind) {
270273 switch (Kind) {
271274 case MCDR_DataRegion:
272- emitDataRegion (DataRegionData::Data );
275+ emitDataRegion (MachO::DataRegionType::DICE_KIND_DATA );
273276 return ;
274277 case MCDR_DataRegionJT8:
275- emitDataRegion (DataRegionData::JumpTable8 );
278+ emitDataRegion (MachO::DataRegionType::DICE_KIND_JUMP_TABLE8 );
276279 return ;
277280 case MCDR_DataRegionJT16:
278- emitDataRegion (DataRegionData::JumpTable16 );
281+ emitDataRegion (MachO::DataRegionType::DICE_KIND_JUMP_TABLE16 );
279282 return ;
280283 case MCDR_DataRegionJT32:
281- emitDataRegion (DataRegionData::JumpTable32 );
284+ emitDataRegion (MachO::DataRegionType::DICE_KIND_JUMP_TABLE32 );
282285 return ;
283286 case MCDR_DataRegionEnd:
284287 emitDataRegionEnd ();
@@ -322,9 +325,8 @@ bool MCMachOStreamer::emitSymbolAttribute(MCSymbol *Sym,
322325 if (Attribute == MCSA_IndirectSymbol) {
323326 // Note that we intentionally cannot use the symbol data here; this is
324327 // important for matching the string table that 'as' generates.
325- static_cast <MachObjectWriter &>(getAssembler ().getWriter ())
326- .getIndirectSymbols ()
327- .push_back ({Symbol, getCurrentSectionOnly ()});
328+ getWriter ().getIndirectSymbols ().push_back (
329+ {Symbol, getCurrentSectionOnly ()});
328330 return true ;
329331 }
330332
0 commit comments