[llvm] [llvm-objcopy][COFF] Update WinCFGuard section contents after stripping (PR #153322)

Evgenii Kudriashov via llvm-commits llvm-commits at lists.llvm.org
Sun Aug 17 13:31:08 PDT 2025


https://github.com/e-kud updated https://github.com/llvm/llvm-project/pull/153322

>From b302bd9732d5bc62d9dd59bead180a5c30973a1c Mon Sep 17 00:00:00 2001
From: Evgenii Kudriashov <evgenii.kudriashov at intel.com>
Date: Tue, 12 Aug 2025 17:38:14 -0700
Subject: [PATCH 1/7] [objcopy][COFF] Update WinCFGuard section contents after
 stripping

After deleting debug sections symbol indexes are shifted but WinCFGuard
sections encode these indices into section data that is completely
ignored. Update symbol indices as well.
---
 llvm/lib/ObjCopy/COFF/COFFObject.cpp          |   3 +
 llvm/lib/ObjCopy/COFF/COFFObject.h            |   1 +
 llvm/lib/ObjCopy/COFF/COFFWriter.cpp          |  60 +++++
 llvm/lib/ObjCopy/COFF/COFFWriter.h            |   1 +
 .../COFF/strip-update-winguards.test          | 237 ++++++++++++++++++
 5 files changed, 302 insertions(+)
 create mode 100644 llvm/test/tools/llvm-objcopy/COFF/strip-update-winguards.test

diff --git a/llvm/lib/ObjCopy/COFF/COFFObject.cpp b/llvm/lib/ObjCopy/COFF/COFFObject.cpp
index 5fa13391c908f..fcb1bbfe91332 100644
--- a/llvm/lib/ObjCopy/COFF/COFFObject.cpp
+++ b/llvm/lib/ObjCopy/COFF/COFFObject.cpp
@@ -16,8 +16,11 @@ namespace coff {
 using namespace object;
 
 void Object::addSymbols(ArrayRef<Symbol> NewSymbols) {
+  size_t RawIndex = 0;
   for (Symbol S : NewSymbols) {
     S.UniqueId = NextSymbolUniqueId++;
+    S.OriginalRawIndex = RawIndex;
+    RawIndex += 1 + S.Sym.NumberOfAuxSymbols;
     Symbols.emplace_back(S);
   }
   updateSymbols();
diff --git a/llvm/lib/ObjCopy/COFF/COFFObject.h b/llvm/lib/ObjCopy/COFF/COFFObject.h
index cdd1f17fc6055..9f88d45962513 100644
--- a/llvm/lib/ObjCopy/COFF/COFFObject.h
+++ b/llvm/lib/ObjCopy/COFF/COFFObject.h
@@ -89,6 +89,7 @@ struct Symbol {
   std::optional<size_t> WeakTargetSymbolId;
   size_t UniqueId;
   size_t RawIndex;
+  size_t OriginalRawIndex;
   bool Referenced;
 };
 
diff --git a/llvm/lib/ObjCopy/COFF/COFFWriter.cpp b/llvm/lib/ObjCopy/COFF/COFFWriter.cpp
index 350c4aec572c9..4e3aa8201f0dc 100644
--- a/llvm/lib/ObjCopy/COFF/COFFWriter.cpp
+++ b/llvm/lib/ObjCopy/COFF/COFFWriter.cpp
@@ -12,6 +12,7 @@
 #include "llvm/ADT/StringRef.h"
 #include "llvm/BinaryFormat/COFF.h"
 #include "llvm/Object/COFF.h"
+#include "llvm/Support/CRC.h"
 #include "llvm/Support/Errc.h"
 #include "llvm/Support/ErrorHandling.h"
 #include <cstddef>
@@ -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; });
+
+    if (Sec == Obj.getMutableSections().end() ||
+        Sec->UniqueId != Sym.TargetSectionId)
+      return createStringError(object_error::invalid_symbol_index,
+                               "symbol '%s' is missing its section",
+                               Sym.Name.str().c_str());
+
+    if (Sym.Sym.NumberOfAuxSymbols != 1 ||
+        Sym.Sym.StorageClass != IMAGE_SYM_CLASS_STATIC)
+      return createStringError(object_error::invalid_symbol_index,
+                               "symbol '%s' has unexpected section format",
+                               Sym.Name.str().c_str());
+
+    ArrayRef<uint8_t> RawIds = Sec->getContents();
+    // Nothing to do and also CheckSum will be -1 instead of 0 if we recalculate
+    // it on empty input.
+    if (RawIds.size() == 0)
+      return Error::success();
+
+    // Create updated content
+    ArrayRef<uint32_t> Ids(reinterpret_cast<const uint32_t *>(RawIds.data()),
+                           RawIds.size() / 4);
+    std::vector<uint32_t> NewIds;
+    for (auto Id : Ids)
+      NewIds.push_back(SymIdMap[Id]);
+    ArrayRef<uint8_t> NewRawIds(reinterpret_cast<uint8_t *>(NewIds.data()),
+                                RawIds.size());
+    // Update check sum
+    JamCRC JC(/*Init=*/0);
+    JC.update(NewRawIds);
+    coff_aux_section_definition *SD =
+        reinterpret_cast<coff_aux_section_definition *>(Sym.AuxData[0].Opaque);
+    SD->CheckSum = JC.getCRC();
+    // Set new content
+    Sec->setOwnedContents(NewRawIds);
+  }
+  return Error::success();
+}
+
 void COFFWriter::layoutSections() {
   for (auto &S : Obj.getMutableSections()) {
     if (S.Header.SizeOfRawData > 0)
@@ -183,6 +241,8 @@ Error COFFWriter::finalize(bool IsBigObj) {
     return E;
   if (Error E = finalizeSymbolContents())
     return E;
+  if (Error E = finalizeCFGuardContents())
+    return E;
 
   size_t SizeOfHeaders = 0;
   FileAlignment = 1;
diff --git a/llvm/lib/ObjCopy/COFF/COFFWriter.h b/llvm/lib/ObjCopy/COFF/COFFWriter.h
index b7dca69e9a81a..557dbe4c01b9c 100644
--- a/llvm/lib/ObjCopy/COFF/COFFWriter.h
+++ b/llvm/lib/ObjCopy/COFF/COFFWriter.h
@@ -34,6 +34,7 @@ class COFFWriter {
   template <class SymbolTy> std::pair<size_t, size_t> finalizeSymbolTable();
   Error finalizeRelocTargets();
   Error finalizeSymbolContents();
+  Error finalizeCFGuardContents();
   void layoutSections();
   Expected<size_t> finalizeStringTable();
 
diff --git a/llvm/test/tools/llvm-objcopy/COFF/strip-update-winguards.test b/llvm/test/tools/llvm-objcopy/COFF/strip-update-winguards.test
new file mode 100644
index 0000000000000..4dc1a821dbd6a
--- /dev/null
+++ b/llvm/test/tools/llvm-objcopy/COFF/strip-update-winguards.test
@@ -0,0 +1,237 @@
+# RUN: yaml2obj %s -o %t.in.o
+
+# RUN: llvm-readobj -r -s  -x '.gfids$y' -x '.giats$y' -x '.gljmp$y' %t.in.o | FileCheck %s --check-prefix=ORIG
+# RUN: llvm-objcopy --strip-debug %t.in.o %t.out.o
+# RUN: llvm-readobj -r -s  -x '.gfids$y' -x '.giats$y' -x '.gljmp$y' %t.out.o | FileCheck %s --check-prefix=STRIP
+
+# ORIG:      Relocations [
+# ORIG-NEXT:   Section (1) .text {
+# ORIG-NEXT:     0x3 IMAGE_REL_AMD64_REL32 foo (14)
+# ORIG-NEXT:     0xA IMAGE_REL_AMD64_REL32 bar (15)
+# ORIG-NEXT:     0x11 IMAGE_REL_AMD64_REL32 baz (16)
+# ORIG-NEXT:     0x18 IMAGE_REL_AMD64_REL32 foobar (17)
+# ORIG-NEXT:   }
+# ORIG-NEXT: ]
+# ORIG:      Symbols [
+# ORIG:          Name: .gfids$y
+# ORIG:          Section: .gfids$y
+# ORIG:          AuxSymbolCount: 1
+# ORIG:          AuxSectionDef {
+# ORIG:            Checksum: 0x459345AD
+# ORIG:          }
+# ORIG:          Name: .giats$y
+# ORIG:          Section: .giats$y
+# ORIG:          AuxSymbolCount: 1
+# ORIG:          AuxSectionDef {
+# ORIG:            Checksum: 0x31852256
+# ORIG:          }
+# ORIG:          Name: .gljmp$y
+# ORIG:          Section: .gljmp$y
+# ORIG:          AuxSymbolCount: 1
+# ORIG:          AuxSectionDef {
+# ORIG:            Checksum: 0xC608680B
+# ORIG:          }
+# ORIG:      ]
+# ORIG:      Hex dump of section '.gfids$y':
+# ORIG-NEXT: 0x00000000 0e000000 10000000                   ........
+# ORIG:      Hex dump of section '.giats$y':
+# ORIG-NEXT: 0x00000000 0f000000 11000000                   ........
+# ORIG:      Hex dump of section '.gljmp$y':
+# ORIG-NEXT: 0x00000000 0e000000 0f000000 10000000 11000000 ................
+
+# STRIP:      Relocations [
+# STRIP-NEXT:   Section (1) .text {
+# STRIP-NEXT:     0x3 IMAGE_REL_AMD64_REL32 foo (12)
+# STRIP-NEXT:     0xA IMAGE_REL_AMD64_REL32 bar (13)
+# STRIP-NEXT:     0x11 IMAGE_REL_AMD64_REL32 baz (14)
+# STRIP-NEXT:     0x18 IMAGE_REL_AMD64_REL32 foobar (15)
+# STRIP-NEXT:   }
+# STRIP-NEXT: ]
+# STRIP:      Symbols [
+# STRIP:          Name: .gfids$y
+# STRIP:          Section: .gfids$y
+# STRIP:          AuxSymbolCount: 1
+# STRIP:          AuxSectionDef {
+# STRIP:            Checksum: 0xB770627C
+# STRIP:          }
+# STRIP:          Name: .giats$y
+# STRIP:          Section: .giats$y
+# STRIP:          AuxSymbolCount: 1
+# STRIP:          AuxSectionDef {
+# STRIP:            Checksum: 0xC3660587
+# STRIP:          }
+# STRIP:          Name: .gljmp$y
+# STRIP:          Section: .gljmp$y
+# STRIP:          AuxSymbolCount: 1
+# STRIP:          AuxSectionDef {
+# STRIP:            Checksum: 0x7464D042
+# STRIP:          }
+# STRIP:      ]
+# STRIP:      Hex dump of section '.gfids$y':
+# STRIP-NEXT: 0x00000000 0c000000 0e000000                   ........
+# STRIP:      Hex dump of section '.giats$y':
+# STRIP-NEXT: 0x00000000 0d000000 0f000000                   ........
+# STRIP:      Hex dump of section '.gljmp$y':
+# STRIP-NEXT: 0x00000000 0c000000 0d000000 0e000000 0f000000 ................
+
+--- !COFF
+header:
+  Machine:         IMAGE_FILE_MACHINE_AMD64
+  Characteristics: [  ]
+sections:
+  - Name:            .text
+    Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
+    Alignment:       4
+    SectionData:     488D0500000000488D0D00000000488D0500000000488D0500000000
+    SizeOfRawData:   28
+    Relocations:
+      - VirtualAddress:  3
+        SymbolName:      foo
+        Type:            IMAGE_REL_AMD64_REL32
+      - VirtualAddress:  10
+        SymbolName:      bar
+        Type:            IMAGE_REL_AMD64_REL32
+      - VirtualAddress:  17
+        SymbolName:      baz
+        Type:            IMAGE_REL_AMD64_REL32
+      - VirtualAddress:  24
+        SymbolName:      foobar
+        Type:            IMAGE_REL_AMD64_REL32
+  - Name:            .data
+    Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
+    Alignment:       4
+    SectionData:     ''
+  - Name:            .bss
+    Characteristics: [ IMAGE_SCN_CNT_UNINITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
+    Alignment:       4
+    SectionData:     ''
+  - Name:            '.debug$S'
+    Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_DISCARDABLE, IMAGE_SCN_MEM_READ ]
+    Alignment:       4
+    SectionData:     04000000F100000044656275672073656374696F6E20746F20626520737472697070656400
+    SizeOfRawData:   37
+  - Name:            '.gfids$y'
+    Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ ]
+    Alignment:       4
+    SectionData:     '0E00000010000000'
+    SizeOfRawData:   8
+  - Name:            '.giats$y'
+    Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ ]
+    Alignment:       4
+    SectionData:     0F00000011000000
+    SizeOfRawData:   8
+  - Name:            '.gljmp$y'
+    Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ ]
+    Alignment:       4
+    SectionData:     0E0000000F0000001000000011000000
+    SizeOfRawData:   16
+symbols:
+  - Name:            .text
+    Value:           0
+    SectionNumber:   1
+    SimpleType:      IMAGE_SYM_TYPE_NULL
+    ComplexType:     IMAGE_SYM_DTYPE_NULL
+    StorageClass:    IMAGE_SYM_CLASS_STATIC
+    SectionDefinition:
+      Length:          28
+      NumberOfRelocations: 4
+      NumberOfLinenumbers: 0
+      CheckSum:        3583480811
+      Number:          1
+  - Name:            .data
+    Value:           0
+    SectionNumber:   2
+    SimpleType:      IMAGE_SYM_TYPE_NULL
+    ComplexType:     IMAGE_SYM_DTYPE_NULL
+    StorageClass:    IMAGE_SYM_CLASS_STATIC
+    SectionDefinition:
+      Length:          0
+      NumberOfRelocations: 0
+      NumberOfLinenumbers: 0
+      CheckSum:        0
+      Number:          2
+  - Name:            .bss
+    Value:           0
+    SectionNumber:   3
+    SimpleType:      IMAGE_SYM_TYPE_NULL
+    ComplexType:     IMAGE_SYM_DTYPE_NULL
+    StorageClass:    IMAGE_SYM_CLASS_STATIC
+    SectionDefinition:
+      Length:          0
+      NumberOfRelocations: 0
+      NumberOfLinenumbers: 0
+      CheckSum:        0
+      Number:          3
+  - Name:            '.debug$S'
+    Value:           0
+    SectionNumber:   4
+    SimpleType:      IMAGE_SYM_TYPE_NULL
+    ComplexType:     IMAGE_SYM_DTYPE_NULL
+    StorageClass:    IMAGE_SYM_CLASS_STATIC
+    SectionDefinition:
+      Length:          37
+      NumberOfRelocations: 0
+      NumberOfLinenumbers: 0
+      CheckSum:        2941632545
+      Number:          4
+  - Name:            '.gfids$y'
+    Value:           0
+    SectionNumber:   5
+    SimpleType:      IMAGE_SYM_TYPE_NULL
+    ComplexType:     IMAGE_SYM_DTYPE_NULL
+    StorageClass:    IMAGE_SYM_CLASS_STATIC
+    SectionDefinition:
+      Length:          8
+      NumberOfRelocations: 0
+      NumberOfLinenumbers: 0
+      CheckSum:        1167279533
+      Number:          5
+  - Name:            '.giats$y'
+    Value:           0
+    SectionNumber:   6
+    SimpleType:      IMAGE_SYM_TYPE_NULL
+    ComplexType:     IMAGE_SYM_DTYPE_NULL
+    StorageClass:    IMAGE_SYM_CLASS_STATIC
+    SectionDefinition:
+      Length:          8
+      NumberOfRelocations: 0
+      NumberOfLinenumbers: 0
+      CheckSum:        830808662
+      Number:          6
+  - Name:            '.gljmp$y'
+    Value:           0
+    SectionNumber:   7
+    SimpleType:      IMAGE_SYM_TYPE_NULL
+    ComplexType:     IMAGE_SYM_DTYPE_NULL
+    StorageClass:    IMAGE_SYM_CLASS_STATIC
+    SectionDefinition:
+      Length:          16
+      NumberOfRelocations: 0
+      NumberOfLinenumbers: 0
+      CheckSum:        3322439691
+      Number:          7
+  - Name:            foo
+    Value:           0
+    SectionNumber:   0
+    SimpleType:      IMAGE_SYM_TYPE_NULL
+    ComplexType:     IMAGE_SYM_DTYPE_NULL
+    StorageClass:    IMAGE_SYM_CLASS_EXTERNAL
+  - Name:            bar
+    Value:           0
+    SectionNumber:   0
+    SimpleType:      IMAGE_SYM_TYPE_NULL
+    ComplexType:     IMAGE_SYM_DTYPE_NULL
+    StorageClass:    IMAGE_SYM_CLASS_EXTERNAL
+  - Name:            baz
+    Value:           0
+    SectionNumber:   0
+    SimpleType:      IMAGE_SYM_TYPE_NULL
+    ComplexType:     IMAGE_SYM_DTYPE_NULL
+    StorageClass:    IMAGE_SYM_CLASS_EXTERNAL
+  - Name:            foobar
+    Value:           0
+    SectionNumber:   0
+    SimpleType:      IMAGE_SYM_TYPE_NULL
+    ComplexType:     IMAGE_SYM_DTYPE_NULL
+    StorageClass:    IMAGE_SYM_CLASS_EXTERNAL
+...

>From 42350aab8066c231e612f0a54d91c2f563e2d225 Mon Sep 17 00:00:00 2001
From: Evgenii Kudriashov <evgenii.kudriashov at intel.com>
Date: Wed, 13 Aug 2025 15:02:02 -0700
Subject: [PATCH 2/7] ulittle32_t, skip for PE and continue instead of return

---
 llvm/lib/ObjCopy/COFF/COFFWriter.cpp | 17 +++++++++++------
 1 file changed, 11 insertions(+), 6 deletions(-)

diff --git a/llvm/lib/ObjCopy/COFF/COFFWriter.cpp b/llvm/lib/ObjCopy/COFF/COFFWriter.cpp
index 4e3aa8201f0dc..e5f47ad1f2d5b 100644
--- a/llvm/lib/ObjCopy/COFF/COFFWriter.cpp
+++ b/llvm/lib/ObjCopy/COFF/COFFWriter.cpp
@@ -14,6 +14,7 @@
 #include "llvm/Object/COFF.h"
 #include "llvm/Support/CRC.h"
 #include "llvm/Support/Errc.h"
+#include "llvm/Support/Endian.h"
 #include "llvm/Support/ErrorHandling.h"
 #include <cstddef>
 #include <cstdint>
@@ -94,9 +95,13 @@ Error COFFWriter::finalizeSymbolContents() {
 }
 
 Error COFFWriter::finalizeCFGuardContents() {
+  // CFGuards shouldn't be present in PE
+  if (Obj.IsPE)
+    return Error::success();
+
   DenseMap<size_t, size_t> SymIdMap;
   bool NeedUpdate = false;
-  for (Symbol &Sym : Obj.getMutableSymbols()) {
+  for (const auto &Sym : Obj.getSymbols()) {
     NeedUpdate |= Sym.OriginalRawIndex == Sym.RawIndex;
     SymIdMap[Sym.OriginalRawIndex] = Sym.RawIndex;
   }
@@ -128,14 +133,14 @@ Error COFFWriter::finalizeCFGuardContents() {
     // Nothing to do and also CheckSum will be -1 instead of 0 if we recalculate
     // it on empty input.
     if (RawIds.size() == 0)
-      return Error::success();
+      continue;
 
     // Create updated content
-    ArrayRef<uint32_t> Ids(reinterpret_cast<const uint32_t *>(RawIds.data()),
-                           RawIds.size() / 4);
-    std::vector<uint32_t> NewIds;
+    ArrayRef<support::ulittle32_t> Ids(reinterpret_cast<const support::ulittle32_t *>(RawIds.data()),
+                              RawIds.size() / 4);
+    std::vector<support::ulittle32_t> NewIds;
     for (auto Id : Ids)
-      NewIds.push_back(SymIdMap[Id]);
+      NewIds.push_back(support::ulittle32_t(SymIdMap[Id]));
     ArrayRef<uint8_t> NewRawIds(reinterpret_cast<uint8_t *>(NewIds.data()),
                                 RawIds.size());
     // Update check sum

>From 8acb7f457653801739c8d85ec0a43e92df3c3f1c Mon Sep 17 00:00:00 2001
From: Evgenii Kudriashov <evgenii.kudriashov at intel.com>
Date: Wed, 13 Aug 2025 15:21:44 -0700
Subject: [PATCH 3/7] Format: forgotten ammend

---
 llvm/lib/ObjCopy/COFF/COFFWriter.cpp | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/llvm/lib/ObjCopy/COFF/COFFWriter.cpp b/llvm/lib/ObjCopy/COFF/COFFWriter.cpp
index e5f47ad1f2d5b..ea803cba561e0 100644
--- a/llvm/lib/ObjCopy/COFF/COFFWriter.cpp
+++ b/llvm/lib/ObjCopy/COFF/COFFWriter.cpp
@@ -13,8 +13,8 @@
 #include "llvm/BinaryFormat/COFF.h"
 #include "llvm/Object/COFF.h"
 #include "llvm/Support/CRC.h"
-#include "llvm/Support/Errc.h"
 #include "llvm/Support/Endian.h"
+#include "llvm/Support/Errc.h"
 #include "llvm/Support/ErrorHandling.h"
 #include <cstddef>
 #include <cstdint>
@@ -136,8 +136,9 @@ Error COFFWriter::finalizeCFGuardContents() {
       continue;
 
     // Create updated content
-    ArrayRef<support::ulittle32_t> Ids(reinterpret_cast<const support::ulittle32_t *>(RawIds.data()),
-                              RawIds.size() / 4);
+    ArrayRef<support::ulittle32_t> Ids(
+        reinterpret_cast<const support::ulittle32_t *>(RawIds.data()),
+        RawIds.size() / 4);
     std::vector<support::ulittle32_t> NewIds;
     for (auto Id : Ids)
       NewIds.push_back(support::ulittle32_t(SymIdMap[Id]));
@@ -150,7 +151,7 @@ Error COFFWriter::finalizeCFGuardContents() {
         reinterpret_cast<coff_aux_section_definition *>(Sym.AuxData[0].Opaque);
     SD->CheckSum = JC.getCRC();
     // Set new content
-    Sec->setOwnedContents(NewRawIds);
+    Sec->setOwnedContents(NewRawIds.vec());
   }
   return Error::success();
 }

>From 2264108578abbfa5470f347ab8ce613ebf1a4c5d Mon Sep 17 00:00:00 2001
From: Evgenii Kudriashov <evgenii.kudriashov at intel.com>
Date: Fri, 15 Aug 2025 15:18:58 -0700
Subject: [PATCH 4/7] Iterate in more natural way

---
 llvm/lib/ObjCopy/COFF/COFFWriter.cpp | 52 +++++++++++++++-------------
 1 file changed, 27 insertions(+), 25 deletions(-)

diff --git a/llvm/lib/ObjCopy/COFF/COFFWriter.cpp b/llvm/lib/ObjCopy/COFF/COFFWriter.cpp
index ea803cba561e0..892eb9116cee1 100644
--- a/llvm/lib/ObjCopy/COFF/COFFWriter.cpp
+++ b/llvm/lib/ObjCopy/COFF/COFFWriter.cpp
@@ -99,59 +99,61 @@ Error COFFWriter::finalizeCFGuardContents() {
   if (Obj.IsPE)
     return Error::success();
 
+  auto IsSymIdxSection = [](StringRef Name) {
+    return Name == ".gljmp$y" || Name == ".giats$y" || Name == ".gfids$y";
+  };
+
   DenseMap<size_t, size_t> SymIdMap;
+  SmallDenseMap<ssize_t, coff_aux_section_definition *, 4> SecIdMap;
   bool NeedUpdate = false;
-  for (const auto &Sym : Obj.getSymbols()) {
+  for (auto &Sym : Obj.getMutableSymbols()) {
     NeedUpdate |= Sym.OriginalRawIndex == Sym.RawIndex;
     SymIdMap[Sym.OriginalRawIndex] = Sym.RawIndex;
+
+    // We collect only definition symbols of the sections to update checksum
+    if (Sym.Sym.NumberOfAuxSymbols == 1 &&
+        Sym.Sym.StorageClass == IMAGE_SYM_CLASS_STATIC && Sym.Sym.Value == 0 &&
+        IsSymIdxSection(Sym.Name))
+      SecIdMap[Sym.TargetSectionId] =
+          reinterpret_cast<coff_aux_section_definition *>(
+              Sym.AuxData[0].Opaque);
   }
 
   if (!NeedUpdate)
     return Error::success();
 
-  for (auto &Sym : Obj.getMutableSymbols()) {
-    if (Sym.Name != ".gljmp$y" && Sym.Name != ".giats$y" &&
-        Sym.Name != ".gfids$y")
+  for (auto &Sec : Obj.getMutableSections()) {
+    if (!IsSymIdxSection(Sec.Name))
       continue;
 
-    auto Sec = find_if(Obj.getMutableSections(),
-                       [&Sym](Section &S) { return S.Name == Sym.Name; });
-
-    if (Sec == Obj.getMutableSections().end() ||
-        Sec->UniqueId != Sym.TargetSectionId)
-      return createStringError(object_error::invalid_symbol_index,
-                               "symbol '%s' is missing its section",
-                               Sym.Name.str().c_str());
-
-    if (Sym.Sym.NumberOfAuxSymbols != 1 ||
-        Sym.Sym.StorageClass != IMAGE_SYM_CLASS_STATIC)
-      return createStringError(object_error::invalid_symbol_index,
-                               "symbol '%s' has unexpected section format",
-                               Sym.Name.str().c_str());
-
-    ArrayRef<uint8_t> RawIds = Sec->getContents();
+    ArrayRef<uint8_t> RawIds = Sec.getContents();
     // Nothing to do and also CheckSum will be -1 instead of 0 if we recalculate
     // it on empty input.
     if (RawIds.size() == 0)
       continue;
 
+    if (!SecIdMap.contains(Sec.UniqueId))
+      return createStringError(object_error::invalid_symbol_index,
+                               "section '%s' does not have the corresponding "
+                               "symbol or the symbol has unexpected format",
+                               Sec.Name.str().c_str());
+
     // Create updated content
     ArrayRef<support::ulittle32_t> Ids(
         reinterpret_cast<const support::ulittle32_t *>(RawIds.data()),
         RawIds.size() / 4);
     std::vector<support::ulittle32_t> NewIds;
-    for (auto Id : Ids)
+    for (auto Id : Ids) {
       NewIds.push_back(support::ulittle32_t(SymIdMap[Id]));
+    }
     ArrayRef<uint8_t> NewRawIds(reinterpret_cast<uint8_t *>(NewIds.data()),
                                 RawIds.size());
     // Update check sum
     JamCRC JC(/*Init=*/0);
     JC.update(NewRawIds);
-    coff_aux_section_definition *SD =
-        reinterpret_cast<coff_aux_section_definition *>(Sym.AuxData[0].Opaque);
-    SD->CheckSum = JC.getCRC();
+    SecIdMap[Sec.UniqueId]->CheckSum = JC.getCRC();
     // Set new content
-    Sec->setOwnedContents(NewRawIds.vec());
+    Sec.setOwnedContents(NewRawIds.vec());
   }
   return Error::success();
 }

>From 874c9cc896bc592c352f43649a46c78f3a6ab4fc Mon Sep 17 00:00:00 2001
From: Evgenii Kudriashov <evgenii.kudriashov at intel.com>
Date: Fri, 15 Aug 2025 16:13:32 -0700
Subject: [PATCH 5/7] Handle illegal symidx

---
 llvm/lib/ObjCopy/COFF/COFFWriter.cpp          |   5 +
 .../COFF/strip-wrong-winguards.test           | 140 ++++++++++++++++++
 2 files changed, 145 insertions(+)
 create mode 100644 llvm/test/tools/llvm-objcopy/COFF/strip-wrong-winguards.test

diff --git a/llvm/lib/ObjCopy/COFF/COFFWriter.cpp b/llvm/lib/ObjCopy/COFF/COFFWriter.cpp
index 892eb9116cee1..844d22c6a082b 100644
--- a/llvm/lib/ObjCopy/COFF/COFFWriter.cpp
+++ b/llvm/lib/ObjCopy/COFF/COFFWriter.cpp
@@ -144,6 +144,11 @@ Error COFFWriter::finalizeCFGuardContents() {
         RawIds.size() / 4);
     std::vector<support::ulittle32_t> NewIds;
     for (auto Id : Ids) {
+      if (!SymIdMap.contains(Id))
+        return createStringError(object_error::invalid_symbol_index,
+                                 "section '%s' contains a .symidx (%d) that is "
+                                 "incorrect or was stripped",
+                                 Sec.Name.str().c_str(), Id.value());
       NewIds.push_back(support::ulittle32_t(SymIdMap[Id]));
     }
     ArrayRef<uint8_t> NewRawIds(reinterpret_cast<uint8_t *>(NewIds.data()),
diff --git a/llvm/test/tools/llvm-objcopy/COFF/strip-wrong-winguards.test b/llvm/test/tools/llvm-objcopy/COFF/strip-wrong-winguards.test
new file mode 100644
index 0000000000000..d58cfb4bf8c41
--- /dev/null
+++ b/llvm/test/tools/llvm-objcopy/COFF/strip-wrong-winguards.test
@@ -0,0 +1,140 @@
+# RUN: yaml2obj %s -o %t.in.o
+# RUN: llvm-readobj -r -s  -x '.gfids$y' -x '.giats$y' -x '.gljmp$y' %t.in.o | FileCheck %s --check-prefix=ORIG
+# RUN: not llvm-objcopy --strip-debug %t.in.o %t.out.o 2>&1 | FileCheck %s --check-prefix=ERROR
+
+# ORIG:      Relocations [
+# ORIG-NEXT:   Section (1) .text {
+# ORIG-NEXT:     0x3 IMAGE_REL_AMD64_REL32 foo (10)
+# ORIG-NEXT:   }
+# ORIG-NEXT: ]
+# ORIG:      Symbols [
+# ORIG:          Name: .gfids$y
+# ORIG:          Section: .gfids$y
+# ORIG:          AuxSymbolCount: 1
+# ORIG:          AuxSectionDef {
+# ORIG:            Checksum: 0x459345AD
+# ORIG:          }
+# ORIG:          Name: .giats$y
+# ORIG:          Section: .giats$y
+# ORIG:          AuxSymbolCount: 1
+# ORIG:          AuxSectionDef {
+# ORIG:            Checksum: 0x0
+# ORIG:          }
+# ORIG:          Name: .gljmp$y
+# ORIG:          Section: .gljmp$y
+# ORIG:          AuxSymbolCount: 1
+# ORIG:          AuxSectionDef {
+# ORIG:            Checksum: 0x0
+# ORIG:          }
+# ORIG:      ]
+# ORIG:      Hex dump of section '.gfids$y':
+# ORIG-NEXT: 0x00000000 0a000000 10000000                   ........
+# ORIG:      Hex dump of section '.giats$y':
+# ORIG-EMPTY-NEXT:
+# ORIG:      Hex dump of section '.gljmp$y':
+# ORIG-EMPTY-NEXT:
+
+# ERROR: section '.gfids$y' contains a .symidx (16) that is incorrect or was stripped
+
+--- !COFF
+header:
+  Machine:         IMAGE_FILE_MACHINE_AMD64
+  Characteristics: [  ]
+sections:
+  - Name:            .text
+    Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
+    Alignment:       4
+    SectionData:     488D0500000000488D0D00000000488D0500000000488D0500000000
+    SizeOfRawData:   28
+    Relocations:
+      - VirtualAddress:  3
+        SymbolName:      foo
+        Type:            IMAGE_REL_AMD64_REL32
+  - Name:            '.debug$S'
+    Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_DISCARDABLE, IMAGE_SCN_MEM_READ ]
+    Alignment:       4
+    SectionData:     04000000F100000044656275672073656374696F6E20746F20626520737472697070656400
+    SizeOfRawData:   37
+  - Name:            '.gfids$y'
+    Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ ]
+    Alignment:       4
+    SectionData:     '0A00000010000000'
+    SizeOfRawData:   8
+  - Name:            '.giats$y'
+    Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ ]
+    Alignment:       4
+    SectionData:     ''
+    SizeOfRawData:   0
+  - Name:            '.gljmp$y'
+    Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ ]
+    Alignment:       4
+    SectionData:     ''
+    SizeOfRawData:   0
+symbols:
+  - Name:            .text
+    Value:           0
+    SectionNumber:   1
+    SimpleType:      IMAGE_SYM_TYPE_NULL
+    ComplexType:     IMAGE_SYM_DTYPE_NULL
+    StorageClass:    IMAGE_SYM_CLASS_STATIC
+    SectionDefinition:
+      Length:          28
+      NumberOfRelocations: 4
+      NumberOfLinenumbers: 0
+      CheckSum:        3583480811
+      Number:          1
+  - Name:            '.debug$S'
+    Value:           0
+    SectionNumber:   2
+    SimpleType:      IMAGE_SYM_TYPE_NULL
+    ComplexType:     IMAGE_SYM_DTYPE_NULL
+    StorageClass:    IMAGE_SYM_CLASS_STATIC
+    SectionDefinition:
+      Length:          37
+      NumberOfRelocations: 0
+      NumberOfLinenumbers: 0
+      CheckSum:        2941632545
+      Number:          4
+  - Name:            '.gfids$y'
+    Value:           0
+    SectionNumber:   3
+    SimpleType:      IMAGE_SYM_TYPE_NULL
+    ComplexType:     IMAGE_SYM_DTYPE_NULL
+    StorageClass:    IMAGE_SYM_CLASS_STATIC
+    SectionDefinition:
+      Length:          8
+      NumberOfRelocations: 0
+      NumberOfLinenumbers: 0
+      CheckSum:        1167279533
+      Number:          5
+  - Name:            '.giats$y'
+    Value:           0
+    SectionNumber:   4
+    SimpleType:      IMAGE_SYM_TYPE_NULL
+    ComplexType:     IMAGE_SYM_DTYPE_NULL
+    StorageClass:    IMAGE_SYM_CLASS_STATIC
+    SectionDefinition:
+      Length:          0
+      NumberOfRelocations: 0
+      NumberOfLinenumbers: 0
+      CheckSum:        0
+      Number:          6
+  - Name:            '.gljmp$y'
+    Value:           0
+    SectionNumber:   5
+    SimpleType:      IMAGE_SYM_TYPE_NULL
+    ComplexType:     IMAGE_SYM_DTYPE_NULL
+    StorageClass:    IMAGE_SYM_CLASS_STATIC
+    SectionDefinition:
+      Length:          0
+      NumberOfRelocations: 0
+      NumberOfLinenumbers: 0
+      CheckSum:        0
+      Number:          7
+  - Name:            foo
+    Value:           0
+    SectionNumber:   0
+    SimpleType:      IMAGE_SYM_TYPE_NULL
+    ComplexType:     IMAGE_SYM_DTYPE_NULL
+    StorageClass:    IMAGE_SYM_CLASS_EXTERNAL
+...

>From 4e80fb8b5880bc983698114ddb4dad992ea5fc77 Mon Sep 17 00:00:00 2001
From: Evgenii Kudriashov <evgenii.kudriashov at intel.com>
Date: Fri, 15 Aug 2025 17:43:24 -0700
Subject: [PATCH 6/7] Support .gehcont as well

---
 llvm/lib/ObjCopy/COFF/COFFWriter.cpp          |  10 +-
 llvm/lib/ObjCopy/COFF/COFFWriter.h            |   2 +-
 .../COFF/strip-update-ehcont.test             | 388 ++++++++++++++++++
 3 files changed, 396 insertions(+), 4 deletions(-)
 create mode 100644 llvm/test/tools/llvm-objcopy/COFF/strip-update-ehcont.test

diff --git a/llvm/lib/ObjCopy/COFF/COFFWriter.cpp b/llvm/lib/ObjCopy/COFF/COFFWriter.cpp
index 844d22c6a082b..3be5ac2f2d305 100644
--- a/llvm/lib/ObjCopy/COFF/COFFWriter.cpp
+++ b/llvm/lib/ObjCopy/COFF/COFFWriter.cpp
@@ -94,13 +94,17 @@ Error COFFWriter::finalizeSymbolContents() {
   return Error::success();
 }
 
-Error COFFWriter::finalizeCFGuardContents() {
+Error COFFWriter::finalizeSymIdxContents() {
   // CFGuards shouldn't be present in PE
   if (Obj.IsPE)
     return Error::success();
 
+  // Currently handle only sections consisting only of .symidx.
+  // TODO: other sections such as .impcall and .hybmp$x require more complex
+  // handling as they have more complex layout.
   auto IsSymIdxSection = [](StringRef Name) {
-    return Name == ".gljmp$y" || Name == ".giats$y" || Name == ".gfids$y";
+    return Name == ".gljmp$y" || Name == ".giats$y" || Name == ".gfids$y" ||
+           Name == ".gehcont$y";
   };
 
   DenseMap<size_t, size_t> SymIdMap;
@@ -254,7 +258,7 @@ Error COFFWriter::finalize(bool IsBigObj) {
     return E;
   if (Error E = finalizeSymbolContents())
     return E;
-  if (Error E = finalizeCFGuardContents())
+  if (Error E = finalizeSymIdxContents())
     return E;
 
   size_t SizeOfHeaders = 0;
diff --git a/llvm/lib/ObjCopy/COFF/COFFWriter.h b/llvm/lib/ObjCopy/COFF/COFFWriter.h
index 557dbe4c01b9c..66d7f01c87f18 100644
--- a/llvm/lib/ObjCopy/COFF/COFFWriter.h
+++ b/llvm/lib/ObjCopy/COFF/COFFWriter.h
@@ -34,7 +34,7 @@ class COFFWriter {
   template <class SymbolTy> std::pair<size_t, size_t> finalizeSymbolTable();
   Error finalizeRelocTargets();
   Error finalizeSymbolContents();
-  Error finalizeCFGuardContents();
+  Error finalizeSymIdxContents();
   void layoutSections();
   Expected<size_t> finalizeStringTable();
 
diff --git a/llvm/test/tools/llvm-objcopy/COFF/strip-update-ehcont.test b/llvm/test/tools/llvm-objcopy/COFF/strip-update-ehcont.test
new file mode 100644
index 0000000000000..8f78b6f0eb90f
--- /dev/null
+++ b/llvm/test/tools/llvm-objcopy/COFF/strip-update-ehcont.test
@@ -0,0 +1,388 @@
+# RUN: yaml2obj %s -o %t.in.o
+
+# RUN: llvm-readobj -r -s  -x '.gehcont$y' %t.in.o | FileCheck %s --check-prefix=ORIG
+# RUN: llvm-objcopy --strip-debug %t.in.o %t.out.o
+# RUN: llvm-readobj -r -s  -x '.gehcont$y' %t.out.o | FileCheck %s --check-prefix=STRIP
+
+# ORIG:      Symbols [
+# ORIG:          Name: .text
+# ORIG:          Name: .data
+# ORIG:          Name: .bss
+# ORIG:          Name: .text
+# ORIG:          Name: ?foo@@YAXXZ
+# ORIG:          Name: .data
+# ORIG:          Name: ??_R0H at 8
+# ORIG:          Name: .debug$S
+# ORIG:          Name: .gehcont$y
+# ORIG:          Name: .pdata
+# ORIG:          Name: @feat.00
+# ORIG:          Name: ?foo2@@YAXXZ
+# ORIG:          Name: $ehgcr_0_1
+# ORIG:      Hex dump of section '.gehcont$y':
+# ORIG-NEXT: 0x00000000 18000000 18000000 18000000          ............
+
+# .debug$S is going to be stripped and $ehgcr_0_1 index is decreased by 2
+
+# STRIP:      Symbols [
+# STRIP:          Name: .text
+# STRIP:          Name: .data
+# STRIP:          Name: .bss
+# STRIP:          Name: .text
+# STRIP:          Name: ?foo@@YAXXZ
+# STRIP:          Name: .data
+# STRIP:          Name: ??_R0H at 8
+# STRIP:          Name: .drectve
+# STRIP:          Name: .gehcont$y
+# STRIP:          Name: .pdata
+# STRIP:          Name: @feat.00
+# STRIP:          Name: ?foo2@@YAXXZ
+# STRIP:          Name: $ehgcr_0_1
+# STRIP:      Hex dump of section '.gehcont$y':
+# STRIP-NEXT: 0x00000000 16000000 16000000 16000000          ............
+
+--- !COFF
+header:
+  Machine:         IMAGE_FILE_MACHINE_AMD64
+  Characteristics: [  ]
+sections:
+  - Name:            .text
+    Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
+    Alignment:       4
+    SectionData:     ''
+  - Name:            .data
+    Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
+    Alignment:       4
+    SectionData:     ''
+  - Name:            .bss
+    Characteristics: [ IMAGE_SCN_CNT_UNINITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
+    Alignment:       4
+    SectionData:     ''
+  - Name:            .text
+    Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
+    Alignment:       16
+    SectionData:     554883EC30488D6C243048C745F0FEFFFFFFE800000000904883C4305DC366904889542410554883EC20488D6A30488D05E2FFFFFF4883C4205DC3
+    SizeOfRawData:   59
+    Relocations:
+      - VirtualAddress:  19
+        SymbolName:      '?foo2@@YAXXZ'
+        Type:            IMAGE_REL_AMD64_REL32
+  - Name:            .data
+    Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
+    Alignment:       16
+    SectionData:     '000000000000000000000000000000002E48000000000000'
+    SizeOfRawData:   24
+    Relocations:
+      - VirtualAddress:  0
+        SymbolName:      '??_7type_info@@6B@'
+        Type:            IMAGE_REL_AMD64_ADDR64
+  - Name:            .drectve
+    Characteristics: [ IMAGE_SCN_LNK_INFO, IMAGE_SCN_LNK_REMOVE ]
+    Alignment:       1
+    SectionData:     202F44454641554C544C49423A6C6962636D742E6C6962202F44454641554C544C49423A6C69626972636D742E6C6962202F44454641554C544C49423A73766D6C5F646973706D742E6C6962202F44454641554C544C49423A6C69626D6D742E6C6962202F44454641554C544C49423A6F6C646E616D65732E6C6962
+    SizeOfRawData:   124
+  - Name:            '.debug$S'
+    Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_DISCARDABLE, IMAGE_SCN_MEM_READ ]
+    Alignment:       4
+    SectionData:     04000000F1000000380000000A00011100000000000000002A003C1101000000D000EA070000000000000852000000000000536F6D6520646562756720696E666F000000
+    Subsections:
+      - !Symbols
+        Records:
+          - Kind:            S_OBJNAME
+            ObjNameSym:
+              Signature:       0
+              ObjectName:      ''
+          - Kind:            S_COMPILE3
+            Compile3Sym:
+              Flags:           [  ]
+              Machine:         X64
+              FrontendMajor:   2026
+              FrontendMinor:   0
+              FrontendBuild:   0
+              FrontendQFE:     0
+              BackendMajor:    21000
+              BackendMinor:    0
+              BackendBuild:    0
+              BackendQFE:      0
+              Version:         Some debug info
+    SizeOfRawData:   68
+  - Name:            '.gehcont$y'
+    Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ ]
+    Alignment:       4
+    SectionData:     '180000001800000018000000'
+    SizeOfRawData:   12
+  - Name:            .xdata
+    Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_READ ]
+    Alignment:       4
+    SectionData:     190A03350A030552015000000000000000000000190E02000A320650000000000000000022059319020000000000000001000000000000000400000000000000200000000000000001000000FFFFFFFF00000000FFFFFFFF00000000000000000000000001000000010000000000000000000000000000002C000000000000003800000000000000FFFFFFFF130000000000000018000000FFFFFFFF0000000001000000
+    SizeOfRawData:   164
+    Relocations:
+      - VirtualAddress:  12
+        SymbolName:      __CxxFrameHandler3
+        Type:            IMAGE_REL_AMD64_ADDR32NB
+      - VirtualAddress:  16
+        SymbolName:      '$cppxdata$?foo@@YAXXZ'
+        Type:            IMAGE_REL_AMD64_ADDR32NB
+      - VirtualAddress:  28
+        SymbolName:      __CxxFrameHandler3
+        Type:            IMAGE_REL_AMD64_ADDR32NB
+      - VirtualAddress:  32
+        SymbolName:      '$cppxdata$?foo@@YAXXZ'
+        Type:            IMAGE_REL_AMD64_ADDR32NB
+      - VirtualAddress:  44
+        SymbolName:      '$stateUnwindMap$?foo@@YAXXZ'
+        Type:            IMAGE_REL_AMD64_ADDR32NB
+      - VirtualAddress:  52
+        SymbolName:      '$tryMap$?foo@@YAXXZ'
+        Type:            IMAGE_REL_AMD64_ADDR32NB
+      - VirtualAddress:  60
+        SymbolName:      '$ip2state$?foo@@YAXXZ'
+        Type:            IMAGE_REL_AMD64_ADDR32NB
+      - VirtualAddress:  108
+        SymbolName:      '$handlerMap$0$?foo@@YAXXZ'
+        Type:            IMAGE_REL_AMD64_ADDR32NB
+      - VirtualAddress:  116
+        SymbolName:      '??_R0H at 8'
+        Type:            IMAGE_REL_AMD64_ADDR32NB
+      - VirtualAddress:  124
+        SymbolName:      '?catch$2@?0??foo@@YAXXZ at 4HA'
+        Type:            IMAGE_REL_AMD64_ADDR32NB
+      - VirtualAddress:  132
+        SymbolTableIndex: 6
+        Type:            IMAGE_REL_AMD64_ADDR32NB
+      - VirtualAddress:  140
+        SymbolTableIndex: 6
+        Type:            IMAGE_REL_AMD64_ADDR32NB
+      - VirtualAddress:  148
+        SymbolTableIndex: 6
+        Type:            IMAGE_REL_AMD64_ADDR32NB
+      - VirtualAddress:  156
+        SymbolName:      '?catch$2@?0??foo@@YAXXZ at 4HA'
+        Type:            IMAGE_REL_AMD64_ADDR32NB
+  - Name:            .pdata
+    Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_READ ]
+    Alignment:       4
+    SectionData:     000000001E00000000000000200000003B00000014000000
+    SizeOfRawData:   24
+    Relocations:
+      - VirtualAddress:  0
+        SymbolTableIndex: 6
+        Type:            IMAGE_REL_AMD64_ADDR32NB
+      - VirtualAddress:  4
+        SymbolTableIndex: 6
+        Type:            IMAGE_REL_AMD64_ADDR32NB
+      - VirtualAddress:  8
+        SymbolName:      .xdata
+        Type:            IMAGE_REL_AMD64_ADDR32NB
+      - VirtualAddress:  12
+        SymbolTableIndex: 6
+        Type:            IMAGE_REL_AMD64_ADDR32NB
+      - VirtualAddress:  16
+        SymbolTableIndex: 6
+        Type:            IMAGE_REL_AMD64_ADDR32NB
+      - VirtualAddress:  20
+        SymbolName:      .xdata
+        Type:            IMAGE_REL_AMD64_ADDR32NB
+symbols:
+  - Name:            .text
+    Value:           0
+    SectionNumber:   1
+    SimpleType:      IMAGE_SYM_TYPE_NULL
+    ComplexType:     IMAGE_SYM_DTYPE_NULL
+    StorageClass:    IMAGE_SYM_CLASS_STATIC
+    SectionDefinition:
+      Length:          0
+      NumberOfRelocations: 0
+      NumberOfLinenumbers: 0
+      CheckSum:        0
+      Number:          1
+  - Name:            .data
+    Value:           0
+    SectionNumber:   2
+    SimpleType:      IMAGE_SYM_TYPE_NULL
+    ComplexType:     IMAGE_SYM_DTYPE_NULL
+    StorageClass:    IMAGE_SYM_CLASS_STATIC
+    SectionDefinition:
+      Length:          0
+      NumberOfRelocations: 0
+      NumberOfLinenumbers: 0
+      CheckSum:        0
+      Number:          2
+  - Name:            .bss
+    Value:           0
+    SectionNumber:   3
+    SimpleType:      IMAGE_SYM_TYPE_NULL
+    ComplexType:     IMAGE_SYM_DTYPE_NULL
+    StorageClass:    IMAGE_SYM_CLASS_STATIC
+    SectionDefinition:
+      Length:          0
+      NumberOfRelocations: 0
+      NumberOfLinenumbers: 0
+      CheckSum:        0
+      Number:          3
+  - Name:            .text
+    Value:           0
+    SectionNumber:   4
+    SimpleType:      IMAGE_SYM_TYPE_NULL
+    ComplexType:     IMAGE_SYM_DTYPE_NULL
+    StorageClass:    IMAGE_SYM_CLASS_STATIC
+    SectionDefinition:
+      Length:          59
+      NumberOfRelocations: 1
+      NumberOfLinenumbers: 0
+      CheckSum:        517419950
+      Number:          4
+      Selection:       IMAGE_COMDAT_SELECT_NODUPLICATES
+  - Name:            '?foo@@YAXXZ'
+    Value:           0
+    SectionNumber:   4
+    SimpleType:      IMAGE_SYM_TYPE_NULL
+    ComplexType:     IMAGE_SYM_DTYPE_FUNCTION
+    StorageClass:    IMAGE_SYM_CLASS_EXTERNAL
+  - Name:            .xdata
+    Value:           0
+    SectionNumber:   9
+    SimpleType:      IMAGE_SYM_TYPE_NULL
+    ComplexType:     IMAGE_SYM_DTYPE_NULL
+    StorageClass:    IMAGE_SYM_CLASS_STATIC
+    SectionDefinition:
+      Length:          164
+      NumberOfRelocations: 14
+      NumberOfLinenumbers: 0
+      CheckSum:        135891540
+      Number:          4
+      Selection:       IMAGE_COMDAT_SELECT_ASSOCIATIVE
+  - Name:            .data
+    Value:           0
+    SectionNumber:   5
+    SimpleType:      IMAGE_SYM_TYPE_NULL
+    ComplexType:     IMAGE_SYM_DTYPE_NULL
+    StorageClass:    IMAGE_SYM_CLASS_STATIC
+    SectionDefinition:
+      Length:          24
+      NumberOfRelocations: 1
+      NumberOfLinenumbers: 0
+      CheckSum:        2602060666
+      Number:          5
+      Selection:       IMAGE_COMDAT_SELECT_ANY
+  - Name:            '??_R0H at 8'
+    Value:           0
+    SectionNumber:   5
+    SimpleType:      IMAGE_SYM_TYPE_NULL
+    ComplexType:     IMAGE_SYM_DTYPE_NULL
+    StorageClass:    IMAGE_SYM_CLASS_EXTERNAL
+  - Name:            .drectve
+    Value:           0
+    SectionNumber:   6
+    SimpleType:      IMAGE_SYM_TYPE_NULL
+    ComplexType:     IMAGE_SYM_DTYPE_NULL
+    StorageClass:    IMAGE_SYM_CLASS_STATIC
+    SectionDefinition:
+      Length:          124
+      NumberOfRelocations: 0
+      NumberOfLinenumbers: 0
+      CheckSum:        1122646683
+      Number:          6
+  - Name:            '.debug$S'
+    Value:           0
+    SectionNumber:   7
+    SimpleType:      IMAGE_SYM_TYPE_NULL
+    ComplexType:     IMAGE_SYM_DTYPE_NULL
+    StorageClass:    IMAGE_SYM_CLASS_STATIC
+    SectionDefinition:
+      Length:          68
+      NumberOfRelocations: 0
+      NumberOfLinenumbers: 0
+      CheckSum:        82254810
+      Number:          7
+  - Name:            '.gehcont$y'
+    Value:           0
+    SectionNumber:   8
+    SimpleType:      IMAGE_SYM_TYPE_NULL
+    ComplexType:     IMAGE_SYM_DTYPE_NULL
+    StorageClass:    IMAGE_SYM_CLASS_STATIC
+    SectionDefinition:
+      Length:          12
+      NumberOfRelocations: 0
+      NumberOfLinenumbers: 0
+      CheckSum:        820498156
+      Number:          8
+  - Name:            .pdata
+    Value:           0
+    SectionNumber:   10
+    SimpleType:      IMAGE_SYM_TYPE_NULL
+    ComplexType:     IMAGE_SYM_DTYPE_NULL
+    StorageClass:    IMAGE_SYM_CLASS_STATIC
+    SectionDefinition:
+      Length:          24
+      NumberOfRelocations: 6
+      NumberOfLinenumbers: 0
+      CheckSum:        3872633945
+      Number:          4
+      Selection:       IMAGE_COMDAT_SELECT_ASSOCIATIVE
+  - Name:            '@feat.00'
+    Value:           16384
+    SectionNumber:   -1
+    SimpleType:      IMAGE_SYM_TYPE_NULL
+    ComplexType:     IMAGE_SYM_DTYPE_NULL
+    StorageClass:    IMAGE_SYM_CLASS_STATIC
+  - Name:            '?foo2@@YAXXZ'
+    Value:           0
+    SectionNumber:   0
+    SimpleType:      IMAGE_SYM_TYPE_NULL
+    ComplexType:     IMAGE_SYM_DTYPE_NULL
+    StorageClass:    IMAGE_SYM_CLASS_EXTERNAL
+  - Name:            '$ehgcr_0_1'
+    Value:           23
+    SectionNumber:   4
+    SimpleType:      IMAGE_SYM_TYPE_NULL
+    ComplexType:     IMAGE_SYM_DTYPE_NULL
+    StorageClass:    IMAGE_SYM_CLASS_STATIC
+  - Name:            __CxxFrameHandler3
+    Value:           0
+    SectionNumber:   0
+    SimpleType:      IMAGE_SYM_TYPE_NULL
+    ComplexType:     IMAGE_SYM_DTYPE_NULL
+    StorageClass:    IMAGE_SYM_CLASS_EXTERNAL
+  - Name:            '$cppxdata$?foo@@YAXXZ'
+    Value:           36
+    SectionNumber:   9
+    SimpleType:      IMAGE_SYM_TYPE_NULL
+    ComplexType:     IMAGE_SYM_DTYPE_NULL
+    StorageClass:    IMAGE_SYM_CLASS_STATIC
+  - Name:            '?catch$2@?0??foo@@YAXXZ at 4HA'
+    Value:           32
+    SectionNumber:   4
+    SimpleType:      IMAGE_SYM_TYPE_NULL
+    ComplexType:     IMAGE_SYM_DTYPE_FUNCTION
+    StorageClass:    IMAGE_SYM_CLASS_STATIC
+  - Name:            '$stateUnwindMap$?foo@@YAXXZ'
+    Value:           76
+    SectionNumber:   9
+    SimpleType:      IMAGE_SYM_TYPE_NULL
+    ComplexType:     IMAGE_SYM_DTYPE_NULL
+    StorageClass:    IMAGE_SYM_CLASS_STATIC
+  - Name:            '$tryMap$?foo@@YAXXZ'
+    Value:           92
+    SectionNumber:   9
+    SimpleType:      IMAGE_SYM_TYPE_NULL
+    ComplexType:     IMAGE_SYM_DTYPE_NULL
+    StorageClass:    IMAGE_SYM_CLASS_STATIC
+  - Name:            '$ip2state$?foo@@YAXXZ'
+    Value:           132
+    SectionNumber:   9
+    SimpleType:      IMAGE_SYM_TYPE_NULL
+    ComplexType:     IMAGE_SYM_DTYPE_NULL
+    StorageClass:    IMAGE_SYM_CLASS_STATIC
+  - Name:            '$handlerMap$0$?foo@@YAXXZ'
+    Value:           112
+    SectionNumber:   9
+    SimpleType:      IMAGE_SYM_TYPE_NULL
+    ComplexType:     IMAGE_SYM_DTYPE_NULL
+    StorageClass:    IMAGE_SYM_CLASS_STATIC
+  - Name:            '??_7type_info@@6B@'
+    Value:           0
+    SectionNumber:   0
+    SimpleType:      IMAGE_SYM_TYPE_NULL
+    ComplexType:     IMAGE_SYM_DTYPE_NULL
+    StorageClass:    IMAGE_SYM_CLASS_EXTERNAL
+...

>From 1a8f13cc5d79ced81190cb3117b2d13189dbb15c Mon Sep 17 00:00:00 2001
From: Evgenii Kudriashov <evgenii.kudriashov at intel.com>
Date: Sun, 17 Aug 2025 13:30:12 -0700
Subject: [PATCH 7/7] Reduce some of the tests

---
 .../COFF/strip-update-ehcont.test             | 203 +-----------------
 .../COFF/strip-wrong-winguards.test           |  58 +----
 2 files changed, 12 insertions(+), 249 deletions(-)

diff --git a/llvm/test/tools/llvm-objcopy/COFF/strip-update-ehcont.test b/llvm/test/tools/llvm-objcopy/COFF/strip-update-ehcont.test
index 8f78b6f0eb90f..32382c671b22e 100644
--- a/llvm/test/tools/llvm-objcopy/COFF/strip-update-ehcont.test
+++ b/llvm/test/tools/llvm-objcopy/COFF/strip-update-ehcont.test
@@ -11,15 +11,13 @@
 # ORIG:          Name: .text
 # ORIG:          Name: ?foo@@YAXXZ
 # ORIG:          Name: .data
-# ORIG:          Name: ??_R0H at 8
+# ORIG:          Name: .drectve
 # ORIG:          Name: .debug$S
 # ORIG:          Name: .gehcont$y
-# ORIG:          Name: .pdata
-# ORIG:          Name: @feat.00
 # ORIG:          Name: ?foo2@@YAXXZ
 # ORIG:          Name: $ehgcr_0_1
 # ORIG:      Hex dump of section '.gehcont$y':
-# ORIG-NEXT: 0x00000000 18000000 18000000 18000000          ............
+# ORIG-NEXT: 0x00000000 12000000 12000000 12000000          ............
 
 # .debug$S is going to be stripped and $ehgcr_0_1 index is decreased by 2
 
@@ -30,15 +28,12 @@
 # STRIP:          Name: .text
 # STRIP:          Name: ?foo@@YAXXZ
 # STRIP:          Name: .data
-# STRIP:          Name: ??_R0H at 8
 # STRIP:          Name: .drectve
 # STRIP:          Name: .gehcont$y
-# STRIP:          Name: .pdata
-# STRIP:          Name: @feat.00
 # STRIP:          Name: ?foo2@@YAXXZ
 # STRIP:          Name: $ehgcr_0_1
 # STRIP:      Hex dump of section '.gehcont$y':
-# STRIP-NEXT: 0x00000000 16000000 16000000 16000000          ............
+# STRIP-NEXT: 0x00000000 10000000 10000000 10000000          ............
 
 --- !COFF
 header:
@@ -71,10 +66,6 @@ sections:
     Alignment:       16
     SectionData:     '000000000000000000000000000000002E48000000000000'
     SizeOfRawData:   24
-    Relocations:
-      - VirtualAddress:  0
-        SymbolName:      '??_7type_info@@6B@'
-        Type:            IMAGE_REL_AMD64_ADDR64
   - Name:            .drectve
     Characteristics: [ IMAGE_SCN_LNK_INFO, IMAGE_SCN_LNK_REMOVE ]
     Alignment:       1
@@ -83,105 +74,13 @@ sections:
   - Name:            '.debug$S'
     Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_DISCARDABLE, IMAGE_SCN_MEM_READ ]
     Alignment:       4
-    SectionData:     04000000F1000000380000000A00011100000000000000002A003C1101000000D000EA070000000000000852000000000000536F6D6520646562756720696E666F000000
-    Subsections:
-      - !Symbols
-        Records:
-          - Kind:            S_OBJNAME
-            ObjNameSym:
-              Signature:       0
-              ObjectName:      ''
-          - Kind:            S_COMPILE3
-            Compile3Sym:
-              Flags:           [  ]
-              Machine:         X64
-              FrontendMajor:   2026
-              FrontendMinor:   0
-              FrontendBuild:   0
-              FrontendQFE:     0
-              BackendMajor:    21000
-              BackendMinor:    0
-              BackendBuild:    0
-              BackendQFE:      0
-              Version:         Some debug info
-    SizeOfRawData:   68
+    SectionData:     04000000F100000044656275672073656374696F6E20746F20626520737472697070656400
+    SizeOfRawData:   37
   - Name:            '.gehcont$y'
     Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ ]
     Alignment:       4
-    SectionData:     '180000001800000018000000'
+    SectionData:     '120000001200000012000000'
     SizeOfRawData:   12
-  - Name:            .xdata
-    Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_READ ]
-    Alignment:       4
-    SectionData:     190A03350A030552015000000000000000000000190E02000A320650000000000000000022059319020000000000000001000000000000000400000000000000200000000000000001000000FFFFFFFF00000000FFFFFFFF00000000000000000000000001000000010000000000000000000000000000002C000000000000003800000000000000FFFFFFFF130000000000000018000000FFFFFFFF0000000001000000
-    SizeOfRawData:   164
-    Relocations:
-      - VirtualAddress:  12
-        SymbolName:      __CxxFrameHandler3
-        Type:            IMAGE_REL_AMD64_ADDR32NB
-      - VirtualAddress:  16
-        SymbolName:      '$cppxdata$?foo@@YAXXZ'
-        Type:            IMAGE_REL_AMD64_ADDR32NB
-      - VirtualAddress:  28
-        SymbolName:      __CxxFrameHandler3
-        Type:            IMAGE_REL_AMD64_ADDR32NB
-      - VirtualAddress:  32
-        SymbolName:      '$cppxdata$?foo@@YAXXZ'
-        Type:            IMAGE_REL_AMD64_ADDR32NB
-      - VirtualAddress:  44
-        SymbolName:      '$stateUnwindMap$?foo@@YAXXZ'
-        Type:            IMAGE_REL_AMD64_ADDR32NB
-      - VirtualAddress:  52
-        SymbolName:      '$tryMap$?foo@@YAXXZ'
-        Type:            IMAGE_REL_AMD64_ADDR32NB
-      - VirtualAddress:  60
-        SymbolName:      '$ip2state$?foo@@YAXXZ'
-        Type:            IMAGE_REL_AMD64_ADDR32NB
-      - VirtualAddress:  108
-        SymbolName:      '$handlerMap$0$?foo@@YAXXZ'
-        Type:            IMAGE_REL_AMD64_ADDR32NB
-      - VirtualAddress:  116
-        SymbolName:      '??_R0H at 8'
-        Type:            IMAGE_REL_AMD64_ADDR32NB
-      - VirtualAddress:  124
-        SymbolName:      '?catch$2@?0??foo@@YAXXZ at 4HA'
-        Type:            IMAGE_REL_AMD64_ADDR32NB
-      - VirtualAddress:  132
-        SymbolTableIndex: 6
-        Type:            IMAGE_REL_AMD64_ADDR32NB
-      - VirtualAddress:  140
-        SymbolTableIndex: 6
-        Type:            IMAGE_REL_AMD64_ADDR32NB
-      - VirtualAddress:  148
-        SymbolTableIndex: 6
-        Type:            IMAGE_REL_AMD64_ADDR32NB
-      - VirtualAddress:  156
-        SymbolName:      '?catch$2@?0??foo@@YAXXZ at 4HA'
-        Type:            IMAGE_REL_AMD64_ADDR32NB
-  - Name:            .pdata
-    Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_READ ]
-    Alignment:       4
-    SectionData:     000000001E00000000000000200000003B00000014000000
-    SizeOfRawData:   24
-    Relocations:
-      - VirtualAddress:  0
-        SymbolTableIndex: 6
-        Type:            IMAGE_REL_AMD64_ADDR32NB
-      - VirtualAddress:  4
-        SymbolTableIndex: 6
-        Type:            IMAGE_REL_AMD64_ADDR32NB
-      - VirtualAddress:  8
-        SymbolName:      .xdata
-        Type:            IMAGE_REL_AMD64_ADDR32NB
-      - VirtualAddress:  12
-        SymbolTableIndex: 6
-        Type:            IMAGE_REL_AMD64_ADDR32NB
-      - VirtualAddress:  16
-        SymbolTableIndex: 6
-        Type:            IMAGE_REL_AMD64_ADDR32NB
-      - VirtualAddress:  20
-        SymbolName:      .xdata
-        Type:            IMAGE_REL_AMD64_ADDR32NB
 symbols:
   - Name:            .text
     Value:           0
@@ -238,19 +137,6 @@ symbols:
     SimpleType:      IMAGE_SYM_TYPE_NULL
     ComplexType:     IMAGE_SYM_DTYPE_FUNCTION
     StorageClass:    IMAGE_SYM_CLASS_EXTERNAL
-  - Name:            .xdata
-    Value:           0
-    SectionNumber:   9
-    SimpleType:      IMAGE_SYM_TYPE_NULL
-    ComplexType:     IMAGE_SYM_DTYPE_NULL
-    StorageClass:    IMAGE_SYM_CLASS_STATIC
-    SectionDefinition:
-      Length:          164
-      NumberOfRelocations: 14
-      NumberOfLinenumbers: 0
-      CheckSum:        135891540
-      Number:          4
-      Selection:       IMAGE_COMDAT_SELECT_ASSOCIATIVE
   - Name:            .data
     Value:           0
     SectionNumber:   5
@@ -264,12 +150,6 @@ symbols:
       CheckSum:        2602060666
       Number:          5
       Selection:       IMAGE_COMDAT_SELECT_ANY
-  - Name:            '??_R0H at 8'
-    Value:           0
-    SectionNumber:   5
-    SimpleType:      IMAGE_SYM_TYPE_NULL
-    ComplexType:     IMAGE_SYM_DTYPE_NULL
-    StorageClass:    IMAGE_SYM_CLASS_EXTERNAL
   - Name:            .drectve
     Value:           0
     SectionNumber:   6
