[llvm] [GOFF] Emit symbols for functions. (PR #144437)
Fangrui Song via llvm-commits
llvm-commits at lists.llvm.org
Wed Nov 19 22:48:34 PST 2025
================
@@ -37,6 +55,82 @@ void MCGOFFStreamer::changeSection(MCSection *Section, uint32_t Subsection) {
}
}
+void MCGOFFStreamer::emitLabel(MCSymbol *Symbol, SMLoc Loc) {
+ MCObjectStreamer::emitLabel(Symbol, Loc);
+ static_cast<MCSymbolGOFF *>(Symbol)->initAttributes();
+}
+
+bool MCGOFFStreamer::emitSymbolAttribute(MCSymbol *Sym,
+ MCSymbolAttr Attribute) {
+ auto *Symbol = static_cast<MCSymbolGOFF *>(Sym);
+ switch (Attribute) {
+ case MCSA_Invalid:
+ case MCSA_Cold:
+ case MCSA_ELF_TypeIndFunction:
+ case MCSA_ELF_TypeTLS:
+ case MCSA_ELF_TypeCommon:
+ case MCSA_ELF_TypeNoType:
+ case MCSA_ELF_TypeGnuUniqueObject:
+ case MCSA_LGlobal:
+ case MCSA_Extern:
+ case MCSA_Exported:
+ case MCSA_IndirectSymbol:
+ case MCSA_Internal:
+ case MCSA_LazyReference:
+ case MCSA_NoDeadStrip:
+ case MCSA_SymbolResolver:
+ case MCSA_AltEntry:
+ case MCSA_PrivateExtern:
+ case MCSA_Protected:
+ case MCSA_Reference:
+ case MCSA_WeakDefinition:
+ case MCSA_WeakDefAutoPrivate:
+ case MCSA_WeakAntiDep:
+ case MCSA_Memtag:
+ return false;
+
+ case MCSA_ELF_TypeFunction:
+ Symbol->setCodeData(GOFF::ESDExecutable::ESD_EXE_CODE);
+ break;
+ case MCSA_ELF_TypeObject:
+ Symbol->setCodeData(GOFF::ESDExecutable::ESD_EXE_DATA);
+ break;
+ case MCSA_OSLinkage:
+ Symbol->setLinkage(GOFF::ESDLinkageType::ESD_LT_OS);
+ break;
+ case MCSA_XPLinkage:
+ Symbol->setLinkage(GOFF::ESDLinkageType::ESD_LT_XPLink);
+ break;
+ case MCSA_Global:
+ Symbol->setExternal(true);
+ break;
+ case MCSA_Local:
+ Symbol->setExternal(false);
+ break;
+ case MCSA_Weak:
+ case MCSA_WeakReference:
----------------
MaskRay wrote:
MCSA_WeakReference is used by AsmPrinter::emitGlobalAlias - ensure that GOFF has such a test.
https://github.com/llvm/llvm-project/pull/144437
More information about the llvm-commits
mailing list