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 _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits