aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTong Bo <bo.tong@intel.com>2019-06-03 12:24:34 -0700
committerandroid-build-merger <android-build-merger@google.com>2019-06-03 12:24:34 -0700
commit4c8ccc6b06137f9c9da3228a7e37a86544051e67 (patch)
tree7332c2dc2c1488954834c763ef1ab381d036fc39
parent72e5e3c53365d0ca10aaba7801876f6d9cb0678c (diff)
parent84c5a656a9f8014b0c90ff848828e93611573a9a (diff)
downloadlinux-kselftest-4c8ccc6b06137f9c9da3228a7e37a86544051e67.tar.gz
selftests/x86: Support Atom for syscall_arg_fault test am: 015e95e9feandroid-cts-10.0_r2android10-dev
am: 84c5a656a9 Change-Id: I92a0d368dfa901c20d5b0f7d33842fe114cf4749
-rw-r--r--tools/testing/selftests/x86/syscall_arg_fault.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/tools/testing/selftests/x86/syscall_arg_fault.c b/tools/testing/selftests/x86/syscall_arg_fault.c
index 7db4fc9fa09f..d2548401921f 100644
--- a/tools/testing/selftests/x86/syscall_arg_fault.c
+++ b/tools/testing/selftests/x86/syscall_arg_fault.c
@@ -43,7 +43,7 @@ static sigjmp_buf jmpbuf;
static volatile sig_atomic_t n_errs;
-static void sigsegv(int sig, siginfo_t *info, void *ctx_void)
+static void sigsegv_or_sigbus(int sig, siginfo_t *info, void *ctx_void)
{
ucontext_t *ctx = (ucontext_t*)ctx_void;
@@ -73,7 +73,13 @@ int main()
if (sigaltstack(&stack, NULL) != 0)
err(1, "sigaltstack");
- sethandler(SIGSEGV, sigsegv, SA_ONSTACK);
+ sethandler(SIGSEGV, sigsegv_or_sigbus, SA_ONSTACK);
+ /*
+ * The actual exception can vary. On Atom CPUs, we get #SS
+ * instead of #PF when the vDSO fails to access the stack when
+ * ESP is too close to 2^32, and #SS causes SIGBUS.
+ */
+ sethandler(SIGBUS, sigsegv_or_sigbus, SA_ONSTACK);
sethandler(SIGILL, sigill, SA_ONSTACK);
/*