1313using namespace llvm ;
1414
1515namespace {
16- void emitRMode (raw_ostream &OS, GOFF::ESDRmode Rmode, bool UseParenthesis) {
17- if (Rmode != GOFF::ESD_RMODE_None) {
18- OS << " RMODE" << (UseParenthesis ? ' (' : ' ' );
19- switch (Rmode) {
20- case GOFF::ESD_RMODE_24:
21- OS << " 24" ;
22- break ;
23- case GOFF::ESD_RMODE_31:
24- OS << " 31" ;
25- break ;
26- case GOFF::ESD_RMODE_64:
27- OS << " 64" ;
28- break ;
29- case GOFF::ESD_RMODE_None:
30- break ;
31- }
32- if (UseParenthesis)
33- OS << ' )' ;
34- }
35- }
36-
37- void emitCATTR (raw_ostream &OS, StringRef Name, StringRef ParentName,
38- bool EmitAmodeAndRmode, GOFF::ESDAmode Amode,
39- GOFF::ESDRmode Rmode, GOFF::ESDAlignment Alignment,
16+ void emitCATTR (raw_ostream &OS, StringRef Name, GOFF::ESDRmode Rmode,
17+ GOFF::ESDAlignment Alignment,
4018 GOFF::ESDLoadingBehavior LoadBehavior,
4119 GOFF::ESDExecutable Executable, bool IsReadOnly,
42- StringRef PartName) {
43- if (EmitAmodeAndRmode && Amode != GOFF::ESD_AMODE_None) {
44- OS << ParentName << " AMODE " ;
45- switch (Amode) {
46- case GOFF::ESD_AMODE_24:
47- OS << " 24" ;
48- break ;
49- case GOFF::ESD_AMODE_31:
50- OS << " 31" ;
51- break ;
52- case GOFF::ESD_AMODE_ANY:
53- OS << " ANY" ;
54- break ;
55- case GOFF::ESD_AMODE_64:
56- OS << " 64" ;
57- break ;
58- case GOFF::ESD_AMODE_MIN:
59- OS << " ANY64" ;
60- break ;
61- case GOFF::ESD_AMODE_None:
62- break ;
63- }
64- OS << " \n " ;
65- }
66- if (EmitAmodeAndRmode && Rmode != GOFF::ESD_RMODE_None) {
67- OS << ParentName << ' ' ;
68- emitRMode (OS, Rmode, /* UseParenthesis=*/ false );
69- OS << " \n " ;
70- }
20+ uint32_t SortKey, StringRef PartName) {
7121 OS << Name << " CATTR " ;
7222 OS << " ALIGN(" << static_cast <unsigned >(Alignment) << " )" ;
7323 switch (LoadBehavior) {
@@ -94,8 +44,24 @@ void emitCATTR(raw_ostream &OS, StringRef Name, StringRef ParentName,
9444 OS << " ,READONLY" ;
9545 if (Rmode != GOFF::ESD_RMODE_None) {
9646 OS << ' ,' ;
97- emitRMode (OS, Rmode, /* UseParenthesis=*/ true );
47+ OS << " RMODE(" ;
48+ switch (Rmode) {
49+ case GOFF::ESD_RMODE_24:
50+ OS << " 24" ;
51+ break ;
52+ case GOFF::ESD_RMODE_31:
53+ OS << " 31" ;
54+ break ;
55+ case GOFF::ESD_RMODE_64:
56+ OS << " 64" ;
57+ break ;
58+ case GOFF::ESD_RMODE_None:
59+ break ;
60+ }
61+ OS << ' )' ;
9862 }
63+ if (SortKey)
64+ OS << " ,PRIORITY(" << SortKey << " )" ;
9965 if (!PartName.empty ())
10066 OS << " ,PART(" << PartName << " )" ;
10167 OS << ' \n ' ;
@@ -112,27 +78,24 @@ void MCSectionGOFF::printSwitchToSection(const MCAsmInfo &MAI, const Triple &T,
11278 break ;
11379 }
11480 case GOFF::ESD_ST_ElementDefinition: {
115- bool ParentEmitted = getParent ()->Emitted ;
11681 getParent ()->printSwitchToSection (MAI, T, OS, Subsection);
11782 if (!Emitted) {
118- emitCATTR (OS, Name, getParent ()->getName (), !ParentEmitted,
119- EDAttributes.Amode , EDAttributes.Rmode , EDAttributes.Alignment ,
83+ emitCATTR (OS, Name, EDAttributes.Rmode , EDAttributes.Alignment ,
12084 EDAttributes.LoadBehavior , EDAttributes.Executable ,
121- EDAttributes.IsReadOnly , StringRef ());
85+ EDAttributes.IsReadOnly , 0 , StringRef ());
12286 Emitted = true ;
12387 } else
12488 OS << Name << " CATTR ,\n " ;
12589 break ;
12690 }
12791 case GOFF::ESD_ST_PartReference: {
12892 MCSectionGOFF *ED = getParent ();
129- bool SDEmitted = ED->getParent ()->Emitted ;
13093 ED->getParent ()->printSwitchToSection (MAI, T, OS, Subsection);
13194 if (!Emitted) {
132- emitCATTR (OS, ED->getName (), ED->getParent ()-> getName (), !SDEmitted ,
133- PRAttributes.Amode , getParent () ->EDAttributes .Rmode ,
134- PRAttributes.Alignment , getParent ()-> EDAttributes . LoadBehavior ,
135- PRAttributes.Executable , PRAttributes. IsReadOnly , Name);
95+ emitCATTR (OS, ED->getName (), ED->getEDAttributes (). Rmode ,
96+ PRAttributes.Alignment , ED ->EDAttributes .LoadBehavior ,
97+ PRAttributes.Executable , PRAttributes. IsReadOnly ,
98+ PRAttributes.SortKey , Name);
13699 ED->Emitted = true ;
137100 Emitted = true ;
138101 } else
0 commit comments