[compiler-rt] c17ac84 - [GWP-ASan] Migrate lit tests from old Scudo -> Standalone.

Tom Stellard via llvm-commits llvm-commits at lists.llvm.org
Mon Aug 9 13:55:39 PDT 2021


On 5/14/21 10:42 AM, Mitch Phillips via llvm-commits wrote:
> 
> Author: Mitch Phillips
> Date: 2021-05-14T10:41:48-07:00
> New Revision: c17ac8432e62efcbbcaa5519739b403275c553ff
> 
> URL: https://github.com/llvm/llvm-project/commit/c17ac8432e62efcbbcaa5519739b403275c553ff
> DIFF: https://github.com/llvm/llvm-project/commit/c17ac8432e62efcbbcaa5519739b403275c553ff.diff
> 
> LOG: [GWP-ASan] Migrate lit tests from old Scudo -> Standalone.
> 
> This removes one of the last dependencies on old Scudo, and should allow
> us to delete the old Scudo soon.
> 
> Reviewed By: vitalybuka, cryptoad
> 
> Differential Revision: https://reviews.llvm.org/D102349
> 
> Added:
>      
> 
> Modified:
>      compiler-rt/lib/scudo/CMakeLists.txt
>      compiler-rt/lib/scudo/standalone/CMakeLists.txt
>      compiler-rt/lib/scudo/standalone/tests/CMakeLists.txt
>      compiler-rt/test/gwp_asan/CMakeLists.txt
>      compiler-rt/test/gwp_asan/backtrace.c
>      compiler-rt/test/gwp_asan/lit.cfg.py
>      compiler-rt/test/gwp_asan/repeated_alloc.cpp
> 
> Removed:
>      
> 
> 
> ################################################################################
> diff  --git a/compiler-rt/lib/scudo/CMakeLists.txt b/compiler-rt/lib/scudo/CMakeLists.txt
> index c50ea0233faee..e580d6d1408bd 100644
> --- a/compiler-rt/lib/scudo/CMakeLists.txt
> +++ b/compiler-rt/lib/scudo/CMakeLists.txt
> @@ -34,12 +34,9 @@ set(SCUDO_MINIMAL_OBJECT_LIBS
>     RTInterception)
>   
>   if (COMPILER_RT_HAS_GWP_ASAN)
> -  # Currently, Scudo uses the GwpAsan flag parser. This backs onto the flag
> -  # parsing mechanism of sanitizer_common. Once Scudo has its own flag parsing,
> -  # and parses GwpAsan options, you can remove this dependency.
> -  list(APPEND SCUDO_MINIMAL_OBJECT_LIBS RTGwpAsan RTGwpAsanOptionsParser
> -                                        RTGwpAsanBacktraceLibc
> -                                        RTGwpAsanSegvHandler)
> +  list(APPEND SCUDO_MINIMAL_OBJECT_LIBS
> +       RTGwpAsan RTGwpAsanOptionsParser RTGwpAsanBacktraceLibc
> +       RTGwpAsanSegvHandler)
>     list(APPEND SCUDO_CFLAGS -DGWP_ASAN_HOOKS)
>   endif()
>   
> 
> diff  --git a/compiler-rt/lib/scudo/standalone/CMakeLists.txt b/compiler-rt/lib/scudo/standalone/CMakeLists.txt
> index 1dbe8c76ff687..572ad078423f5 100644
> --- a/compiler-rt/lib/scudo/standalone/CMakeLists.txt
> +++ b/compiler-rt/lib/scudo/standalone/CMakeLists.txt
> @@ -1,7 +1,4 @@
>   add_compiler_rt_component(scudo_standalone)
> -if (COMPILER_RT_HAS_GWP_ASAN)
> -  add_dependencies(scudo_standalone gwp_asan)
> -endif()
>   
>   include_directories(../.. include)
>   
> @@ -25,13 +22,6 @@ append_list_if(COMPILER_RT_HAS_WNO_PEDANTIC -Wno-pedantic SCUDO_CFLAGS)
>   # FIXME: find cleaner way to agree with GWPAsan flags
>   append_list_if(COMPILER_RT_HAS_FNO_LTO_FLAG -fno-lto SCUDO_CFLAGS)
>   
> -if (COMPILER_RT_HAS_GWP_ASAN)
> -  append_list_if(COMPILER_RT_HAS_OMIT_FRAME_POINTER_FLAG -fno-omit-frame-pointer
> -                SCUDO_CFLAGS)
> -  append_list_if(COMPILER_RT_HAS_OMIT_FRAME_POINTER_FLAG
> -                -mno-omit-leaf-frame-pointer SCUDO_CFLAGS)
> -endif() # COMPILER_RT_HAS_GWP_ASAN
> -
>   if(COMPILER_RT_DEBUG)
>     list(APPEND SCUDO_CFLAGS -O0)
>   else()
> @@ -126,9 +116,13 @@ set(SCUDO_SOURCES_CXX_WRAPPERS
>   set(SCUDO_OBJECT_LIBS)
>   
>   if (COMPILER_RT_HAS_GWP_ASAN)
> +  add_dependencies(scudo_standalone gwp_asan)
>     list(APPEND SCUDO_OBJECT_LIBS
> -       RTGwpAsan RTGwpAsanBacktraceLibc RTGwpAsanSegvHandler)
> -  list(APPEND SCUDO_CFLAGS -DGWP_ASAN_HOOKS)
> +       RTGwpAsan RTGwpAsanBacktraceLibc RTGwpAsanSegvHandler
> +       RTGwpAsanOptionsParser)
> +
> +  list(APPEND SCUDO_CFLAGS -DGWP_ASAN_HOOKS -fno-omit-frame-pointer
> +                           -mno-omit-leaf-frame-pointer)

