Index: cmake/config-ix.cmake =================================================================== --- cmake/config-ix.cmake +++ cmake/config-ix.cmake @@ -254,7 +254,7 @@ else() set(ALL_XRAY_SUPPORTED_ARCH ${X86_64} ${ARM32} ${ARM64} ${MIPS32} ${MIPS64} powerpc64le) endif() -set(ALL_SHADOWCALLSTACK_SUPPORTED_ARCH ${X86_64} ${ARM64}) +set(ALL_SHADOWCALLSTACK_SUPPORTED_ARCH ${ARM64}) if(APPLE) include(CompilerRTDarwinUtils) Index: test/shadowcallstack/libc_support.h =================================================================== --- test/shadowcallstack/libc_support.h +++ test/shadowcallstack/libc_support.h @@ -33,9 +33,5 @@ } #else - -__attribute__((noinline)) void scs_fputs_stdout(const char *p) { - fputs(p, stdout); -} - +#error Unsupported platform #endif Index: test/shadowcallstack/lit.cfg =================================================================== --- test/shadowcallstack/lit.cfg +++ test/shadowcallstack/lit.cfg @@ -19,5 +19,5 @@ scs_arch_cflags += ' -ffixed-x18 ' config.substitutions.append( ("%clang_scs ", config.clang + ' -O0 -fsanitize=shadow-call-stack ' + scs_arch_cflags + ' ') ) -if config.host_os not in ['Linux'] or config.target_arch not in ['x86_64', 'aarch64']: +if config.host_os not in ['Linux'] or config.target_arch not in ['aarch64']: config.unsupported = True Index: test/shadowcallstack/minimal_runtime.h =================================================================== --- test/shadowcallstack/minimal_runtime.h +++ test/shadowcallstack/minimal_runtime.h @@ -4,10 +4,6 @@ #pragma once -#ifdef __x86_64__ -#include -int arch_prctl(int code, void *addr); -#endif #include #include #include @@ -21,10 +17,7 @@ if (stack == MAP_FAILED) abort(); -#if defined(__x86_64__) - if (arch_prctl(ARCH_SET_GS, stack)) - abort(); -#elif defined(__aarch64__) +#if defined(__aarch64__) __asm__ __volatile__("mov x18, %0" ::"r"(stack)); #else #error Unsupported platform Index: test/shadowcallstack/overflow-aarch64.c =================================================================== --- test/shadowcallstack/overflow-aarch64.c +++ test/shadowcallstack/overflow-aarch64.c @@ -1,5 +0,0 @@ -// See overflow.c for a description. - -// REQUIRES: aarch64-target-arch -// RUN: %clang_scs %S/overflow.c -o %t -DITERATIONS=12 -// RUN: %run %t | FileCheck %S/overflow.c Index: test/shadowcallstack/overflow-x86_64.c =================================================================== --- test/shadowcallstack/overflow-x86_64.c +++ test/shadowcallstack/overflow-x86_64.c @@ -1,5 +0,0 @@ -// See overflow.c for a description. - -// REQUIRES: x86_64-target-arch -// RUN: %clang_scs %S/overflow.c -o %t -DITERATIONS=12 -// RUN: not --crash %run %t Index: test/shadowcallstack/overflow.c =================================================================== --- test/shadowcallstack/overflow.c +++ test/shadowcallstack/overflow.c @@ -8,12 +8,10 @@ // RUN: %clang_scs %s -o %t -DITERATIONS=3 // RUN: %run %t | FileCheck %s -// The behavioral check for SCS + overflow lives in the tests overflow-x86_64.c -// and overflow-aarch64.c. This is because the expected behavior is different -// between the two platforms. On x86_64 we crash because the comparison between -// the shadow call stack and the regular stack fails. On aarch64 there is no -// comparison, we just load the return address from the shadow call stack. So we -// just expect not to see the output from print_and_exit. +// On aarch64 we just load the return address from the shadow call stack so we +// do not expect to see the output from print_and_exit. +// RUN: %clang_scs %s -o %t -DITERATIONS=12 +// RUN: %run %t | FileCheck %S/overflow.c #include #include