[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