[llvm] f138b33 - [XCOFF] refactor the XCOFF BeginSymName handling
Chen Zheng via llvm-commits
llvm-commits at lists.llvm.org
Mon Jul 22 02:16:28 PDT 2024
Author: Chen Zheng
Date: 2024-07-22T05:16:20-04:00
New Revision: f138b33ddd482fc68bc8622a150e279c1449fadf
URL: https://github.com/llvm/llvm-project/commit/f138b33ddd482fc68bc8622a150e279c1449fadf
DIFF: https://github.com/llvm/llvm-project/commit/f138b33ddd482fc68bc8622a150e279c1449fadf.diff
LOG: [XCOFF] refactor the XCOFF BeginSymName handling
Fixes #96810
Added:
Modified:
llvm/include/llvm/MC/MCContext.h
llvm/lib/MC/MCContext.cpp
llvm/lib/MC/MCObjectFileInfo.cpp
llvm/lib/MC/MCSectionXCOFF.cpp
llvm/lib/MC/XCOFFObjectWriter.cpp
llvm/test/DebugInfo/XCOFF/empty.ll
llvm/test/DebugInfo/XCOFF/explicit-section.ll
llvm/test/DebugInfo/XCOFF/function-sections.ll
Removed:
################################################################################
diff --git a/llvm/include/llvm/MC/MCContext.h b/llvm/include/llvm/MC/MCContext.h
index 73fe6361cb866..4c2be7353cdd6 100644
--- a/llvm/include/llvm/MC/MCContext.h
+++ b/llvm/include/llvm/MC/MCContext.h
@@ -643,7 +643,7 @@ class MCContext {
MCSectionXCOFF *getXCOFFSection(
StringRef Section, SectionKind K,
std::optional<XCOFF::CsectProperties> CsectProp = std::nullopt,
- bool MultiSymbolsAllowed = false, const char *BeginSymName = nullptr,
+ bool MultiSymbolsAllowed = false,
std::optional<XCOFF::DwarfSectionSubtypeFlags> DwarfSubtypeFlags =
std::nullopt);
diff --git a/llvm/lib/MC/MCContext.cpp b/llvm/lib/MC/MCContext.cpp
index 2fe8369016440..44853f3bf43f3 100644
--- a/llvm/lib/MC/MCContext.cpp
+++ b/llvm/lib/MC/MCContext.cpp
@@ -795,7 +795,6 @@ bool MCContext::hasXCOFFSection(StringRef Section,
MCSectionXCOFF *MCContext::getXCOFFSection(
StringRef Section, SectionKind Kind,
std::optional<XCOFF::CsectProperties> CsectProp, bool MultiSymbolsAllowed,
- const char *BeginSymName,
std::optional<XCOFF::DwarfSectionSubtypeFlags> DwarfSectionSubtypeFlags) {
bool IsDwarfSec = DwarfSectionSubtypeFlags.has_value();
assert((IsDwarfSec != CsectProp.has_value()) && "Invalid XCOFF section!");
@@ -825,35 +824,29 @@ MCSectionXCOFF *MCContext::getXCOFFSection(
CachedName + "[" +
XCOFF::getMappingClassString(CsectProp->MappingClass) + "]"));
- MCSymbol *Begin = nullptr;
- if (BeginSymName)
- Begin = createTempSymbol(BeginSymName, false);
-
// QualName->getUnqualifiedName() and CachedName are the same except when
// CachedName contains invalid character(s) such as '$' for an XCOFF symbol.
MCSectionXCOFF *Result = nullptr;
if (IsDwarfSec)
Result = new (XCOFFAllocator.Allocate()) MCSectionXCOFF(
QualName->getUnqualifiedName(), Kind, QualName,
- *DwarfSectionSubtypeFlags, Begin, CachedName, MultiSymbolsAllowed);
+ *DwarfSectionSubtypeFlags, QualName, CachedName, MultiSymbolsAllowed);
else
Result = new (XCOFFAllocator.Allocate())
MCSectionXCOFF(QualName->getUnqualifiedName(), CsectProp->MappingClass,
- CsectProp->Type, Kind, QualName, Begin, CachedName,
+ CsectProp->Type, Kind, QualName, nullptr, CachedName,
MultiSymbolsAllowed);
Entry.second = Result;
auto *F = allocInitialFragment(*Result);
- if (Begin)
- Begin->setFragment(F);
// We might miss calculating the symbols
diff erence as absolute value before
// adding fixups when symbol_A without the fragment set is the csect itself
// and symbol_B is in it.
- // TODO: Currently we only set the fragment for XMC_PR csects because we don't
- // have other cases that hit this problem yet.
- if (!IsDwarfSec && CsectProp->MappingClass == XCOFF::XMC_PR)
+ // TODO: Currently we only set the fragment for XMC_PR csects and DWARF
+ // sections because we don't have other cases that hit this problem yet.
+ if (IsDwarfSec || CsectProp->MappingClass == XCOFF::XMC_PR)
QualName->setFragment(F);
return Result;
diff --git a/llvm/lib/MC/MCObjectFileInfo.cpp b/llvm/lib/MC/MCObjectFileInfo.cpp
index 7a2b43a954b10..6dadd9752646f 100644
--- a/llvm/lib/MC/MCObjectFileInfo.cpp
+++ b/llvm/lib/MC/MCObjectFileInfo.cpp
@@ -948,52 +948,52 @@ void MCObjectFileInfo::initXCOFFMCObjectFileInfo(const Triple &T) {
DwarfAbbrevSection = Ctx->getXCOFFSection(
".dwabrev", SectionKind::getMetadata(),
/* CsectProperties */ std::nullopt,
- /* MultiSymbolsAllowed */ true, ".dwabrev", XCOFF::SSUBTYP_DWABREV);
+ /* MultiSymbolsAllowed */ true, XCOFF::SSUBTYP_DWABREV);
DwarfInfoSection = Ctx->getXCOFFSection(
".dwinfo", SectionKind::getMetadata(), /* CsectProperties */ std::nullopt,
- /* MultiSymbolsAllowed */ true, ".dwinfo", XCOFF::SSUBTYP_DWINFO);
+ /* MultiSymbolsAllowed */ true, XCOFF::SSUBTYP_DWINFO);
DwarfLineSection = Ctx->getXCOFFSection(
".dwline", SectionKind::getMetadata(), /* CsectProperties */ std::nullopt,
- /* MultiSymbolsAllowed */ true, ".dwline", XCOFF::SSUBTYP_DWLINE);
+ /* MultiSymbolsAllowed */ true, XCOFF::SSUBTYP_DWLINE);
DwarfFrameSection = Ctx->getXCOFFSection(
".dwframe", SectionKind::getMetadata(),
/* CsectProperties */ std::nullopt,
- /* MultiSymbolsAllowed */ true, ".dwframe", XCOFF::SSUBTYP_DWFRAME);
+ /* MultiSymbolsAllowed */ true, XCOFF::SSUBTYP_DWFRAME);
DwarfPubNamesSection = Ctx->getXCOFFSection(
".dwpbnms", SectionKind::getMetadata(),
/* CsectProperties */ std::nullopt,
- /* MultiSymbolsAllowed */ true, ".dwpbnms", XCOFF::SSUBTYP_DWPBNMS);
+ /* MultiSymbolsAllowed */ true, XCOFF::SSUBTYP_DWPBNMS);
DwarfPubTypesSection = Ctx->getXCOFFSection(
".dwpbtyp", SectionKind::getMetadata(),
/* CsectProperties */ std::nullopt,
- /* MultiSymbolsAllowed */ true, ".dwpbtyp", XCOFF::SSUBTYP_DWPBTYP);
+ /* MultiSymbolsAllowed */ true, XCOFF::SSUBTYP_DWPBTYP);
DwarfStrSection = Ctx->getXCOFFSection(
".dwstr", SectionKind::getMetadata(), /* CsectProperties */ std::nullopt,
- /* MultiSymbolsAllowed */ true, ".dwstr", XCOFF::SSUBTYP_DWSTR);
+ /* MultiSymbolsAllowed */ true, XCOFF::SSUBTYP_DWSTR);
DwarfLocSection = Ctx->getXCOFFSection(
".dwloc", SectionKind::getMetadata(), /* CsectProperties */ std::nullopt,
- /* MultiSymbolsAllowed */ true, ".dwloc", XCOFF::SSUBTYP_DWLOC);
+ /* MultiSymbolsAllowed */ true, XCOFF::SSUBTYP_DWLOC);
DwarfARangesSection = Ctx->getXCOFFSection(
".dwarnge", SectionKind::getMetadata(),
/* CsectProperties */ std::nullopt,
- /* MultiSymbolsAllowed */ true, ".dwarnge", XCOFF::SSUBTYP_DWARNGE);
+ /* MultiSymbolsAllowed */ true, XCOFF::SSUBTYP_DWARNGE);
DwarfRangesSection = Ctx->getXCOFFSection(
".dwrnges", SectionKind::getMetadata(),
/* CsectProperties */ std::nullopt,
- /* MultiSymbolsAllowed */ true, ".dwrnges", XCOFF::SSUBTYP_DWRNGES);
+ /* MultiSymbolsAllowed */ true, XCOFF::SSUBTYP_DWRNGES);
DwarfMacinfoSection = Ctx->getXCOFFSection(
".dwmac", SectionKind::getMetadata(), /* CsectProperties */ std::nullopt,
- /* MultiSymbolsAllowed */ true, ".dwmac", XCOFF::SSUBTYP_DWMAC);
+ /* MultiSymbolsAllowed */ true, XCOFF::SSUBTYP_DWMAC);
}
void MCObjectFileInfo::initDXContainerObjectFileInfo(const Triple &T) {
diff --git a/llvm/lib/MC/MCSectionXCOFF.cpp b/llvm/lib/MC/MCSectionXCOFF.cpp
index 00ca5d2067d58..41043b2aeb93f 100644
--- a/llvm/lib/MC/MCSectionXCOFF.cpp
+++ b/llvm/lib/MC/MCSectionXCOFF.cpp
@@ -124,7 +124,7 @@ void MCSectionXCOFF::printSwitchToSection(const MCAsmInfo &MAI, const Triple &T,
if (getKind().isMetadata() && isDwarfSect()) {
OS << "\n\t.dwsect " << format("0x%" PRIx32, *getDwarfSubtypeFlags())
<< '\n';
- OS << MAI.getPrivateLabelPrefix() << getName() << ':' << '\n';
+ OS << getName() << ':' << '\n';
return;
}
diff --git a/llvm/lib/MC/XCOFFObjectWriter.cpp b/llvm/lib/MC/XCOFFObjectWriter.cpp
index ba9894f18b000..c6eb537d1d546 100644
--- a/llvm/lib/MC/XCOFFObjectWriter.cpp
+++ b/llvm/lib/MC/XCOFFObjectWriter.cpp
@@ -596,6 +596,9 @@ void XCOFFObjectWriter::executePostLayoutBinding(MCAssembler &Asm) {
const MCSymbolXCOFF *XSym = cast<MCSymbolXCOFF>(&S);
const MCSectionXCOFF *ContainingCsect = getContainingCsect(XSym);
+ if (ContainingCsect->isDwarfSect())
+ continue;
+
if (XSym->getVisibilityType() != XCOFF::SYM_V_UNSPECIFIED)
HasVisibility = true;
diff --git a/llvm/test/DebugInfo/XCOFF/empty.ll b/llvm/test/DebugInfo/XCOFF/empty.ll
index c1393907169fc..445e1a63447ef 100644
--- a/llvm/test/DebugInfo/XCOFF/empty.ll
+++ b/llvm/test/DebugInfo/XCOFF/empty.ll
@@ -79,7 +79,7 @@ entry:
; ASM32-NEXT: # -- End function
; ASM32-NEXT: L..sec_end0:
; ASM32: .dwsect 0x60000
-; ASM32-NEXT: L...dwabrev:
+; ASM32-NEXT: .dwabrev:
; ASM32-NEXT: .byte 1 # Abbreviation Code
; ASM32-NEXT: .byte 17 # DW_TAG_compile_unit
; ASM32-NEXT: .byte 1 # DW_CHILDREN_yes
@@ -135,10 +135,10 @@ entry:
; ASM32-NEXT: .byte 0 # EOM(2)
; ASM32-NEXT: .byte 0 # EOM(3)
; ASM32: .dwsect 0x10000
-; ASM32-NEXT: L...dwinfo:
+; ASM32-NEXT: .dwinfo:
; ASM32-NEXT: L..cu_begin0:
; ASM32-NEXT: .vbyte 2, 4 # DWARF version number
-; ASM32-NEXT: .vbyte 4, L...dwabrev # Offset Into Abbrev. Section
+; ASM32-NEXT: .vbyte 4, .dwabrev # Offset Into Abbrev. Section
; ASM32-NEXT: .byte 4 # Address Size (in bytes)
; ASM32-NEXT: .byte 1 # Abbrev [1] 0xb:0x38 DW_TAG_compile_unit
; ASM32-NEXT: .vbyte 4, L..info_string0 # DW_AT_producer
@@ -166,7 +166,7 @@ entry:
; ASM32-NEXT: .byte 0 # End Of Children Mark
; ASM32-NEXT: L..debug_info_end0:
; ASM32: .dwsect 0x70000
-; ASM32-NEXT: L...dwstr:
+; ASM32-NEXT: .dwstr:
; ASM32-NEXT: L..info_string0:
; ASM32-NEXT: .string "clang version 12.0.0" # string offset=0
; ASM32-NEXT: L..info_string1:
@@ -179,7 +179,7 @@ entry:
; ASM32-NEXT: .string "int" # string offset=36
; ASM32-NEXT: .toc
; ASM32: .dwsect 0x20000
-; ASM32-NEXT: L...dwline:
+; ASM32-NEXT: .dwline:
; ASM32-NEXT: L..debug_line_0:
; ASM32-NEXT: .set L..line_table_start0, L..debug_line_0-4
; ASM32-NEXT: .vbyte 2, 4
@@ -281,7 +281,7 @@ entry:
; ASM64-NEXT: # -- End function
; ASM64-NEXT: L..sec_end0:
; ASM64: .dwsect 0x60000
-; ASM64-NEXT: L...dwabrev:
+; ASM64-NEXT: .dwabrev:
; ASM64-NEXT: .byte 1 # Abbreviation Code
; ASM64-NEXT: .byte 17 # DW_TAG_compile_unit
; ASM64-NEXT: .byte 1 # DW_CHILDREN_yes
@@ -337,10 +337,10 @@ entry:
; ASM64-NEXT: .byte 0 # EOM(2)
; ASM64-NEXT: .byte 0 # EOM(3)
; ASM64: .dwsect 0x10000
-; ASM64-NEXT: L...dwinfo:
+; ASM64-NEXT: .dwinfo:
; ASM64-NEXT: L..cu_begin0:
; ASM64-NEXT: .vbyte 2, 4 # DWARF version number
-; ASM64-NEXT: .vbyte 8, L...dwabrev # Offset Into Abbrev. Section
+; ASM64-NEXT: .vbyte 8, .dwabrev # Offset Into Abbrev. Section
; ASM64-NEXT: .byte 8 # Address Size (in bytes)
; ASM64-NEXT: .byte 1 # Abbrev [1] 0x17:0x58 DW_TAG_compile_unit
; ASM64-NEXT: .vbyte 8, L..info_string0 # DW_AT_producer
@@ -368,7 +368,7 @@ entry:
; ASM64-NEXT: .byte 0 # End Of Children Mark
; ASM64-NEXT: L..debug_info_end0:
; ASM64: .dwsect 0x70000
-; ASM64-NEXT: L...dwstr:
+; ASM64-NEXT: .dwstr:
; ASM64-NEXT: L..info_string0:
; ASM64-NEXT: .string "clang version 12.0.0" # string offset=0
; ASM64-NEXT: L..info_string1:
@@ -381,7 +381,7 @@ entry:
; ASM64-NEXT: .string "int" # string offset=36
; ASM64-NEXT: .toc
; ASM64: .dwsect 0x20000
-; ASM64-NEXT: L...dwline:
+; ASM64-NEXT: .dwline:
; ASM64-NEXT: L..debug_line_0:
; ASM64-NEXT: .set L..line_table_start0, L..debug_line_0-12
; ASM64-NEXT: .vbyte 2, 4
diff --git a/llvm/test/DebugInfo/XCOFF/explicit-section.ll b/llvm/test/DebugInfo/XCOFF/explicit-section.ll
index ed2ffb709168e..530267ec634fc 100644
--- a/llvm/test/DebugInfo/XCOFF/explicit-section.ll
+++ b/llvm/test/DebugInfo/XCOFF/explicit-section.ll
@@ -130,7 +130,7 @@ entry:
; CHECK-NEXT: # -- End function
; CHECK-NEXT: L..sec_end0:
; CHECK: .dwsect 0x60000
-; CHECK-NEXT: L...dwabrev:
+; CHECK-NEXT: .dwabrev:
; CHECK-NEXT: .byte 1 # Abbreviation Code
; CHECK-NEXT: .byte 17 # DW_TAG_compile_unit
; CHECK-NEXT: .byte 1 # DW_CHILDREN_yes
@@ -184,10 +184,10 @@ entry:
; CHECK-NEXT: .byte 0 # EOM(2)
; CHECK-NEXT: .byte 0 # EOM(3)
; CHECK: .dwsect 0x10000
-; CHECK-NEXT: L...dwinfo:
+; CHECK-NEXT: .dwinfo:
; CHECK-NEXT: L..cu_begin0:
; CHECK-NEXT: .vbyte 2, 3 # DWARF version number
-; CHECK-NEXT: .vbyte 4, L...dwabrev # Offset Into Abbrev. Section
+; CHECK-NEXT: .vbyte 4, .dwabrev # Offset Into Abbrev. Section
; CHECK-NEXT: .byte 4 # Address Size (in bytes)
; CHECK-NEXT: .byte 1 # Abbrev [1] 0xb:0x4f DW_TAG_compile_unit
; CHECK-NEXT: .vbyte 4, L..info_string0 # DW_AT_producer
@@ -224,7 +224,7 @@ entry:
; CHECK-NEXT: .byte 0 # End Of Children Mark
; CHECK-NEXT: L..debug_info_end0:
; CHECK: .dwsect 0x80000
-; CHECK-NEXT: L...dwrnges:
+; CHECK-NEXT: .dwrnges:
; CHECK-NEXT: L..debug_ranges0:
; CHECK-NEXT: .vbyte 4, L..func_begin0
; CHECK-NEXT: .vbyte 4, L..func_end0
@@ -233,7 +233,7 @@ entry:
; CHECK-NEXT: .vbyte 4, 0
; CHECK-NEXT: .vbyte 4, 0
; CHECK: .dwsect 0x70000
-; CHECK-NEXT: L...dwstr:
+; CHECK-NEXT: .dwstr:
; CHECK-NEXT: L..info_string0:
; CHECK-NEXT: .string "clang version 13.0.0" # string offset=0
; CHECK-NEXT: L..info_string1:
@@ -248,7 +248,7 @@ entry:
; CHECK-NEXT: .string "main" # string offset=39
; CHECK-NEXT: .toc
; CHECK: .dwsect 0x20000
-; CHECK-NEXT: L...dwline:
+; CHECK-NEXT: .dwline:
; CHECK-NEXT: L..debug_line_0:
; CHECK-NEXT: .set L..line_table_start0, L..debug_line_0-4
; CHECK-NEXT: .vbyte 2, 3
diff --git a/llvm/test/DebugInfo/XCOFF/function-sections.ll b/llvm/test/DebugInfo/XCOFF/function-sections.ll
index c899089102c64..5103b66db114d 100644
--- a/llvm/test/DebugInfo/XCOFF/function-sections.ll
+++ b/llvm/test/DebugInfo/XCOFF/function-sections.ll
@@ -112,7 +112,7 @@ entry:
; CHECK-NEXT: # -- End function
; CHECK-NEXT: L..sec_end0:
; CHECK: .dwsect 0x60000
-; CHECK-NEXT: L...dwabrev:
+; CHECK-NEXT: .dwabrev:
; CHECK-NEXT: .byte 1 # Abbreviation Code
; CHECK-NEXT: .byte 17 # DW_TAG_compile_unit
; CHECK-NEXT: .byte 1 # DW_CHILDREN_yes
@@ -168,10 +168,10 @@ entry:
; CHECK-NEXT: .byte 0 # EOM(2)
; CHECK-NEXT: .byte 0 # EOM(3)
; CHECK: .dwsect 0x10000
-; CHECK-NEXT: L...dwinfo:
+; CHECK-NEXT: .dwinfo:
; CHECK-NEXT: L..cu_begin0:
; CHECK-NEXT: .vbyte 2, 3 # DWARF version number
-; CHECK-NEXT: .vbyte 4, L...dwabrev # Offset Into Abbrev. Section
+; CHECK-NEXT: .vbyte 4, .dwabrev # Offset Into Abbrev. Section
; CHECK-NEXT: .byte 4 # Address Size (in bytes)
; CHECK-NEXT: .byte 1 # Abbrev [1] 0xb:0x51 DW_TAG_compile_unit
; CHECK-NEXT: .vbyte 4, L..info_string0 # DW_AT_producer
@@ -210,7 +210,7 @@ entry:
; CHECK-NEXT: .byte 0 # End Of Children Mark
; CHECK-NEXT: L..debug_info_end0:
; CHECK: .dwsect 0x80000
-; CHECK-NEXT: L...dwrnges:
+; CHECK-NEXT: .dwrnges:
; CHECK-NEXT: L..debug_ranges0:
; CHECK-NEXT: .vbyte 4, L..func_begin0
; CHECK-NEXT: .vbyte 4, L..func_end0
@@ -219,7 +219,7 @@ entry:
; CHECK-NEXT: .vbyte 4, 0
; CHECK-NEXT: .vbyte 4, 0
; CHECK: .dwsect 0x70000
-; CHECK-NEXT: L...dwstr:
+; CHECK-NEXT: .dwstr:
; CHECK-NEXT: L..info_string0:
; CHECK-NEXT: .string "clang version 13.0.0" # string offset=0
; CHECK-NEXT: L..info_string1:
@@ -234,7 +234,7 @@ entry:
; CHECK-NEXT: .string "bar" # string offset=39
; CHECK-NEXT: .toc
; CHECK: .dwsect 0x20000
-; CHECK-NEXT: L...dwline:
+; CHECK-NEXT: .dwline:
; CHECK-NEXT: L..debug_line_0:
; CHECK-NEXT: .set L..line_table_start0, L..debug_line_0-4
; CHECK-NEXT: .vbyte 2, 3
More information about the llvm-commits
mailing list