[llvm] Add XCOFF object file support in sanitizer coverage tool (PR #179884)

Honey Goyal via llvm-commits llvm-commits at lists.llvm.org
Thu Feb 5 00:32:13 PST 2026


https://github.com/honeygoyal created https://github.com/llvm/llvm-project/pull/179884

The sancov tool was unable to parse the XCOFF binaries on AIX, which caused the sanitizer coverage test case `sanitizer_coverage_trace_pc_guard.cpp` to fail.

>From f69888daf64d0e662ef1e30eff72c44506112a10 Mon Sep 17 00:00:00 2001
From: Honey Goyal <honey.goyal3 at ibm.com>
Date: Thu, 5 Feb 2026 08:33:27 +0000
Subject: [PATCH] Add XCOFF object file support in sanitizer coverage tool

---
 llvm/tools/sancov/sancov.cpp | 22 ++++++++++++++++++++++
 1 file changed, 22 insertions(+)

diff --git a/llvm/tools/sancov/sancov.cpp b/llvm/tools/sancov/sancov.cpp
index f2e71f97dda34..27b414f2b59fa 100644
--- a/llvm/tools/sancov/sancov.cpp
+++ b/llvm/tools/sancov/sancov.cpp
@@ -29,6 +29,7 @@
 #include "llvm/Object/COFF.h"
 #include "llvm/Object/MachO.h"
 #include "llvm/Object/ObjectFile.h"
+#include "llvm/Object/XCOFFObjectFile.h"
 #include "llvm/Option/ArgList.h"
 #include "llvm/Option/Option.h"
 #include "llvm/Support/Casting.h"
@@ -713,7 +714,28 @@ findSanitizerCovFunctions(const object::ObjectFile &O) {
   if (const auto *MO = dyn_cast<object::MachOObjectFile>(&O)) {
     findMachOIndirectCovFunctions(*MO, &Result);
   }
+  if (const auto *XO = dyn_cast<object::XCOFFObjectFile>(&O)) {
+    for (const object::SymbolRef &Symbol : XO->symbols()) {
+      Expected<uint64_t> AddressOrErr = Symbol.getAddress();
+      if (!AddressOrErr) {
+        consumeError(AddressOrErr.takeError());
+        continue;
+      }
+      uint64_t Address = AddressOrErr.get();
+
+      Expected<StringRef> NameOrErr = Symbol.getName();
+      if (!NameOrErr) {
+        consumeError(NameOrErr.takeError());
+        continue;
+      }
+      StringRef Name = NameOrErr.get();
 
+      if (isCoveragePointSymbol(Name) || 
+         (Name.starts_with(".") && isCoveragePointSymbol(Name.drop_front(1)))) {
+        Result.insert(Address);
+      }
+    }
+  }
   return Result;
 }
 



More information about the llvm-commits mailing list