Skip to content

Commit c021892

Browse files
Chen Zhengyuxuanchen1997
authored andcommitted
[XCOFF] refactor the XCOFF BeginSymName handling
Summary: Fixes #96810 Test Plan: Reviewers: Subscribers: Tasks: Tags: Differential Revision: https://phabricator.intern.facebook.com/D60251231
1 parent 18c8afc commit c021892

File tree

8 files changed

+43
-47
lines changed

8 files changed

+43
-47
lines changed

llvm/include/llvm/MC/MCContext.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -643,7 +643,7 @@ class MCContext {
643643
MCSectionXCOFF *getXCOFFSection(
644644
StringRef Section, SectionKind K,
645645
std::optional<XCOFF::CsectProperties> CsectProp = std::nullopt,
646-
bool MultiSymbolsAllowed = false, const char *BeginSymName = nullptr,
646+
bool MultiSymbolsAllowed = false,
647647
std::optional<XCOFF::DwarfSectionSubtypeFlags> DwarfSubtypeFlags =
648648
std::nullopt);
649649

llvm/lib/MC/MCContext.cpp

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -795,7 +795,6 @@ bool MCContext::hasXCOFFSection(StringRef Section,
795795
MCSectionXCOFF *MCContext::getXCOFFSection(
796796
StringRef Section, SectionKind Kind,
797797
std::optional<XCOFF::CsectProperties> CsectProp, bool MultiSymbolsAllowed,
798-
const char *BeginSymName,
799798
std::optional<XCOFF::DwarfSectionSubtypeFlags> DwarfSectionSubtypeFlags) {
800799
bool IsDwarfSec = DwarfSectionSubtypeFlags.has_value();
801800
assert((IsDwarfSec != CsectProp.has_value()) && "Invalid XCOFF section!");
@@ -825,35 +824,29 @@ MCSectionXCOFF *MCContext::getXCOFFSection(
825824
CachedName + "[" +
826825
XCOFF::getMappingClassString(CsectProp->MappingClass) + "]"));
827826

828-
MCSymbol *Begin = nullptr;
829-
if (BeginSymName)
830-
Begin = createTempSymbol(BeginSymName, false);
831-
832827
// QualName->getUnqualifiedName() and CachedName are the same except when
833828
// CachedName contains invalid character(s) such as '$' for an XCOFF symbol.
834829
MCSectionXCOFF *Result = nullptr;
835830
if (IsDwarfSec)
836831
Result = new (XCOFFAllocator.Allocate()) MCSectionXCOFF(
837832
QualName->getUnqualifiedName(), Kind, QualName,
838-
*DwarfSectionSubtypeFlags, Begin, CachedName, MultiSymbolsAllowed);
833+
*DwarfSectionSubtypeFlags, QualName, CachedName, MultiSymbolsAllowed);
839834
else
840835
Result = new (XCOFFAllocator.Allocate())
841836
MCSectionXCOFF(QualName->getUnqualifiedName(), CsectProp->MappingClass,
842-
CsectProp->Type, Kind, QualName, Begin, CachedName,
837+
CsectProp->Type, Kind, QualName, nullptr, CachedName,
843838
MultiSymbolsAllowed);
844839

845840
Entry.second = Result;
846841

847842
auto *F = allocInitialFragment(*Result);
848-
if (Begin)
849-
Begin->setFragment(F);
850843

851844
// We might miss calculating the symbols difference as absolute value before
852845
// adding fixups when symbol_A without the fragment set is the csect itself
853846
// and symbol_B is in it.
854-
// TODO: Currently we only set the fragment for XMC_PR csects because we don't
855-
// have other cases that hit this problem yet.
856-
if (!IsDwarfSec && CsectProp->MappingClass == XCOFF::XMC_PR)
847+
// TODO: Currently we only set the fragment for XMC_PR csects and DWARF
848+
// sections because we don't have other cases that hit this problem yet.
849+
if (IsDwarfSec || CsectProp->MappingClass == XCOFF::XMC_PR)
857850
QualName->setFragment(F);
858851

859852
return Result;

llvm/lib/MC/MCObjectFileInfo.cpp

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -948,52 +948,52 @@ void MCObjectFileInfo::initXCOFFMCObjectFileInfo(const Triple &T) {
948948
DwarfAbbrevSection = Ctx->getXCOFFSection(
949949
".dwabrev", SectionKind::getMetadata(),
950950
/* CsectProperties */ std::nullopt,
951-
/* MultiSymbolsAllowed */ true, ".dwabrev", XCOFF::SSUBTYP_DWABREV);
951+
/* MultiSymbolsAllowed */ true, XCOFF::SSUBTYP_DWABREV);
952952

953953
DwarfInfoSection = Ctx->getXCOFFSection(
954954
".dwinfo", SectionKind::getMetadata(), /* CsectProperties */ std::nullopt,
955-
/* MultiSymbolsAllowed */ true, ".dwinfo", XCOFF::SSUBTYP_DWINFO);
955+
/* MultiSymbolsAllowed */ true, XCOFF::SSUBTYP_DWINFO);
956956

