================
@@ -239,6 +298,63 @@ class GOFFWriter {
GOFFWriter::GOFFWriter(raw_pwrite_stream &OS, MCAssembler &Asm)
: OS(OS), Asm(Asm) {}
+void GOFFWriter::defineSectionSymbols(const MCSectionGOFF &Section) {
+ if (Section.isSD()) {
+ GOFFSymbol SD(Section.getName(), Section.getId(),
+ Section.getSDAttributes());
+ writeSymbol(SD);
+ }
+
+ if (Section.isED()) {
+ GOFFSymbol ED(Section.getName(), Section.getId(),
+ Section.getParent()->getId(), Section.getEDAttributes());
+ if (Section.requiresLength())
+ ED.SectionLength = Asm.getSectionAddressSize(Section);
+ writeSymbol(ED);
+ }
+
+ if (Section.isPR()) {
+ GOFFSymbol PR(Section.getName(), Section.getId(),
+ Section.getParent()->getId(), Section.getPRAttributes());
+ PR.SectionLength = Asm.getSectionAddressSize(Section);
+ if (Section.requiresNonZeroLength()) {
----------------
redstar wrote:
For this specific case I do not know what happens under the hood.
For an externally callable function, a function descriptor is generated in the
ADA by the _binder_. From the LLVM point of view, the ADA would still be empty.
The simple example is:
```
void empty() {}
```
Here, the ADA is empty. Still, the binder generates the function descriptor. A
caller of this function can use a function descriptor in its own compilation
unit:
```
DC R(empty)
DC V(empty)
```
I would expect that I get a binder error on `R(empty)` if no associated data
area was given for the code section. But I have not tried.
https://github.com/llvm/llvm-project/pull/133799
_______________________________________________
llvm-branch-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits