[llvm] [ObjectYAML][NFC] Finalize COFF symbol table offset in writeCOFF (PR #212671)

Haohai Wen via llvm-commits llvm-commits at lists.llvm.org
Fri Aug 7 06:38:22 PDT 2026


================
@@ -359,6 +326,34 @@ static uint32_t initializeOptionalHeader(COFFParser &CP, uint16_t Magic,
 }
 
 static bool writeCOFF(COFFParser &CP, ContiguousBlobAccumulator &CBA) {
+  // Calculate number of symbols.
+  CP.Obj.Header.NumberOfSymbols = 0;
+  for (std::vector<COFFYAML::Symbol>::iterator i = CP.Obj.Symbols.begin(),
+                                               e = CP.Obj.Symbols.end();
+       i != e; ++i) {
+    uint32_t NumberOfAuxSymbols = 0;
+    if (i->FunctionDefinition)
+      NumberOfAuxSymbols += 1;
+    if (i->bfAndefSymbol)
+      NumberOfAuxSymbols += 1;
+    if (i->WeakExternal)
+      NumberOfAuxSymbols += 1;
+    if (!i->File.empty())
+      NumberOfAuxSymbols +=
+          (i->File.size() + CP.getSymbolSize() - 1) / CP.getSymbolSize();
+    if (i->SectionDefinition)
+      NumberOfAuxSymbols += 1;
+    if (i->CLRToken)
+      NumberOfAuxSymbols += 1;
+    i->Header.NumberOfAuxSymbols = NumberOfAuxSymbols;
+    CP.Obj.Header.NumberOfSymbols += 1 + NumberOfAuxSymbols;
+  }
+
+  CP.Obj.Header.NumberOfSections = CP.Obj.Sections.size();
+
+  // Save field offsets for writing back their final values.
+  uint64_t PointerToSymbolTableOffset = 0;
----------------
HaohaiWen wrote:

Done

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


More information about the llvm-commits mailing list