@@ -289,10 +169,10 @@ symbols:
     ComplexType:     IMAGE_SYM_DTYPE_NULL
     StorageClass:    IMAGE_SYM_CLASS_STATIC
     SectionDefinition:
-      Length:          68
+      Length:          37
       NumberOfRelocations: 0
       NumberOfLinenumbers: 0
-      CheckSum:        82254810
+      CheckSum:        820498156
       Number:          7
   - Name:            '.gehcont$y'
     Value:           0
@@ -306,25 +186,6 @@ symbols:
       NumberOfLinenumbers: 0
       CheckSum:        820498156
       Number:          8
-  - Name:            .pdata
-    Value:           0
-    SectionNumber:   10
-    SimpleType:      IMAGE_SYM_TYPE_NULL
-    ComplexType:     IMAGE_SYM_DTYPE_NULL
-    StorageClass:    IMAGE_SYM_CLASS_STATIC
-    SectionDefinition:
-      Length:          24
-      NumberOfRelocations: 6
-      NumberOfLinenumbers: 0
-      CheckSum:        3872633945
-      Number:          4
-      Selection:       IMAGE_COMDAT_SELECT_ASSOCIATIVE
-  - Name:            '@feat.00'
-    Value:           16384
-    SectionNumber:   -1
-    SimpleType:      IMAGE_SYM_TYPE_NULL
-    ComplexType:     IMAGE_SYM_DTYPE_NULL
-    StorageClass:    IMAGE_SYM_CLASS_STATIC
   - Name:            '?foo2@@YAXXZ'
     Value:           0
     SectionNumber:   0
@@ -337,52 +198,4 @@ symbols:
     SimpleType:      IMAGE_SYM_TYPE_NULL
     ComplexType:     IMAGE_SYM_DTYPE_NULL
     StorageClass:    IMAGE_SYM_CLASS_STATIC
-  - Name:            __CxxFrameHandler3
-    Value:           0
-    SectionNumber:   0
-    SimpleType:      IMAGE_SYM_TYPE_NULL
-    ComplexType:     IMAGE_SYM_DTYPE_NULL
-    StorageClass:    IMAGE_SYM_CLASS_EXTERNAL
-  - Name:            '$cppxdata$?foo@@YAXXZ'
-    Value:           36
-    SectionNumber:   9
-    SimpleType:      IMAGE_SYM_TYPE_NULL
-    ComplexType:     IMAGE_SYM_DTYPE_NULL
-    StorageClass:    IMAGE_SYM_CLASS_STATIC
-  - Name:            '?catch$2@?0??foo@@YAXXZ at 4HA'
-    Value:           32
-    SectionNumber:   4
-    SimpleType:      IMAGE_SYM_TYPE_NULL
-    ComplexType:     IMAGE_SYM_DTYPE_FUNCTION
-    StorageClass:    IMAGE_SYM_CLASS_STATIC
-  - Name:            '$stateUnwindMap$?foo@@YAXXZ'
-    Value:           76
-    SectionNumber:   9
-    SimpleType:      IMAGE_SYM_TYPE_NULL
-    ComplexType:     IMAGE_SYM_DTYPE_NULL
-    StorageClass:    IMAGE_SYM_CLASS_STATIC
-  - Name:            '$tryMap$?foo@@YAXXZ'
-    Value:           92
-    SectionNumber:   9
-    SimpleType:      IMAGE_SYM_TYPE_NULL
-    ComplexType:     IMAGE_SYM_DTYPE_NULL
-    StorageClass:    IMAGE_SYM_CLASS_STATIC
-  - Name:            '$ip2state$?foo@@YAXXZ'
-    Value:           132
-    SectionNumber:   9
-    SimpleType:      IMAGE_SYM_TYPE_NULL
-    ComplexType:     IMAGE_SYM_DTYPE_NULL
-    StorageClass:    IMAGE_SYM_CLASS_STATIC
-  - Name:            '$handlerMap$0$?foo@@YAXXZ'
-    Value:           112
-    SectionNumber:   9
-    SimpleType:      IMAGE_SYM_TYPE_NULL
-    ComplexType:     IMAGE_SYM_DTYPE_NULL
-    StorageClass:    IMAGE_SYM_CLASS_STATIC
-  - Name:            '??_7type_info@@6B@'
-    Value:           0
-    SectionNumber:   0
-    SimpleType:      IMAGE_SYM_TYPE_NULL
-    ComplexType:     IMAGE_SYM_DTYPE_NULL
-    StorageClass:    IMAGE_SYM_CLASS_EXTERNAL
 ...
