Skip site navigation (1)Skip section navigation (2)
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>