Skip to content

Commit 43dcc13

Browse files
committed
Add linkage attribute
1 parent 2fa73af commit 43dcc13

File tree

9 files changed

+23
-9
lines changed

9 files changed

+23
-9
lines changed

llvm/include/llvm/MC/MCDirectives.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,10 +48,10 @@ enum MCSymbolAttr {
4848
MCSA_WeakDefAutoPrivate, ///< .weak_def_can_be_hidden (MachO)
4949
MCSA_WeakAntiDep, ///< .weak_anti_dep (COFF)
5050
MCSA_Memtag, ///< .memtag (ELF)
51-
52-
// Attributes specific for HLASM.
5351
MCSA_Code, ///< symbol is code (GOFF)
5452
MCSA_Data, ///< symbol is data (GOFF)
53+
MCSA_OSLinkage, ///< symbol uses OS linkage (GOFF)
54+
MCSA_XPLinkage, ///< symbol uses XP linkage (GOFF)
5555
};
5656

5757
enum MCDataRegionType {

llvm/include/llvm/MC/MCSymbolGOFF.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ class MCSymbolGOFF : public MCSymbol {
3434
GOFF::ERAttr ERAttributes;
3535

3636
GOFF::ESDExecutable CodeData = GOFF::ESDExecutable::ESD_EXE_Unspecified;
37+
GOFF::ESDLinkageType Linkage = GOFF::ESDLinkageType::ESD_LT_XPLink;
3738

3839
enum SymbolFlags : uint16_t {
3940
SF_LD = 0x01, // LD attributes are set.
@@ -86,6 +87,9 @@ class MCSymbolGOFF : public MCSymbol {
8687
void setCodeData(GOFF::ESDExecutable Value) { CodeData = Value; }
8788
GOFF::ESDExecutable getCodeData() const { return CodeData; }
8889

90+
void setLinkage(GOFF::ESDLinkageType Value) { Linkage = Value; }
91+
GOFF::ESDLinkageType getLinkage() const { return Linkage; }
92+
8993
void initAttributes();
9094
};
9195
} // end namespace llvm

llvm/lib/MC/MCELFStreamer.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#include "llvm/MC/MCAssembler.h"
1919
#include "llvm/MC/MCCodeEmitter.h"
2020
#include "llvm/MC/MCContext.h"
21+
#include "llvm/MC/MCDirectives.h"
2122
#include "llvm/MC/MCELFObjectWriter.h"
2223
#include "llvm/MC/MCExpr.h"
2324
#include "llvm/MC/MCFixup.h"
@@ -153,6 +154,8 @@ bool MCELFStreamer::emitSymbolAttribute(MCSymbol *S, MCSymbolAttr Attribute) {
153154
case MCSA_WeakAntiDep:
154155
case MCSA_Code:
155156
case MCSA_Data:
157+
case MCSA_OSLinkage:
158+
case MCSA_XPLinkage:
156159
return false;
157160

158161
case MCSA_NoDeadStrip:

llvm/lib/MC/MCGOFFStreamer.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,12 @@ bool MCGOFFStreamer::emitSymbolAttribute(MCSymbol *Sym,
8282
case MCSA_Data:
8383
Symbol->setCodeData(GOFF::ESDExecutable::ESD_EXE_DATA);
8484
break;
85+
case MCSA_OSLinkage:
86+
Symbol->setLinkage(GOFF::ESDLinkageType::ESD_LT_OS);
87+
break;
88+
case MCSA_XPLinkage:
89+
Symbol->setLinkage(GOFF::ESDLinkageType::ESD_LT_XPLink);
90+
break;
8591
case MCSA_Global:
8692
Symbol->setExternal(true);
8793
break;

llvm/lib/MC/MCMachOStreamer.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -301,6 +301,8 @@ bool MCMachOStreamer::emitSymbolAttribute(MCSymbol *Sym,
301301
case MCSA_WeakAntiDep:
302302
case MCSA_Code:
303303
case MCSA_Data:
304+
case MCSA_OSLinkage:
305+
case MCSA_XPLinkage:
304306
return false;
305307

306308
case MCSA_Global:

llvm/lib/MC/MCSymbolGOFF.cpp

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,16 +32,15 @@ void MCSymbolGOFF::initAttributes() {
3232
if (isDefined()) {
3333
MCSectionGOFF &Section = static_cast<MCSectionGOFF &>(getSection());
3434
if (Section.isED()) {
35-
setLDAttributes(GOFF::LDAttr{false, CodeData, BindingStrength,
36-
GOFF::ESD_LT_XPLink, GOFF::ESD_AMODE_64,
37-
BindingScope});
35+
setLDAttributes(GOFF::LDAttr{false, CodeData, BindingStrength, Linkage,
36+
GOFF::ESD_AMODE_64, BindingScope});
3837
} else if (Section.isPR()) {
3938
// For data symbols, the attributes are already determind in TLOFI.
4039
// TODO Does it make sense to it to here?
4140
} else
4241
llvm_unreachable("Unexpected section type for label");
4342
} else {
44-
setERAttributes(GOFF::ERAttr{CodeData, BindingStrength, GOFF::ESD_LT_XPLink,
43+
setERAttributes(GOFF::ERAttr{CodeData, BindingStrength, Linkage,
4544
GOFF::ESD_AMODE_64, BindingScope});
4645
}
4746
}

llvm/lib/Target/SystemZ/SystemZAsmPrinter.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1589,7 +1589,7 @@ void SystemZAsmPrinter::emitPPA2(Module &M) {
15891589
const char *StartSymbolName = "CELQSTRT";
15901590
MCSymbol *CELQSTRT = OutContext.getOrCreateSymbol(StartSymbolName);
15911591
OutStreamer->emitSymbolAttribute(CELQSTRT, MCSA_Code);
1592-
// TODO Mark as OS linkage.
1592+
OutStreamer->emitSymbolAttribute(CELQSTRT, MCSA_OSLinkage);
15931593
OutStreamer->emitSymbolAttribute(CELQSTRT, MCSA_Global);
15941594

15951595
// Create symbol and assign to class field for use in PPA1.

llvm/test/CodeGen/SystemZ/zos-section-1.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ entry:
110110
; CHECK-NEXT: 000330 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
111111
; CHECK-NEXT: 000340 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00
112112
; CHECK-NEXT: 000350 00 00 00 00 00 00 00 00 00 00 00 00 04 00 00 02
113-
; CHECK-NEXT: 000360 00 04 20 00 00 00 00 08 c3 c5 d3 d8 e2 e3 d9 e3
113+
; CHECK-NEXT: 000360 00 04 00 00 00 00 00 08 c3 c5 d3 d8 e2 e3 d9 e3
114114

115115
; ESD record, type LD.
116116
; The name is me.

llvm/test/CodeGen/SystemZ/zos-section-2.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ source_filename = "test.ll"
153153
; CHECK-NEXT: 000510 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
154154
; CHECK-NEXT: 000520 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00
155155
; CHECK-NEXT: 000530 00 00 00 00 00 00 00 00 00 00 00 00 04 00 00 02
156-
; CHECK-NEXT: 000540 00 04 20 00 00 00 00 08 c3 c5 d3 d8 e2 e3 d9 e3
156+
; CHECK-NEXT: 000540 00 04 00 00 00 00 00 08 c3 c5 d3 d8 e2 e3 d9 e3
157157

158158
; Text record for the code section C_CODE64.
159159
; The regular expression matches the lower byte of the length.

0 commit comments

Comments
 (0)