================ @@ -239,6 +309,102 @@ class GOFFWriter { GOFFWriter::GOFFWriter(raw_pwrite_stream &OS, MCAssembler &Asm) : OS(OS), Asm(Asm) {} +GOFFSymbol GOFFWriter::createGOFFSymbol(StringRef Name, const GOFF::SDAttr &Attr) { + return GOFFSymbol(Name, ++EsdIdCounter, Attr); +} + +GOFFSymbol GOFFWriter::createGOFFSymbol(StringRef Name, const GOFF::EDAttr &Attr, + uint32_t ParentEsdId) { + return GOFFSymbol(Name, ++EsdIdCounter, ParentEsdId, Attr); +} + +GOFFSymbol GOFFWriter::createGOFFSymbol(StringRef Name, const GOFF::LDAttr &Attr, + uint32_t ParentEsdId) { + return GOFFSymbol(Name, ++EsdIdCounter, ParentEsdId, Attr); +} + +GOFFSymbol GOFFWriter::createGOFFSymbol(StringRef Name, const GOFF::PRAttr &Attr, + uint32_t ParentEsdId) { + return GOFFSymbol(Name, ++EsdIdCounter, ParentEsdId, Attr); +} + +void GOFFWriter::defineRootSymbol(const MCSectionGOFF *Text) { + // There is always a text section except for DWARF unit tests, so be lenient. + GOFFSymbol RootSD = + Text ? createGOFFSymbol(Text->getSDName(), Text->getSDAttributes()) + : createGOFFSymbol("", GOFF::SDAttr{GOFF::ESD_TA_Unspecified, + GOFF::ESD_BSC_Unspecified}); + writeSymbol(RootSD); + RootSDEsdId = RootSD.EsdId; +} + +void GOFFWriter::defineSectionSymbols(const MCSectionGOFF &Section) { + uint32_t SDEsdId = RootSDEsdId; + if (!Section.usesRootSD()) { + GOFFSymbol SD = + createGOFFSymbol(Section.getSDName(), Section.getSDAttributes()); + SDEsdId = SD.EsdId; + writeSymbol(SD); + } + + GOFFSymbol ED = createGOFFSymbol(Section.getEDName(), + Section.getEDAttributes(), SDEsdId); + if ((!Section.hasLD() && !Section.hasPR()) || Section.hasLD()) { + ED.SectionLength = Asm.getSectionAddressSize(Section); + } + writeSymbol(ED); + + if (Section.hasLD()) { + GOFFSymbol LD = createGOFFSymbol(Section.getLDorPRName(), + Section.getLDAttributes(), ED.EsdId); + if (Section.isText()) + LD.ADAEsdId = ADAEsdId; + writeSymbol(LD); + } + + if (Section.hasPR()) { + GOFFSymbol PR = createGOFFSymbol(Section.getLDorPRName(), + Section.getPRAttributes(), ED.EsdId); + PR.SectionLength = Asm.getSectionAddressSize(Section); + if (Section.getName() == ".ada") { ---------------- redstar wrote:
Yes, that does not work. https://github.com/llvm/llvm-project/pull/133799 _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits