Date: Sat, 6 Jan 2018 21:36:08 +0000 (UTC) From: Dimitry Andric <dim@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-vendor@freebsd.org Subject: svn commit: r327643 - in vendor/compiler-rt/dist-release_60: lib/asan/scripts lib/profile test/profile test/profile/Inputs test/scudo Message-ID: <201801062136.w06La8tg067367@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: dim Date: Sat Jan 6 21:36:08 2018 New Revision: 327643 URL: https://svnweb.freebsd.org/changeset/base/327643 Log: Vendor import of compiler-rt release_60 branch r321788: https://llvm.org/svn/llvm-project/compiler-rt/branches/release_60@321788 Added: vendor/compiler-rt/dist-release_60/test/profile/Inputs/instrprof-dlopen-dlclose-main.c (contents, props changed) vendor/compiler-rt/dist-release_60/test/profile/instrprof-dlopen-dlclose-gcov.test Modified: vendor/compiler-rt/dist-release_60/lib/asan/scripts/asan_device_setup vendor/compiler-rt/dist-release_60/lib/profile/GCDAProfiling.c vendor/compiler-rt/dist-release_60/test/scudo/interface.cpp Modified: vendor/compiler-rt/dist-release_60/lib/asan/scripts/asan_device_setup ============================================================================== --- vendor/compiler-rt/dist-release_60/lib/asan/scripts/asan_device_setup Sat Jan 6 21:35:53 2018 (r327642) +++ vendor/compiler-rt/dist-release_60/lib/asan/scripts/asan_device_setup Sat Jan 6 21:36:08 2018 (r327643) @@ -336,6 +336,13 @@ exec $_to \$@ EOF } +# On Android-L not allowing user segv handler breaks some applications. +# Since ~May 2017 this is the default setting; included for compatibility with +# older library versions. +if [[ PRE_L -eq 0 ]]; then + ASAN_OPTIONS="$ASAN_OPTIONS,allow_user_segv_handler=1" +fi + if [[ x$extra_options != x ]] ; then ASAN_OPTIONS="$ASAN_OPTIONS,$extra_options" fi Modified: vendor/compiler-rt/dist-release_60/lib/profile/GCDAProfiling.c ============================================================================== --- vendor/compiler-rt/dist-release_60/lib/profile/GCDAProfiling.c Sat Jan 6 21:35:53 2018 (r327642) +++ vendor/compiler-rt/dist-release_60/lib/profile/GCDAProfiling.c Sat Jan 6 21:36:08 2018 (r327643) @@ -228,6 +228,7 @@ static void unmap_file() { * profiling enabled will emit to a different file. Only one file may be * started at a time. */ +COMPILER_RT_VISIBILITY void llvm_gcda_start_file(const char *orig_filename, const char version[4], uint32_t checksum) { const char *mode = "r+b"; @@ -295,6 +296,7 @@ void llvm_gcda_start_file(const char *orig_filename, c /* Given an array of pointers to counters (counters), increment the n-th one, * where we're also given a pointer to n (predecessor). */ +COMPILER_RT_VISIBILITY void llvm_gcda_increment_indirect_counter(uint32_t *predecessor, uint64_t **counters) { uint64_t *counter; @@ -317,6 +319,7 @@ void llvm_gcda_increment_indirect_counter(uint32_t *pr #endif } +COMPILER_RT_VISIBILITY void llvm_gcda_emit_function(uint32_t ident, const char *function_name, uint32_t func_checksum, uint8_t use_extra_checksum, uint32_t cfg_checksum) { @@ -343,6 +346,7 @@ void llvm_gcda_emit_function(uint32_t ident, const cha write_string(function_name); } +COMPILER_RT_VISIBILITY void llvm_gcda_emit_arcs(uint32_t num_counters, uint64_t *counters) { uint32_t i; uint64_t *old_ctrs = NULL; @@ -394,6 +398,7 @@ void llvm_gcda_emit_arcs(uint32_t num_counters, uint64 #endif } +COMPILER_RT_VISIBILITY void llvm_gcda_summary_info() { const uint32_t obj_summary_len = 9; /* Length for gcov compatibility. */ uint32_t i; @@ -447,6 +452,7 @@ void llvm_gcda_summary_info() { #endif } +COMPILER_RT_VISIBILITY void llvm_gcda_end_file() { /* Write out EOF record. */ if (output_file) { @@ -459,6 +465,7 @@ void llvm_gcda_end_file() { unmap_file(); } + fflush(output_file); lprofUnlockFd(fd); fclose(output_file); output_file = NULL; @@ -471,6 +478,7 @@ void llvm_gcda_end_file() { #endif } +COMPILER_RT_VISIBILITY void llvm_register_writeout_function(writeout_fn fn) { struct writeout_fn_node *new_node = malloc(sizeof(struct writeout_fn_node)); new_node->fn = fn; @@ -484,6 +492,7 @@ void llvm_register_writeout_function(writeout_fn fn) { } } +COMPILER_RT_VISIBILITY void llvm_writeout_files(void) { struct writeout_fn_node *curr = writeout_fn_head; @@ -493,6 +502,7 @@ void llvm_writeout_files(void) { } } +COMPILER_RT_VISIBILITY void llvm_delete_writeout_function_list(void) { while (writeout_fn_head) { struct writeout_fn_node *node = writeout_fn_head; @@ -503,6 +513,7 @@ void llvm_delete_writeout_function_list(void) { writeout_fn_head = writeout_fn_tail = NULL; } +COMPILER_RT_VISIBILITY void llvm_register_flush_function(flush_fn fn) { struct flush_fn_node *new_node = malloc(sizeof(struct flush_fn_node)); new_node->fn = fn; @@ -516,6 +527,7 @@ void llvm_register_flush_function(flush_fn fn) { } } +COMPILER_RT_VISIBILITY void __gcov_flush() { struct flush_fn_node *curr = flush_fn_head; @@ -525,6 +537,7 @@ void __gcov_flush() { } } +COMPILER_RT_VISIBILITY void llvm_delete_flush_function_list(void) { while (flush_fn_head) { struct flush_fn_node *node = flush_fn_head; @@ -535,6 +548,7 @@ void llvm_delete_flush_function_list(void) { flush_fn_head = flush_fn_tail = NULL; } +COMPILER_RT_VISIBILITY void llvm_gcov_init(writeout_fn wfn, flush_fn ffn) { static int atexit_ran = 0; Added: vendor/compiler-rt/dist-release_60/test/profile/Inputs/instrprof-dlopen-dlclose-main.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ vendor/compiler-rt/dist-release_60/test/profile/Inputs/instrprof-dlopen-dlclose-main.c Sat Jan 6 21:36:08 2018 (r327643) @@ -0,0 +1,26 @@ +#include <dlfcn.h> +#include <stdio.h> +#include <stdlib.h> + +int main(int argc, char *argv[]) { + dlerror(); + void *f1_handle = dlopen("func.shared", RTLD_LAZY | RTLD_GLOBAL); + if (f1_handle == NULL) { + fprintf(stderr, "unable to open 'func.shared': %s\n", dlerror()); + return EXIT_FAILURE; + } + + void *f2_handle = dlopen("func2.shared", RTLD_LAZY | RTLD_GLOBAL); + if (f2_handle == NULL) { + fprintf(stderr, "unable to open 'func2.shared': %s\n", dlerror()); + return EXIT_FAILURE; + } + + if (dlclose(f2_handle) != 0) { + fprintf(stderr, "unable to close 'func2.shared': %s\n", dlerror()); + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + Added: vendor/compiler-rt/dist-release_60/test/profile/instrprof-dlopen-dlclose-gcov.test ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ vendor/compiler-rt/dist-release_60/test/profile/instrprof-dlopen-dlclose-gcov.test Sat Jan 6 21:36:08 2018 (r327643) @@ -0,0 +1,6 @@ +RUN: mkdir -p %t.d +RUN: %clang --coverage -o %t.d/func.shared -fPIC -shared %S/Inputs/instrprof-dlopen-func.c +RUN: %clang --coverage -o %t.d/func2.shared -fPIC -shared %S/Inputs/instrprof-dlopen-func2.c +RUN: %clang --coverage -o %t -fPIC -rpath %t.d %S/Inputs/instrprof-dlopen-dlclose-main.c + +RUN: %run %t Modified: vendor/compiler-rt/dist-release_60/test/scudo/interface.cpp ============================================================================== --- vendor/compiler-rt/dist-release_60/test/scudo/interface.cpp Sat Jan 6 21:35:53 2018 (r327642) +++ vendor/compiler-rt/dist-release_60/test/scudo/interface.cpp Sat Jan 6 21:36:08 2018 (r327643) @@ -4,7 +4,6 @@ // RUN: %run %t heap-size 2>&1 // RUN: %env_scudo_opts="allocator_may_return_null=1" %run %t soft-limit 2>&1 // RUN: %env_scudo_opts="allocator_may_return_null=1" not %run %t hard-limit 2>&1 -// UNSUPPORTED: armhf-linux // Tests that the sanitizer interface functions behave appropriately. @@ -51,8 +50,11 @@ int main(int argc, char **argv) // Verifies that setting the soft RSS limit at runtime works as expected. std::vector<void *> pointers; size_t size = 1 << 19; // 512Kb - for (int i = 0; i < 5; i++) - pointers.push_back(malloc(size)); + for (int i = 0; i < 5; i++) { + void *p = malloc(size); + memset(p, 0, size); + pointers.push_back(p); + } // Set the soft RSS limit to 1Mb. __scudo_set_rss_limit(1, 0); usleep(20000); @@ -74,8 +76,11 @@ int main(int argc, char **argv) // Verifies that setting the hard RSS limit at runtime works as expected. std::vector<void *> pointers; size_t size = 1 << 19; // 512Kb - for (int i = 0; i < 5; i++) - pointers.push_back(malloc(size)); + for (int i = 0; i < 5; i++) { + void *p = malloc(size); + memset(p, 0, size); + pointers.push_back(p); + } // Set the hard RSS limit to 1Mb __scudo_set_rss_limit(1, 1); usleep(20000);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201801062136.w06La8tg067367>