[llvm] [BOLT] Fix EH data encoding checks in relocateEHFrameSection (PR #196777)

YongKang Zhu via llvm-commits llvm-commits at lists.llvm.org
Sun May 10 12:31:33 PDT 2026


https://github.com/yozhu updated https://github.com/llvm/llvm-project/pull/196777

>From 3c3d32e03e000ad9dc25d09f5210ecfffa102cdc Mon Sep 17 00:00:00 2001
From: YongKang Zhu <yongzhu at fb.com>
Date: Sat, 9 May 2026 21:46:52 -0700
Subject: [PATCH 1/2] [BOLT] Fix EH data encoding checks in
 relocateEHFrameSection

---
 bolt/lib/Rewrite/RewriteInstance.cpp | 11 ++++-------
 1 file changed, 4 insertions(+), 7 deletions(-)

diff --git a/bolt/lib/Rewrite/RewriteInstance.cpp b/bolt/lib/Rewrite/RewriteInstance.cpp
index 43d4421e06928..9d70c87a7a8f5 100644
--- a/bolt/lib/Rewrite/RewriteInstance.cpp
+++ b/bolt/lib/Rewrite/RewriteInstance.cpp
@@ -2162,13 +2162,10 @@ void RewriteInstance::relocateEHFrameSection() {
       return;
 
     // Only fix references that are relative to other locations.
-    if (!(DwarfType & dwarf::DW_EH_PE_pcrel) &&
-        !(DwarfType & dwarf::DW_EH_PE_textrel) &&
-        !(DwarfType & dwarf::DW_EH_PE_funcrel) &&
-        !(DwarfType & dwarf::DW_EH_PE_datarel))
-      return;
-
-    if (!(DwarfType & dwarf::DW_EH_PE_sdata4))
+    if ((DwarfType & 0x70) != dwarf::DW_EH_PE_pcrel &&
+        (DwarfType & 0x70) != dwarf::DW_EH_PE_textrel &&
+        (DwarfType & 0x70) != dwarf::DW_EH_PE_funcrel &&
+        (DwarfType & 0x70) != dwarf::DW_EH_PE_datarel)
       return;
 
     uint32_t RelType;

>From c9030cf73306fb663e9fcfcb98d74f4a4d54cbb6 Mon Sep 17 00:00:00 2001
From: YongKang Zhu <yongzhu at fb.com>
Date: Sun, 10 May 2026 12:31:06 -0700
Subject: [PATCH 2/2] Define mask using DW_EH_PE_indirect

---
 bolt/lib/Rewrite/RewriteInstance.cpp | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/bolt/lib/Rewrite/RewriteInstance.cpp b/bolt/lib/Rewrite/RewriteInstance.cpp
index 9d70c87a7a8f5..b1fa65390c5e7 100644
--- a/bolt/lib/Rewrite/RewriteInstance.cpp
+++ b/bolt/lib/Rewrite/RewriteInstance.cpp
@@ -2162,10 +2162,11 @@ void RewriteInstance::relocateEHFrameSection() {
       return;
 
     // Only fix references that are relative to other locations.
-    if ((DwarfType & 0x70) != dwarf::DW_EH_PE_pcrel &&
-        (DwarfType & 0x70) != dwarf::DW_EH_PE_textrel &&
-        (DwarfType & 0x70) != dwarf::DW_EH_PE_funcrel &&
-        (DwarfType & 0x70) != dwarf::DW_EH_PE_datarel)
+    const uint64_t Mask = 0xf0 & ~dwarf::DW_EH_PE_indirect;
+    if ((DwarfType & Mask) != dwarf::DW_EH_PE_pcrel &&
+        (DwarfType & Mask) != dwarf::DW_EH_PE_textrel &&
+        (DwarfType & Mask) != dwarf::DW_EH_PE_funcrel &&
+        (DwarfType & Mask) != dwarf::DW_EH_PE_datarel)
       return;
 
     uint32_t RelType;



More information about the llvm-commits mailing list