957957
DwarfLineSection = Ctx->getXCOFFSection(
958958
".dwline", SectionKind::getMetadata(), /* CsectProperties */ std::nullopt,
959-
/* MultiSymbolsAllowed */ true, ".dwline", XCOFF::SSUBTYP_DWLINE);
959+
/* MultiSymbolsAllowed */ true, XCOFF::SSUBTYP_DWLINE);
960960

961961
DwarfFrameSection = Ctx->getXCOFFSection(
962962
".dwframe", SectionKind::getMetadata(),
963963
/* CsectProperties */ std::nullopt,
964-
/* MultiSymbolsAllowed */ true, ".dwframe", XCOFF::SSUBTYP_DWFRAME);
964+
/* MultiSymbolsAllowed */ true, XCOFF::SSUBTYP_DWFRAME);
965965

966966
DwarfPubNamesSection = Ctx->getXCOFFSection(
967967
".dwpbnms", SectionKind::getMetadata(),
968968
/* CsectProperties */ std::nullopt,
969-
/* MultiSymbolsAllowed */ true, ".dwpbnms", XCOFF::SSUBTYP_DWPBNMS);
969+
/* MultiSymbolsAllowed */ true, XCOFF::SSUBTYP_DWPBNMS);
970970

971971
DwarfPubTypesSection = Ctx->getXCOFFSection(
972972
".dwpbtyp", SectionKind::getMetadata(),
973973
/* CsectProperties */ std::nullopt,
974-
/* MultiSymbolsAllowed */ true, ".dwpbtyp", XCOFF::SSUBTYP_DWPBTYP);
974+
/* MultiSymbolsAllowed */ true, XCOFF::SSUBTYP_DWPBTYP);
975975

976976
DwarfStrSection = Ctx->getXCOFFSection(
977977
".dwstr", SectionKind::getMetadata(), /* CsectProperties */ std::nullopt,
978-
/* MultiSymbolsAllowed */ true, ".dwstr", XCOFF::SSUBTYP_DWSTR);
978+
/* MultiSymbolsAllowed */ true, XCOFF::SSUBTYP_DWSTR);
979979

980980
DwarfLocSection = Ctx->getXCOFFSection(
981981
".dwloc", SectionKind::getMetadata(), /* CsectProperties */ std::nullopt,
982-
/* MultiSymbolsAllowed */ true, ".dwloc", XCOFF::SSUBTYP_DWLOC);
982+
/* MultiSymbolsAllowed */ true, XCOFF::SSUBTYP_DWLOC);
983983

984984
DwarfARangesSection = Ctx->getXCOFFSection(
985985
".dwarnge", SectionKind::getMetadata(),
986986
/* CsectProperties */ std::nullopt,
987-
/* MultiSymbolsAllowed */ true, ".dwarnge", XCOFF::SSUBTYP_DWARNGE);
987+
/* MultiSymbolsAllowed */ true, XCOFF::SSUBTYP_DWARNGE);
988988

989989
DwarfRangesSection = Ctx->getXCOFFSection(
990990
".dwrnges", SectionKind::getMetadata(),
991991
/* CsectProperties */ std::nullopt,
992-
/* MultiSymbolsAllowed */ true, ".dwrnges", XCOFF::SSUBTYP_DWRNGES);
992+
/* MultiSymbolsAllowed */ true, XCOFF::SSUBTYP_DWRNGES);
993993

994994
DwarfMacinfoSection = Ctx->getXCOFFSection(
995995
".dwmac", SectionKind::getMetadata(), /* CsectProperties */ std::nullopt,
996-
/* MultiSymbolsAllowed */ true, ".dwmac", XCOFF::SSUBTYP_DWMAC);
996+
/* MultiSymbolsAllowed */ true, XCOFF::SSUBTYP_DWMAC);
997997
}
998998