Prior to this patch, -mno-omit-leaf-frame-pointer was only added
if COMPILER_RT_HAS_OMIT_FRAME_POINTER_FLAG was true. Was adding
this flag unconditionally intentional?

This appears to break the build on arm with gcc:

cc1plus: error: unrecognized command-line option '-mno-omit-leaf-frame-pointer'

-Tom

>   endif()
>   
>   set(SCUDO_LINK_LIBS)
> @@ -168,7 +162,6 @@ if(COMPILER_RT_HAS_SCUDO_STANDALONE)
>       SOURCES ${SCUDO_SOURCES_CXX_WRAPPERS}
>       ADDITIONAL_HEADERS ${SCUDO_HEADERS}
>       CFLAGS ${SCUDO_CFLAGS}
> -    OBJECT_LIBS ${SCUDO_OBJECT_LIBS}
>       PARENT_TARGET scudo_standalone)
>   
>     add_compiler_rt_runtime(clang_rt.scudo_standalone
> 
> diff  --git a/compiler-rt/lib/scudo/standalone/tests/CMakeLists.txt b/compiler-rt/lib/scudo/standalone/tests/CMakeLists.txt
> index 1545c00378fbf..b84290f75d799 100644
> --- a/compiler-rt/lib/scudo/standalone/tests/CMakeLists.txt
> +++ b/compiler-rt/lib/scudo/standalone/tests/CMakeLists.txt
> @@ -23,7 +23,8 @@ if(ANDROID)
>   endif()
>   
>   if (COMPILER_RT_HAS_GWP_ASAN)
> -  list(APPEND SCUDO_UNITTEST_CFLAGS -DGWP_ASAN_HOOKS)
> +  list(APPEND SCUDO_UNITTEST_CFLAGS -DGWP_ASAN_HOOKS -fno-omit-frame-pointer
> +       -mno-omit-leaf-frame-pointer)
>   endif()
>   
>   set(SCUDO_TEST_ARCH ${SCUDO_STANDALONE_SUPPORTED_ARCH})
> 
> diff  --git a/compiler-rt/test/gwp_asan/CMakeLists.txt b/compiler-rt/test/gwp_asan/CMakeLists.txt
> index de53ad5b7eed4..86260027426fe 100644
> --- a/compiler-rt/test/gwp_asan/CMakeLists.txt
> +++ b/compiler-rt/test/gwp_asan/CMakeLists.txt
> @@ -7,7 +7,7 @@ set(GWP_ASAN_UNITTEST_DEPS)
>   set(GWP_ASAN_TEST_DEPS
>     ${SANITIZER_COMMON_LIT_TEST_DEPS}
>     gwp_asan
> -  scudo)
> +  scudo_standalone)
>   
>   # Longstanding issues in the Android test runner means that compiler-rt unit
>   # tests don't work on Android due to libc++ link-time issues. Looks like the
> @@ -19,27 +19,23 @@ if (COMPILER_RT_INCLUDE_TESTS AND COMPILER_RT_HAS_GWP_ASAN AND NOT ANDROID)
>     configure_lit_site_cfg(
>       ${CMAKE_CURRENT_SOURCE_DIR}/unit/lit.site.cfg.py.in
>       ${CMAKE_CURRENT_BINARY_DIR}/unit/lit.site.cfg.py)
> -  list(APPEND GWP_ASAN_TEST_DEPS ${GWP_ASAN_TEST_DEPS})
>     list(APPEND GWP_ASAN_TESTSUITES ${CMAKE_CURRENT_BINARY_DIR}/unit)
>   endif()
>   
> -configure_lit_site_cfg(
> -  ${CMAKE_CURRENT_SOURCE_DIR}/lit.site.cfg.py.in
> -  ${CMAKE_CURRENT_BINARY_DIR}/lit.site.cfg.py
> -  )
> +if (COMPILER_RT_INCLUDE_TESTS AND COMPILER_RT_HAS_SCUDO_STANDALONE AND COMPILER_RT_HAS_GWP_ASAN)
> +  foreach(arch ${GWP_ASAN_SUPPORTED_ARCH})
> +    set(GWP_ASAN_TEST_TARGET_ARCH ${arch})
> +    string(TOLOWER "-${arch}" GWP_ASAN_TEST_CONFIG_SUFFIX)
> +    get_test_cc_for_arch(${arch} GWP_ASAN_TEST_TARGET_CC GWP_ASAN_TEST_TARGET_CFLAGS)
> +    string(TOUPPER ${arch} ARCH_UPPER_CASE)
> +    set(CONFIG_NAME ${ARCH_UPPER_CASE}${OS_NAME}Config)
>   
> -foreach(arch ${GWP_ASAN_SUPPORTED_ARCH})
> -  set(GWP_ASAN_TEST_TARGET_ARCH ${arch})
> -  string(TOLOWER "-${arch}" GWP_ASAN_TEST_CONFIG_SUFFIX)
> -  get_test_cc_for_arch(${arch} GWP_ASAN_TEST_TARGET_CC GWP_ASAN_TEST_TARGET_CFLAGS)
> -  string(TOUPPER ${arch} ARCH_UPPER_CASE)
> -  set(CONFIG_NAME ${ARCH_UPPER_CASE}${OS_NAME}Config)
> -
> -  configure_lit_site_cfg(
> -    ${CMAKE_CURRENT_SOURCE_DIR}/lit.site.cfg.py.in
> -    ${CMAKE_CURRENT_BINARY_DIR}/${CONFIG_NAME}/lit.site.cfg.py)
> -  list(APPEND GWP_ASAN_TESTSUITES ${CMAKE_CURRENT_BINARY_DIR}/${CONFIG_NAME})
> -endforeach()
> +    configure_lit_site_cfg(
> +      ${CMAKE_CURRENT_SOURCE_DIR}/lit.site.cfg.py.in
> +      ${CMAKE_CURRENT_BINARY_DIR}/${CONFIG_NAME}/lit.site.cfg.py)
> +    list(APPEND GWP_ASAN_TESTSUITES ${CMAKE_CURRENT_BINARY_DIR}/${CONFIG_NAME})
> +  endforeach()
> +endif()
>   
>   add_lit_testsuite(check-gwp_asan "Running the GWP-ASan tests"
>     ${GWP_ASAN_TESTSUITES}
> 
> diff  --git a/compiler-rt/test/gwp_asan/backtrace.c b/compiler-rt/test/gwp_asan/backtrace.c
> index 0ba32f85cbf97..9d9fc7db096be 100644
> --- a/compiler-rt/test/gwp_asan/backtrace.c
> +++ b/compiler-rt/test/gwp_asan/backtrace.c
> @@ -1,7 +1,12 @@
>   // REQUIRES: gwp_asan
> -// RUN: %clang_gwp_asan %s -g -o %t
> +// RUN: %clang_gwp_asan -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer %s -g -o %t
>   // RUN: %expect_crash %t 2>&1 | FileCheck %s
>   
> +// Ensure we don't crash when using the unwinder when frame pointers are
> +// disabled.
> +// RUN: %clang_gwp_asan -fomit-frame-pointer -momit-leaf-frame-pointer %s -g -o %t
> +// RUN: %expect_crash %t
> +
>   #include <stdlib.h>
>   
>   __attribute__((noinline)) void *allocate_mem() { return malloc(1); }
> 
> diff  --git a/compiler-rt/test/gwp_asan/lit.cfg.py b/compiler-rt/test/gwp_asan/lit.cfg.py
> index a1b2551c2f9da..c806ae2d47271 100644
> --- a/compiler-rt/test/gwp_asan/lit.cfg.py
> +++ b/compiler-rt/test/gwp_asan/lit.cfg.py
> @@ -14,31 +14,42 @@
>   # C & CXX flags.
>   c_flags = ([config.target_cflags])
>   
> -# Android doesn't want -lrt.
> -if not config.android:
> -  c_flags += ["-lrt"]
> +cxx_flags = (c_flags + config.cxx_mode_flags + ["-std=c++14"])
>   
> -cxx_flags = (c_flags + config.cxx_mode_flags + ["-std=c++11"])
> +libscudo_standalone = os.path.join(
> +    config.compiler_rt_libdir,
> +    "libclang_rt.scudo_standalone%s.a" % config.target_suffix)
> +libscudo_standalone_cxx = os.path.join(
> +    config.compiler_rt_libdir,
> +    "libclang_rt.scudo_standalone_cxx%s.a" % config.target_suffix)
>   
> -gwp_asan_flags = ["-fsanitize=scudo", "-g", "-fno-omit-frame-pointer",
> -                  "-mno-omit-leaf-frame-pointer"]
> +scudo_link_flags = ["-pthread", "-Wl,--whole-archive", libscudo_standalone,
> +                    "-Wl,--no-whole-archive"]
> +scudo_link_cxx_flags = ["-Wl,--whole-archive", libscudo_standalone_cxx,
> +                        "-Wl,--no-whole-archive"]
> +
> +# -rdynamic is necessary for online function symbolization.
> +gwp_asan_flags = ["-rdynamic"] + scudo_link_flags
>   
>   def build_invocation(compile_flags):
>     return " " + " ".join([config.clang] + compile_flags) + " "
>   
>   # Add substitutions.
>   config.substitutions.append(("%clang ", build_invocation(c_flags)))
> -config.substitutions.append(("%clang_gwp_asan ", build_invocation(c_flags + gwp_asan_flags)))
> -config.substitutions.append(("%clangxx_gwp_asan ", build_invocation(cxx_flags + gwp_asan_flags)))
> +config.substitutions.append(
> +    ("%clang_gwp_asan ", build_invocation(c_flags + gwp_asan_flags)))
> +config.substitutions.append((
> +    "%clangxx_gwp_asan ",
> +    build_invocation(cxx_flags + gwp_asan_flags + scudo_link_cxx_flags)))
>   
>   # Platform-specific default GWP_ASAN for lit tests. Ensure that GWP-ASan is
>   # enabled and that it samples every allocation.
> -default_gwp_asan_options = 'Enabled=1:SampleRate=1'
> +default_gwp_asan_options = 'GWP_ASAN_Enabled=1:GWP_ASAN_SampleRate=1'
>   
> -config.environment['GWP_ASAN_OPTIONS'] = default_gwp_asan_options
> +config.environment['SCUDO_OPTIONS'] = default_gwp_asan_options
>   default_gwp_asan_options += ':'
> -config.substitutions.append(('%env_gwp_asan_options=',
> -                             'env GWP_ASAN_OPTIONS=' + default_gwp_asan_options))
> +config.substitutions.append(('%env_scudo_options=',
> +                             'env SCUDO_OPTIONS=' + default_gwp_asan_options))
>   
>   # GWP-ASan tests are currently supported on Linux only.
>   if config.host_os not in ['Linux']:
> 
> diff  --git a/compiler-rt/test/gwp_asan/repeated_alloc.cpp b/compiler-rt/test/gwp_asan/repeated_alloc.cpp
> index 2afad1bf3ab98..41d294c87f610 100644
> --- a/compiler-rt/test/gwp_asan/repeated_alloc.cpp
> +++ b/compiler-rt/test/gwp_asan/repeated_alloc.cpp
> @@ -3,11 +3,11 @@
>   // as expected and we didn't accidentally break the supporting allocator.
>   
>   // RUN: %clangxx_gwp_asan %s -o %t
> -// RUN: %env_gwp_asan_options=MaxSimultaneousAllocations=1 %run %t
> -// RUN: %env_gwp_asan_options=MaxSimultaneousAllocations=2 %run %t
> -// RUN: %env_gwp_asan_options=MaxSimultaneousAllocations=11 %run %t
> -// RUN: %env_gwp_asan_options=MaxSimultaneousAllocations=12 %run %t
> -// RUN: %env_gwp_asan_options=MaxSimultaneousAllocations=13 %run %t
> +// RUN: %env_scudo_options=GWP_ASAN_MaxSimultaneousAllocations=1 %run %t
> +// RUN: %env_scudo_options=GWP_ASAN_MaxSimultaneousAllocations=2 %run %t
> +// RUN: %env_scudo_options=GWP_ASAN_MaxSimultaneousAllocations=11 %run %t
> +// RUN: %env_scudo_options=GWP_ASAN_MaxSimultaneousAllocations=12 %run %t
> +// RUN: %env_scudo_options=GWP_ASAN_MaxSimultaneousAllocations=13 %run %t
>   
>   #include <cstdlib>
>   
> 
> 
>          
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
> 



More information about the llvm-commits mailing list