1
- // ===- tools/dsymutil/ DwarfStreamer.cpp - Dwarf Streamer ------------------===//
1
+ // ===- DwarfStreamer.cpp -------------------------------- ------------------===//
2
2
//
3
3
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4
4
// See https://llvm.org/LICENSE.txt for license information.
5
5
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6
6
//
7
7
// ===----------------------------------------------------------------------===//
8
8
9
- #include " DwarfStreamer.h"
10
- #include " LinkUtils.h"
11
- #include " MachOUtils.h"
9
+ #include " llvm/DWARFLinker/DWARFStreamer.h"
12
10
#include " llvm/ADT/Triple.h"
11
+ #include " llvm/CodeGen/NonRelocatableStringpool.h"
13
12
#include " llvm/DWARFLinker/DWARFLinkerCompileUnit.h"
14
13
#include " llvm/DebugInfo/DWARF/DWARFContext.h"
14
+ #include " llvm/MC/MCAsmBackend.h"
15
+ #include " llvm/MC/MCCodeEmitter.h"
16
+ #include " llvm/MC/MCDwarf.h"
17
+ #include " llvm/MC/MCObjectWriter.h"
18
+ #include " llvm/MC/MCSection.h"
19
+ #include " llvm/MC/MCStreamer.h"
20
+ #include " llvm/MC/MCSubtargetInfo.h"
21
+ #include " llvm/MC/MCSymbol.h"
15
22
#include " llvm/MC/MCTargetOptions.h"
16
23
#include " llvm/MC/MCTargetOptionsCommandFlags.h"
17
24
#include " llvm/Support/LEB128.h"
18
25
#include " llvm/Support/TargetRegistry.h"
19
- #include " llvm/Target/TargetMachine.h"
20
26
#include " llvm/Target/TargetOptions.h"
21
27
22
28
namespace llvm {
23
29
24
30
static mc::RegisterMCTargetOptionsFlags MOF;
25
31
26
- namespace dsymutil {
27
-
28
32
bool DwarfStreamer::init (Triple TheTriple) {
29
33
std::string ErrorStr;
30
34
std::string TripleName;
@@ -34,40 +38,41 @@ bool DwarfStreamer::init(Triple TheTriple) {
34
38
const Target *TheTarget =
35
39
TargetRegistry::lookupTarget (TripleName, TheTriple, ErrorStr);
36
40
if (!TheTarget)
37
- return error (ErrorStr, Context);
41
+ return error (ErrorStr, Context), false ;
38
42
TripleName = TheTriple.getTriple ();
39
43
40
44
// Create all the MC Objects.
41
45
MRI.reset (TheTarget->createMCRegInfo (TripleName));
42
46
if (!MRI)
43
- return error (Twine (" no register info for target " ) + TripleName, Context);
47
+ return error (Twine (" no register info for target " ) + TripleName, Context),
48
+ false ;
44
49
45
50
MCTargetOptions MCOptions = mc::InitMCTargetOptionsFromFlags ();
46
51
MAI.reset (TheTarget->createMCAsmInfo (*MRI, TripleName, MCOptions));
47
52
if (!MAI)
48
- return error (" no asm info for target " + TripleName, Context);
53
+ return error (" no asm info for target " + TripleName, Context), false ;
49
54
50
55
MOFI.reset (new MCObjectFileInfo);
51
56
MC.reset (new MCContext (MAI.get (), MRI.get (), MOFI.get ()));
52
57
MOFI->InitMCObjectFileInfo (TheTriple, /* PIC*/ false , *MC);
53
58
54
59
MSTI.reset (TheTarget->createMCSubtargetInfo (TripleName, " " , " " ));
55
60
if (!MSTI)
56
- return error (" no subtarget info for target " + TripleName, Context);
61
+ return error (" no subtarget info for target " + TripleName, Context), false ;
57
62
58
63
MAB = TheTarget->createMCAsmBackend (*MSTI, *MRI, MCOptions);
59
64
if (!MAB)
60
- return error (" no asm backend for target " + TripleName, Context);
65
+ return error (" no asm backend for target " + TripleName, Context), false ;
61
66
62
67
MII.reset (TheTarget->createMCInstrInfo ());
63
68
if (!MII)
64
- return error (" no instr info info for target " + TripleName, Context);
69
+ return error (" no instr info info for target " + TripleName, Context), false ;
65
70
66
71
MCE = TheTarget->createMCCodeEmitter (*MII, *MRI, *MC);
67
72
if (!MCE)
68
- return error (" no code emitter for target " + TripleName, Context);
73
+ return error (" no code emitter for target " + TripleName, Context), false ;
69
74
70
- switch (Options. FileType ) {
75
+ switch (OutFileType ) {
71
76
case OutputFileType::Assembly: {
72
77
MIP = TheTarget->createMCInstPrinter (TheTriple, MAI->getAssemblerDialect (),
73
78
*MAI, *MII, *MRI);
@@ -88,17 +93,17 @@ bool DwarfStreamer::init(Triple TheTriple) {
88
93
}
89
94
90
95
if (!MS)
91
- return error (" no object streamer for target " + TripleName, Context);
96
+ return error (" no object streamer for target " + TripleName, Context), false ;
92
97
93
98
// Finally create the AsmPrinter we'll use to emit the DIEs.
94
99
TM.reset (TheTarget->createTargetMachine (TripleName, " " , " " , TargetOptions (),
95
100
None));
96
101
if (!TM)
97
- return error (" no target machine for target " + TripleName, Context);
102
+ return error (" no target machine for target " + TripleName, Context), false ;
98
103
99
104
Asm.reset (TheTarget->createAsmPrinter (*TM, std::unique_ptr<MCStreamer>(MS)));
100
105
if (!Asm)
101
- return error (" no asm printer for target " + TripleName, Context);
106
+ return error (" no asm printer for target " + TripleName, Context), false ;
102
107
103
108
RangesSectionSize = 0 ;
104
109
LocSectionSize = 0 ;
@@ -109,15 +114,7 @@ bool DwarfStreamer::init(Triple TheTriple) {
109
114
return true ;
110
115
}
111
116
112
- bool DwarfStreamer::finish (const DebugMap &DM, SymbolMapTranslator &T) {
113
- bool Result = true ;
114
- if (DM.getTriple ().isOSDarwin () && !DM.getBinaryPath ().empty () &&
115
- Options.FileType == OutputFileType::Object)
116
- Result = MachOUtils::generateDsymCompanion (DM, T, *MS, OutFile);
117
- else
118
- MS->Finish ();
119
- return Result;
120
- }
117
+ void DwarfStreamer::finish () { MS->Finish (); }
121
118
122
119
void DwarfStreamer::switchToDebugInfoSection (unsigned DwarfVersion) {
123
120
MS->SwitchSection (MOFI->getDwarfInfoSection ());
@@ -660,7 +657,7 @@ void DwarfStreamer::translateLineTable(DataExtractor Data, uint64_t Offset) {
660
657
if (Dir[0 ] == 0 )
661
658
break ;
662
659
663
- StringRef Translated = Options. Translator (Dir);
660
+ StringRef Translated = Translator (Dir);
664
661
Asm->OutStreamer ->emitBytes (Translated);
665
662
Asm->emitInt8 (0 );
666
663
LineSectionSize += Translated.size () + 1 ;
@@ -672,7 +669,7 @@ void DwarfStreamer::translateLineTable(DataExtractor Data, uint64_t Offset) {
672
669
if (File[0 ] == 0 )
673
670
break ;
674
671
675
- StringRef Translated = Options. Translator (File);
672
+ StringRef Translated = Translator (File);
676
673
Asm->OutStreamer ->emitBytes (Translated);
677
674
Asm->emitInt8 (0 );
678
675
LineSectionSize += Translated.size () + 1 ;
@@ -740,15 +737,15 @@ void DwarfStreamer::emitPubSectionForUnit(
740
737
741
738
// / Emit .debug_pubnames for \p Unit.
742
739
void DwarfStreamer::emitPubNamesForUnit (const CompileUnit &Unit) {
743
- if (Options. Minimize )
740
+ if (Minimize)
744
741
return ;
745
742
emitPubSectionForUnit (MC->getObjectFileInfo ()->getDwarfPubNamesSection (),
746
743
" names" , Unit, Unit.getPubnames ());
747
744
}
748
745
749
746
// / Emit .debug_pubtypes for \p Unit.
750
747
void DwarfStreamer::emitPubTypesForUnit (const CompileUnit &Unit) {
751
- if (Options. Minimize )
748
+ if (Minimize)
752
749
return ;
753
750
emitPubSectionForUnit (MC->getObjectFileInfo ()->getDwarfPubTypesSection (),
754
751
" types" , Unit, Unit.getPubtypes ());
@@ -776,5 +773,4 @@ void DwarfStreamer::emitFDE(uint32_t CIEOffset, uint32_t AddrSize,
776
773
FrameSectionSize += FDEBytes.size () + 8 + AddrSize;
777
774
}
778
775
779
- } // namespace dsymutil
780
776
} // namespace llvm
0 commit comments