[llvm] [llvm-objcopy][COFF] Update WinCFGuard section contents after stripping (PR #153322)
Evgenii Kudriashov via llvm-commits
llvm-commits at lists.llvm.org
Wed Aug 13 15:55:09 PDT 2025
================
@@ -92,6 +93,63 @@ Error COFFWriter::finalizeSymbolContents() {
return Error::success();
}
+Error COFFWriter::finalizeCFGuardContents() {
+ DenseMap<size_t, size_t> SymIdMap;
+ bool NeedUpdate = false;
+ for (Symbol &Sym : Obj.getMutableSymbols()) {
+ NeedUpdate |= Sym.OriginalRawIndex == Sym.RawIndex;
+ SymIdMap[Sym.OriginalRawIndex] = Sym.RawIndex;
+ }
+
+ if (!NeedUpdate)
+ return Error::success();
+
+ for (auto &Sym : Obj.getMutableSymbols()) {
+ if (Sym.Name != ".gljmp$y" && Sym.Name != ".giats$y" &&
+ Sym.Name != ".gfids$y")
+ continue;
+
+ auto Sec = find_if(Obj.getMutableSections(),
+ [&Sym](Section &S) { return S.Name == Sym.Name; });
----------------
e-kud wrote:
It was my first version, then I found that I can use `findSymbol` using a section. But then I realized it returns `const`. So, this is how I came up with the backward version. What if we build a `StringMap` from Symbol name to `coff_aux_section_definition` while collecting id mapping (basically three entries at max). Then we can iterate through sections and we know where `Checksum` should be written.
https://github.com/llvm/llvm-project/pull/153322
More information about the llvm-commits
mailing list