999999
void MCObjectFileInfo::initDXContainerObjectFileInfo(const Triple &T) {

llvm/lib/MC/MCSectionXCOFF.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ void MCSectionXCOFF::printSwitchToSection(const MCAsmInfo &MAI, const Triple &T,
124124
if (getKind().isMetadata() && isDwarfSect()) {
125125
OS << "\n\t.dwsect " << format("0x%" PRIx32, *getDwarfSubtypeFlags())
126126
<< '\n';
127-
OS << MAI.getPrivateLabelPrefix() << getName() << ':' << '\n';
127+
OS << getName() << ':' << '\n';
128128
return;
129129
}
130130

llvm/lib/MC/XCOFFObjectWriter.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -596,6 +596,9 @@ void XCOFFObjectWriter::executePostLayoutBinding(MCAssembler &Asm) {
596596
const MCSymbolXCOFF *XSym = cast<MCSymbolXCOFF>(&S);
597597
const MCSectionXCOFF *ContainingCsect = getContainingCsect(XSym);
598598

599+
if (ContainingCsect->isDwarfSect())
600+
continue;
601+
599602
if (XSym->getVisibilityType() != XCOFF::SYM_V_UNSPECIFIED)
600603
HasVisibility = true;
601604

llvm/test/DebugInfo/XCOFF/empty.ll

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ entry:
7979
; ASM32-NEXT: # -- End function
8080
; ASM32-NEXT: L..sec_end0:
8181
; ASM32: .dwsect 0x60000
82-
; ASM32-NEXT: L...dwabrev:
82+
; ASM32-NEXT: .dwabrev:
8383
; ASM32-NEXT: .byte 1 # Abbreviation Code
8484
; ASM32-NEXT: .byte 17 # DW_TAG_compile_unit
8585
; ASM32-NEXT: .byte 1 # DW_CHILDREN_yes
@@ -135,10 +135,10 @@ entry:
135135
; ASM32-NEXT: .byte 0 # EOM(2)
136136
; ASM32-NEXT: .byte 0 # EOM(3)
137137
; ASM32: .dwsect 0x10000
138-
; ASM32-NEXT: L...dwinfo:
138+
; ASM32-NEXT: .dwinfo:
139139
; ASM32-NEXT: L..cu_begin0:
140140
; ASM32-NEXT: .vbyte 2, 4 # DWARF version number
141-
; ASM32-NEXT: .vbyte 4, L...dwabrev # Offset Into Abbrev. Section
141+
; ASM32-NEXT: .vbyte 4, .dwabrev # Offset Into Abbrev. Section
142142
; ASM32-NEXT: .byte 4 # Address Size (in bytes)
143143
; ASM32-NEXT: .byte 1 # Abbrev [1] 0xb:0x38 DW_TAG_compile_unit
144144
; ASM32-NEXT: .vbyte 4, L..info_string0 # DW_AT_producer
@@ -166,7 +166,7 @@ entry:
166166
; ASM32-NEXT: .byte 0 # End Of Children Mark
167167
; ASM32-NEXT: L..debug_info_end0:
168168
; ASM32: .dwsect 0x70000
169-
; ASM32-NEXT: L...dwstr:
169+
; ASM32-NEXT: .dwstr:
170170
; ASM32-NEXT: L..info_string0:
171171
; ASM32-NEXT: .string "clang version 12.0.0" # string offset=0
172172
; ASM32-NEXT: L..info_string1:
@@ -179,7 +179,7 @@ entry:
179179
; ASM32-NEXT: .string "int" # string offset=36
180180
; ASM32-NEXT: .toc
181181
; ASM32: .dwsect 0x20000
182-
; ASM32-NEXT: L...dwline:
182+
; ASM32-NEXT: .dwline:
183183
; ASM32-NEXT: L..debug_line_0:
184184
; ASM32-NEXT: .set L..line_table_start0, L..debug_line_0-4
185185
; ASM32-NEXT: .vbyte 2, 4
@@ -281,7 +281,7 @@ entry:
281281
; ASM64-NEXT: # -- End function
282282
; ASM64-NEXT: L..sec_end0:
283283
; ASM64: .dwsect 0x60000
284-
; ASM64-NEXT: L...dwabrev:
284+
; ASM64-NEXT: .dwabrev:
285285
; ASM64-NEXT: .byte 1 # Abbreviation Code
286286
; ASM64-NEXT: .byte 17 # DW_TAG_compile_unit
287287
; ASM64-NEXT: .byte 1 # DW_CHILDREN_yes
@@ -337,10 +337,10 @@ entry:
337337
; ASM64-NEXT: .byte 0 # EOM(2)
338338
; ASM64-NEXT: .byte 0 # EOM(3)
339339
; ASM64: .dwsect 0x10000
340-
; ASM64-NEXT: L...dwinfo:
340+
; ASM64-NEXT: .dwinfo:
341341
; ASM64-NEXT: L..cu_begin0:
342342
; ASM64-NEXT: .vbyte 2, 4 # DWARF version number
343-
; ASM64-NEXT: .vbyte 8, L...dwabrev # Offset Into Abbrev. Section
343+
; ASM64-NEXT: .vbyte 8, .dwabrev # Offset Into Abbrev. Section
344344
; ASM64-NEXT: .byte 8 # Address Size (in bytes)
345345
; ASM64-NEXT: .byte 1 # Abbrev [1] 0x17:0x58 DW_TAG_compile_unit
346346
; ASM64-NEXT: .vbyte 8, L..info_string0 # DW_AT_producer
@@ -368,7 +368,7 @@ entry:
368368
; ASM64-NEXT: .byte 0 # End Of Children Mark
369369
; ASM64-NEXT: L..debug_info_end0:
370370
; ASM64: .dwsect 0x70000
371-
; ASM64-NEXT: L...dwstr:
371+
; ASM64-NEXT: .dwstr:
372372
; ASM64-NEXT: L..info_string0:
373373
; ASM64-NEXT: .string "clang version 12.0.0" # string offset=0
374374
; ASM64-NEXT: L..info_string1:
@@ -381,7 +381,7 @@ entry:
381381
; ASM64-NEXT: .string "int" # string offset=36
382382
; ASM64-NEXT: .toc
383383
; ASM64: .dwsect 0x20000
384-
; ASM64-NEXT: L...dwline:
384+
; ASM64-NEXT: .dwline:
385385
; ASM64-NEXT: L..debug_line_0:
386386
; ASM64-NEXT: .set L..line_table_start0, L..debug_line_0-12
387387
; ASM64-NEXT: .vbyte 2, 4

llvm/test/DebugInfo/XCOFF/explicit-section.ll

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ entry:
130130
; CHECK-NEXT: # -- End function
131131
; CHECK-NEXT: L..sec_end0:
132132
; CHECK: .dwsect 0x60000
133-
; CHECK-NEXT: L...dwabrev:
133+
; CHECK-NEXT: .dwabrev:
134134
; CHECK-NEXT: .byte 1 # Abbreviation Code
135135
; CHECK-NEXT: .byte 17 # DW_TAG_compile_unit
136136
; CHECK-NEXT: .byte 1 # DW_CHILDREN_yes
@@ -184,10 +184,10 @@ entry:
184184
; CHECK-NEXT: .byte 0 # EOM(2)
185185
; CHECK-NEXT: .byte 0 # EOM(3)
186186
; CHECK: .dwsect 0x10000
187-
; CHECK-NEXT: L...dwinfo:
187+
; CHECK-NEXT: .dwinfo:
188188
; CHECK-NEXT: L..cu_begin0:
189189
; CHECK-NEXT: .vbyte 2, 3 # DWARF version number
190-
; CHECK-NEXT: .vbyte 4, L...dwabrev # Offset Into Abbrev. Section
190+
; CHECK-NEXT: .vbyte 4, .dwabrev # Offset Into Abbrev. Section
191191
; CHECK-NEXT: .byte 4 # Address Size (in bytes)
192192
; CHECK-NEXT: .byte 1 # Abbrev [1] 0xb:0x4f DW_TAG_compile_unit
193193
; CHECK-NEXT: .vbyte 4, L..info_string0 # DW_AT_producer
@@ -224,7 +224,7 @@ entry:
224224
; CHECK-NEXT: .byte 0 # End Of Children Mark
225225
; CHECK-NEXT: L..debug_info_end0:
226226
; CHECK: .dwsect 0x80000
227-
; CHECK-NEXT: L...dwrnges:
227+
; CHECK-NEXT: .dwrnges:
228228
; CHECK-NEXT: L..debug_ranges0:
229229
; CHECK-NEXT: .vbyte 4, L..func_begin0
230230
; CHECK-NEXT: .vbyte 4, L..func_end0
@@ -233,7 +233,7 @@ entry:
233233
; CHECK-NEXT: .vbyte 4, 0
234234
; CHECK-NEXT: .vbyte 4, 0
235235
; CHECK: .dwsect 0x70000
236-
; CHECK-NEXT: L...dwstr:
236+
; CHECK-NEXT: .dwstr:
237237
; CHECK-NEXT: L..info_string0:
238238
; CHECK-NEXT: .string "clang version 13.0.0" # string offset=0
239239
; CHECK-NEXT: L..info_string1:
@@ -248,7 +248,7 @@ entry:
248248
; CHECK-NEXT: .string "main" # string offset=39
249249
; CHECK-NEXT: .toc
250250
; CHECK: .dwsect 0x20000
251-
; CHECK-NEXT: L...dwline:
251+
; CHECK-NEXT: .dwline:
252252
; CHECK-NEXT: L..debug_line_0:
253253
; CHECK-NEXT: .set L..line_table_start0, L..debug_line_0-4
254254
; CHECK-NEXT: .vbyte 2, 3

llvm/test/DebugInfo/XCOFF/function-sections.ll

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ entry:
112112
; CHECK-NEXT: # -- End function
113113
; CHECK-NEXT: L..sec_end0:
114114
; CHECK: .dwsect 0x60000
115-
; CHECK-NEXT: L...dwabrev:
115+
; CHECK-NEXT: .dwabrev:
116116
; CHECK-NEXT: .byte 1 # Abbreviation Code
117117
; CHECK-NEXT: .byte 17 # DW_TAG_compile_unit
118118
; CHECK-NEXT: .byte 1 # DW_CHILDREN_yes
@@ -168,10 +168,10 @@ entry:
168168
; CHECK-NEXT: .byte 0 # EOM(2)
169169
; CHECK-NEXT: .byte 0 # EOM(3)
170170
; CHECK: .dwsect 0x10000
171-
; CHECK-NEXT: L...dwinfo:
171+
; CHECK-NEXT: .dwinfo:
172172
; CHECK-NEXT: L..cu_begin0:
173173
; CHECK-NEXT: .vbyte 2, 3 # DWARF version number
174-
; CHECK-NEXT: .vbyte 4, L...dwabrev # Offset Into Abbrev. Section
174+
; CHECK-NEXT: .vbyte 4, .dwabrev # Offset Into Abbrev. Section
175175
; CHECK-NEXT: .byte 4 # Address Size (in bytes)
176176
; CHECK-NEXT: .byte 1 # Abbrev [1] 0xb:0x51 DW_TAG_compile_unit
177177
; CHECK-NEXT: .vbyte 4, L..info_string0 # DW_AT_producer
@@ -210,7 +210,7 @@ entry:
210210
; CHECK-NEXT: .byte 0 # End Of Children Mark
211211
; CHECK-NEXT: L..debug_info_end0:
212212
; CHECK: .dwsect 0x80000
213-
; CHECK-NEXT: L...dwrnges:
213+
; CHECK-NEXT: .dwrnges:
214214
; CHECK-NEXT: L..debug_ranges0:
215215
; CHECK-NEXT: .vbyte 4, L..func_begin0
216216
; CHECK-NEXT: .vbyte 4, L..func_end0
@@ -219,7 +219,7 @@ entry:
219219
; CHECK-NEXT: .vbyte 4, 0
220220
; CHECK-NEXT: .vbyte 4, 0
221221
; CHECK: .dwsect 0x70000
222-
; CHECK-NEXT: L...dwstr:
222+
; CHECK-NEXT: .dwstr:
223223
; CHECK-NEXT: L..info_string0:
224224
; CHECK-NEXT: .string "clang version 13.0.0" # string offset=0
225225
; CHECK-NEXT: L..info_string1:
@@ -234,7 +234,7 @@ entry:
234234
; CHECK-NEXT: .string "bar" # string offset=39
235235
; CHECK-NEXT: .toc
236236
; CHECK: .dwsect 0x20000
237-
; CHECK-NEXT: L...dwline:
237+
; CHECK-NEXT: .dwline:
238238
; CHECK-NEXT: L..debug_line_0:
239239
; CHECK-NEXT: .set L..line_table_start0, L..debug_line_0-4
240240
; CHECK-NEXT: .vbyte 2, 3

0 commit comments

Comments
 (0)