[compiler-rt] [tsan][ppc64] Fix copy-paste bug in __sigsetjmp OPD TOC loading (PR #210589)
via llvm-commits
llvm-commits at lists.llvm.org
Sun Jul 19 05:09:45 PDT 2026
https://github.com/c4x64 created https://github.com/llvm/llvm-project/pull/210589
In `__sigsetjmp`'s big-endian OPD path, the TOC was loaded from `_setjmp`'s OPD entry instead of `__sigsetjmp`'s own entry, due to a copy-paste error.
```diff
- addis r2,r2,_setjmp-1b at ha
- addi r2,r2,_setjmp-1b at l
+ addis r2,r2,__sigsetjmp-1b at ha
+ addi r2,r2,__sigsetjmp-1b at l
```
This caused an incorrect TOC pointer to be loaded on big-endian PPC64 when `__sigsetjmp`/sigsetjmp was intercepted by TSan. The corresponding `_setjmp` path (which uses label `0b`) correctly references its own symbol for the OPD lookup.
>From 2586a0f3ae0cf218d11bf33129c7d5faaccdcf06 Mon Sep 17 00:00:00 2001
From: pmr <prabhas at pmrs-MacBook.local>
Date: Sun, 19 Jul 2026 17:54:19 +0545
Subject: [PATCH] [tsan][ppc64] Fix copy-paste bug in __sigsetjmp OPD TOC
loading
In __sigsetjmp's big-endian OPD path, the TOC was loaded from _setjmp's
OPD entry instead of __sigsetjmp's own entry, due to a copy-paste error.
This caused incorrect TOC pointer on big-endian PPC64 when __sigsetjmp
was intercepted.
---
compiler-rt/lib/tsan/rtl/tsan_rtl_ppc64.S | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/compiler-rt/lib/tsan/rtl/tsan_rtl_ppc64.S b/compiler-rt/lib/tsan/rtl/tsan_rtl_ppc64.S
index 8285e21aa1ec7..661252b944e0d 100644
--- a/compiler-rt/lib/tsan/rtl/tsan_rtl_ppc64.S
+++ b/compiler-rt/lib/tsan/rtl/tsan_rtl_ppc64.S
@@ -180,8 +180,8 @@ __sigsetjmp:
addis r2,r2,.TOC.-1b at ha
addi r2,r2,.TOC.-1b at l
#else
- addis r2,r2,_setjmp-1b at ha
- addi r2,r2,_setjmp-1b at l
+ addis r2,r2,__sigsetjmp-1b at ha
+ addi r2,r2,__sigsetjmp-1b at l
ld r2,8(r2)
#endif
// Call the interceptor.
More information about the llvm-commits
mailing list