Skip to content

Commit 28a99e3

Browse files
committed
Centralize setting of symbol attributes
1 parent b75d2cb commit 28a99e3

File tree

3 files changed

+51
-94
lines changed

3 files changed

+51
-94
lines changed

llvm/include/llvm/MC/MCGOFFStreamer.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,10 @@ namespace llvm {
1616
class GOFFObjectWriter;
1717
class MCSymbolGOFF;
1818

19+
namespace goff {
20+
bool setSymbolAttribute(MCSymbolGOFF *Symbol, MCSymbolAttr Attribute);
21+
}
22+
1923
class MCGOFFStreamer : public MCObjectStreamer {
2024

2125
public:

llvm/lib/MC/MCGOFFStreamer.cpp

Lines changed: 45 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -24,44 +24,9 @@
2424

2525
using namespace llvm;
2626

27-
MCGOFFStreamer::MCGOFFStreamer(MCContext &Context,
28-
std::unique_ptr<MCAsmBackend> MAB,
29-
std::unique_ptr<MCObjectWriter> OW,
30-
std::unique_ptr<MCCodeEmitter> Emitter)
31-
: MCObjectStreamer(Context, std::move(MAB), std::move(OW),
32-
std::move(Emitter)) {}
33-
34-
MCGOFFStreamer::~MCGOFFStreamer() = default;
35-
36-
void MCGOFFStreamer::finishImpl() {
37-
getWriter().setRootSD(static_cast<MCSectionGOFF *>(
38-
getContext().getObjectFileInfo()->getTextSection())
39-
->getParent());
40-
MCObjectStreamer::finishImpl();
41-
}
42-
43-
GOFFObjectWriter &MCGOFFStreamer::getWriter() {
44-
return static_cast<GOFFObjectWriter &>(getAssembler().getWriter());
45-
}
46-
47-
void MCGOFFStreamer::changeSection(MCSection *Section, uint32_t Subsection) {
48-
// Make sure that all section are registered in the correct order.
49-
SmallVector<MCSectionGOFF *> Sections;
50-
for (auto *S = static_cast<MCSectionGOFF *>(Section); S; S = S->getParent())
51-
Sections.push_back(S);
52-
while (!Sections.empty()) {
53-
auto *S = Sections.pop_back_val();
54-
MCObjectStreamer::changeSection(S, Sections.empty() ? Subsection : 0);
55-
}
56-
}
57-
58-
void MCGOFFStreamer::emitLabel(MCSymbol *Symbol, SMLoc Loc) {
59-
MCObjectStreamer::emitLabel(Symbol, Loc);
60-
}
61-
62-
bool MCGOFFStreamer::emitSymbolAttribute(MCSymbol *Sym,
63-
MCSymbolAttr Attribute) {
64-
auto *Symbol = static_cast<MCSymbolGOFF *>(Sym);
27+
namespace llvm {
28+
namespace goff {
29+
bool setSymbolAttribute(MCSymbolGOFF *Symbol, MCSymbolAttr Attribute) {
6530
switch (Attribute) {
6631
case MCSA_Invalid:
6732
case MCSA_Cold:
@@ -118,6 +83,48 @@ bool MCGOFFStreamer::emitSymbolAttribute(MCSymbol *Sym,
11883

11984
return true;
12085
}
86+
} // namespace goff
87+
} // namespace llvm
88+
89+
MCGOFFStreamer::MCGOFFStreamer(MCContext &Context,
90+
std::unique_ptr<MCAsmBackend> MAB,
91+
std::unique_ptr<MCObjectWriter> OW,
92+
std::unique_ptr<MCCodeEmitter> Emitter)
93+
: MCObjectStreamer(Context, std::move(MAB), std::move(OW),
94+
std::move(Emitter)) {}
95+
96+
MCGOFFStreamer::~MCGOFFStreamer() = default;
97+
98+
void MCGOFFStreamer::finishImpl() {
99+
getWriter().setRootSD(static_cast<MCSectionGOFF *>(
100+
getContext().getObjectFileInfo()->getTextSection())
101+
->getParent());
102+
MCObjectStreamer::finishImpl();
103+
}
104+
105+
GOFFObjectWriter &MCGOFFStreamer::getWriter() {
106+
return static_cast<GOFFObjectWriter &>(getAssembler().getWriter());
107+
}
108+
109+
void MCGOFFStreamer::changeSection(MCSection *Section, uint32_t Subsection) {
110+
// Make sure that all section are registered in the correct order.
111+
SmallVector<MCSectionGOFF *> Sections;
112+
for (auto *S = static_cast<MCSectionGOFF *>(Section); S; S = S->getParent())
113+
Sections.push_back(S);
114+
while (!Sections.empty()) {
115+
auto *S = Sections.pop_back_val();
116+
MCObjectStreamer::changeSection(S, Sections.empty() ? Subsection : 0);
117+
}
118+
}
119+
120+
void MCGOFFStreamer::emitLabel(MCSymbol *Symbol, SMLoc Loc) {
121+
MCObjectStreamer::emitLabel(Symbol, Loc);
122+
}
123+
124+
bool MCGOFFStreamer::emitSymbolAttribute(MCSymbol *Sym,
125+
MCSymbolAttr Attribute) {
126+
return goff::setSymbolAttribute(static_cast<MCSymbolGOFF *>(Sym), Attribute);
127+
}
121128

122129
void MCGOFFStreamer::emitExterns() {}
123130

llvm/lib/Target/SystemZ/MCTargetDesc/SystemZHLASMAsmStreamer.cpp

Lines changed: 2 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
#include "llvm/ADT/StringExtras.h"
1111
#include "llvm/BinaryFormat/GOFF.h"
1212
#include "llvm/MC/MCGOFFAttributes.h"
13+
#include "llvm/MC/MCGOFFStreamer.h"
1314
#include "llvm/MC/MCSymbolGOFF.h"
1415
#include "llvm/Support/Casting.h"
1516
#include "llvm/Support/Signals.h"
@@ -263,62 +264,7 @@ void SystemZHLASMAsmStreamer::emitLabel(MCSymbol *Symbol, SMLoc Loc) {
263264

264265
bool SystemZHLASMAsmStreamer::emitSymbolAttribute(MCSymbol *Sym,
265266
MCSymbolAttr Attribute) {
266-
auto *Symbol = static_cast<MCSymbolGOFF *>(Sym);
267-
switch (Attribute) {
268-
case MCSA_Invalid:
269-
case MCSA_Cold:
270-
case MCSA_ELF_TypeIndFunction:
271-
case MCSA_ELF_TypeTLS:
272-
case MCSA_ELF_TypeCommon:
273-
case MCSA_ELF_TypeNoType:
274-
case MCSA_ELF_TypeGnuUniqueObject:
275-
case MCSA_LGlobal:
276-
case MCSA_Extern:
277-
case MCSA_Exported:
278-
case MCSA_IndirectSymbol:
279-
case MCSA_Internal:
280-
case MCSA_LazyReference:
281-
case MCSA_NoDeadStrip:
282-
case MCSA_SymbolResolver:
283-
case MCSA_AltEntry:
284-
case MCSA_PrivateExtern:
285-
case MCSA_Protected:
286-
case MCSA_Reference:
287-
case MCSA_WeakDefinition:
288-
case MCSA_WeakDefAutoPrivate:
289-
case MCSA_WeakAntiDep:
290-
case MCSA_Memtag:
291-
return false;
292-
293-
case MCSA_ELF_TypeFunction:
294-
Symbol->setCodeData(GOFF::ESDExecutable::ESD_EXE_CODE);
295-
break;
296-
case MCSA_ELF_TypeObject:
297-
Symbol->setCodeData(GOFF::ESDExecutable::ESD_EXE_DATA);
298-
break;
299-
case MCSA_OSLinkage:
300-
Symbol->setLinkage(GOFF::ESDLinkageType::ESD_LT_OS);
301-
break;
302-
case MCSA_XPLinkage:
303-
Symbol->setLinkage(GOFF::ESDLinkageType::ESD_LT_XPLink);
304-
break;
305-
case MCSA_Global:
306-
Symbol->setExternal(true);
307-
break;
308-
case MCSA_Local:
309-
Symbol->setExternal(false);
310-
break;
311-
case MCSA_Weak:
312-
case MCSA_WeakReference:
313-
Symbol->setExternal(true);
314-
Symbol->setWeak();
315-
break;
316-
case MCSA_Hidden:
317-
Symbol->setHidden(true);
318-
break;
319-
}
320-
321-
return true;
267+
return goff::setSymbolAttribute(static_cast<MCSymbolGOFF *>(Sym), Attribute);
322268
}
323269

324270
void SystemZHLASMAsmStreamer::emitRawTextImpl(StringRef String) {

0 commit comments

Comments
 (0)