diff --git a/llvm/test/tools/llvm-objcopy/COFF/strip-wrong-winguards.test b/llvm/test/tools/llvm-objcopy/COFF/strip-wrong-winguards.test
index d58cfb4bf8c41..4e99c1f59a7a3 100644
--- a/llvm/test/tools/llvm-objcopy/COFF/strip-wrong-winguards.test
+++ b/llvm/test/tools/llvm-objcopy/COFF/strip-wrong-winguards.test
@@ -1,10 +1,10 @@
 # RUN: yaml2obj %s -o %t.in.o
-# RUN: llvm-readobj -r -s  -x '.gfids$y' -x '.giats$y' -x '.gljmp$y' %t.in.o | FileCheck %s --check-prefix=ORIG
+# RUN: llvm-readobj -r -s  -x '.gfids$y' %t.in.o | FileCheck %s --check-prefix=ORIG
 # RUN: not llvm-objcopy --strip-debug %t.in.o %t.out.o 2>&1 | FileCheck %s --check-prefix=ERROR
 
 # ORIG:      Relocations [
 # ORIG-NEXT:   Section (1) .text {
-# ORIG-NEXT:     0x3 IMAGE_REL_AMD64_REL32 foo (10)
+# ORIG-NEXT:     0x3 IMAGE_REL_AMD64_REL32 foo (6)
 # ORIG-NEXT:   }
 # ORIG-NEXT: ]
 # ORIG:      Symbols [
