mirror of
https://github.com/openssl/openssl.git
synced 2024-12-09 05:51:54 +08:00
aarch64: Fix async_fibre_swapcontext() on clang BTI builds
Reverting to using swapcontext() when compiling with clang on BTI-enabled builds fixes the BTI setjmp() failure seen when running asynctest. The issue with setjmp/longjmp is a known clang bug: see https://github.com/llvm/llvm-project/issues/48888 Change-Id: I6eeaaa2e15f402789f1b3e742038f84bef846e29 Reviewed-by: Matt Caswell <matt@openssl.org> Reviewed-by: Paul Dale <pauli@openssl.org> (Merged from https://github.com/openssl/openssl/pull/17698)
This commit is contained in:
parent
366a162639
commit
d2d2401aed
@ -36,6 +36,18 @@
|
||||
*/
|
||||
# define USE_SWAPCONTEXT
|
||||
# endif
|
||||
# if defined(__aarch64__) && defined(__clang__) \
|
||||
&& defined(__ARM_FEATURE_BTI_DEFAULT) && __ARM_FEATURE_BTI_DEFAULT == 1
|
||||
/*
|
||||
* setjmp/longjmp don't currently work with BTI on all libc implementations
|
||||
* when compiled by clang. This is because clang doesn't put a BTI after the
|
||||
* call to setjmp where it returns the second time. This then fails on libc
|
||||
* implementations - notably glibc - which use an indirect jump to there.
|
||||
* So use the swapcontext implementation, which does work.
|
||||
* See https://github.com/llvm/llvm-project/issues/48888.
|
||||
*/
|
||||
# define USE_SWAPCONTEXT
|
||||
# endif
|
||||
# include <ucontext.h>
|
||||
# ifndef USE_SWAPCONTEXT
|
||||
# include <setjmp.h>
|
||||
|
Loading…
Reference in New Issue
Block a user