[llvm-branch-commits] [llvm] release/19.x: [llvm-exegesis] Use correct rseq struct size (#100804) (PR #100896)
via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Sat Jul 27 12:53:34 PDT 2024
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-tools-llvm-exegesis
Author: None (llvmbot)
<details>
<summary>Changes</summary>
Backport 1e8df9e85a1ff213e5868bd822877695f27504ad
Requested by: @<!-- -->boomanaiden154
---
Full diff: https://github.com/llvm/llvm-project/pull/100896.diff
1 Files Affected:
- (modified) llvm/tools/llvm-exegesis/lib/BenchmarkRunner.cpp (+12-1)
``````````diff
diff --git a/llvm/tools/llvm-exegesis/lib/BenchmarkRunner.cpp b/llvm/tools/llvm-exegesis/lib/BenchmarkRunner.cpp
index ed53f8fabb175..adee869967d98 100644
--- a/llvm/tools/llvm-exegesis/lib/BenchmarkRunner.cpp
+++ b/llvm/tools/llvm-exegesis/lib/BenchmarkRunner.cpp
@@ -466,9 +466,20 @@ class SubProcessFunctionExecutorImpl
// segfaults in the program. Unregister the rseq region so that we can safely
// unmap it later
#ifdef GLIBC_INITS_RSEQ
+ unsigned int RseqStructSize = __rseq_size;
+
+ // Glibc v2.40 (the change is also expected to be backported to v2.35)
+ // changes the definition of __rseq_size to be the usable area of the struct
+ // rather than the actual size of the struct. v2.35 uses only 20 bytes of
+ // the 32 byte struct. For now, it should be safe to assume that if the
+ // usable size is less than 32, the actual size of the struct will be 32
+ // bytes given alignment requirements.
+ if (__rseq_size < 32)
+ RseqStructSize = 32;
+
long RseqDisableOutput =
syscall(SYS_rseq, (intptr_t)__builtin_thread_pointer() + __rseq_offset,
- __rseq_size, RSEQ_FLAG_UNREGISTER, RSEQ_SIG);
+ RseqStructSize, RSEQ_FLAG_UNREGISTER, RSEQ_SIG);
if (RseqDisableOutput != 0)
exit(ChildProcessExitCodeE::RSeqDisableFailed);
#endif // GLIBC_INITS_RSEQ
``````````
</details>
https://github.com/llvm/llvm-project/pull/100896
More information about the llvm-branch-commits
mailing list