[llvm] Add XCOFF object file support in sanitizer coverage tool (PR #179884)
Honey Goyal via llvm-commits
llvm-commits at lists.llvm.org
Tue Feb 10 00:42:00 PST 2026
https://github.com/honeygoyal updated https://github.com/llvm/llvm-project/pull/179884
>From 35095c95fb324244937b4edda6ce93b25b0eecae 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 1/2] Add XCOFF object file support in sanitizer coverage tool
---
llvm/tools/sancov/sancov.cpp | 18 +++++++++++++++++-
1 file changed, 17 insertions(+), 1 deletion(-)
diff --git a/llvm/tools/sancov/sancov.cpp b/llvm/tools/sancov/sancov.cpp
index f2e71f97dda34..e7ba50a50af58 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,22 @@ 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();
+ failIfError(AddressOrErr);
+ uint64_t Address = AddressOrErr.get();
+
+ Expected<StringRef> NameOrErr = Symbol.getName();
+ failIfError(NameOrErr);
+ StringRef Name = NameOrErr.get();
+
+ if (isCoveragePointSymbol(Name) ||
+ (Name.starts_with(".") && isCoveragePointSymbol(Name.drop_front(1)))) {
+ Result.insert(Address);
+ }
+ }
+ }
return Result;
}
>From 60462c6e38cf3e02dd17008d616344ba090eda1f Mon Sep 17 00:00:00 2001
From: Honey Goyal <honey.goyal3 at ibm.com>
Date: Tue, 10 Feb 2026 08:52:33 +0000
Subject: [PATCH 2/2] "Clang format file"
---
llvm/tools/sancov/sancov.cpp | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/llvm/tools/sancov/sancov.cpp b/llvm/tools/sancov/sancov.cpp
index e7ba50a50af58..3746b48cb6a89 100644
--- a/llvm/tools/sancov/sancov.cpp
+++ b/llvm/tools/sancov/sancov.cpp
@@ -724,8 +724,9 @@ findSanitizerCovFunctions(const object::ObjectFile &O) {
failIfError(NameOrErr);
StringRef Name = NameOrErr.get();
- if (isCoveragePointSymbol(Name) ||
- (Name.starts_with(".") && isCoveragePointSymbol(Name.drop_front(1)))) {
+ if (isCoveragePointSymbol(Name) ||
+ (Name.starts_with(".") &&
+ isCoveragePointSymbol(Name.drop_front(1)))) {
Result.insert(Address);
}
}
More information about the llvm-commits
mailing list