@@ -14,25 +14,9 @@
 # ORIG:          AuxSectionDef {
 # ORIG:            Checksum: 0x459345AD
 # ORIG:          }
-# ORIG:          Name: .giats$y
-# ORIG:          Section: .giats$y
-# ORIG:          AuxSymbolCount: 1
-# ORIG:          AuxSectionDef {
-# ORIG:            Checksum: 0x0
-# ORIG:          }
-# ORIG:          Name: .gljmp$y
-# ORIG:          Section: .gljmp$y
-# ORIG:          AuxSymbolCount: 1
-# ORIG:          AuxSectionDef {
-# ORIG:            Checksum: 0x0
-# ORIG:          }
 # ORIG:      ]
 # ORIG:      Hex dump of section '.gfids$y':
-# ORIG-NEXT: 0x00000000 0a000000 10000000                   ........
-# ORIG:      Hex dump of section '.giats$y':
-# ORIG-EMPTY-NEXT:
-# ORIG:      Hex dump of section '.gljmp$y':
-# ORIG-EMPTY-NEXT:
+# ORIG-NEXT: 0x00000000 06000000 10000000                   ........
 
 # ERROR: section '.gfids$y' contains a .symidx (16) that is incorrect or was stripped
 
@@ -58,18 +42,8 @@ sections:
   - Name:            '.gfids$y'
     Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ ]
     Alignment:       4
