[lld] [llvm] [MC, COFF] Change how we handle section symbols (PR #96459)

Fangrui Song via llvm-commits llvm-commits at lists.llvm.org
Mon Jun 24 16:55:13 PDT 2024


================
@@ -322,27 +323,16 @@ static uint32_t getAlignment(const MCSectionCOFF &Sec) {
 void WinCOFFWriter::defineSection(const MCSectionCOFF &MCSec,
                                   const MCAsmLayout &Layout) {
   COFFSection *Section = createSection(MCSec.getName());
-  COFFSymbol *Symbol = createSymbol(MCSec.getName());
-  Section->Symbol = Symbol;
-  Symbol->Section = Section;
-  Symbol->Data.StorageClass = COFF::IMAGE_SYM_CLASS_STATIC;
-
-  // Create a COMDAT symbol if needed.
+  // Check whether the COMDAT symbol has been reused.
   if (MCSec.getSelection() != COFF::IMAGE_COMDAT_SELECT_ASSOCIATIVE) {
     if (const MCSymbol *S = MCSec.getCOMDATSymbol()) {
-      COFFSymbol *COMDATSymbol = GetOrCreateCOFFSymbol(S);
-      if (COMDATSymbol->Section)
-        report_fatal_error("two sections have the same comdat");
-      COMDATSymbol->Section = Section;
+      if (!ComdatSymSet.insert(S->getName()).second)
----------------
MaskRay wrote:

I largely keep WinCOFFObjectWriter.cpp unchanged in the update.

`report_fatal_error` is kept for now, but can be moved to MCContext.cpp as a follow-up by making the symbol redefinable.

https://github.com/llvm/llvm-project/pull/96459


More information about the llvm-commits mailing list