-    SectionData:     '0A00000010000000'
+    SectionData:     '0600000010000000'
     SizeOfRawData:   8
-  - Name:            '.giats$y'
-    Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ ]
-    Alignment:       4
-    SectionData:     ''
-    SizeOfRawData:   0
-  - Name:            '.gljmp$y'
-    Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ ]
-    Alignment:       4
-    SectionData:     ''
-    SizeOfRawData:   0
 symbols:
   - Name:            .text
     Value:           0
@@ -107,30 +81,6 @@ symbols:
       NumberOfLinenumbers: 0
       CheckSum:        1167279533
       Number:          5
-  - Name:            '.giats$y'
-    Value:           0
-    SectionNumber:   4
-    SimpleType:      IMAGE_SYM_TYPE_NULL
-    ComplexType:     IMAGE_SYM_DTYPE_NULL
-    StorageClass:    IMAGE_SYM_CLASS_STATIC
-    SectionDefinition:
-      Length:          0
-      NumberOfRelocations: 0
-      NumberOfLinenumbers: 0
-      CheckSum:        0
-      Number:          6
-  - Name:            '.gljmp$y'
-    Value:           0
-    SectionNumber:   5
-    SimpleType:      IMAGE_SYM_TYPE_NULL
-    ComplexType:     IMAGE_SYM_DTYPE_NULL
-    StorageClass:    IMAGE_SYM_CLASS_STATIC
-    SectionDefinition:
-      Length:          0
-      NumberOfRelocations: 0
-      NumberOfLinenumbers: 0
-      CheckSum:        0
-      Number:          7
   - Name:            foo
     Value:           0
     SectionNumber:   0



More information about the llvm-commits mailing list