svn commit: r311319 - in vendor/compiler-rt/dist: . lib/xray test/xray/TestCases/Linux

Dimitry Andric dim at FreeBSD.org
Wed Jan 4 22:11:35 UTC 2017


Author: dim
Date: Wed Jan  4 22:11:33 2017
New Revision: 311319
URL: https://svnweb.freebsd.org/changeset/base/311319

Log:
  Vendor import of compiler-rt trunk r291012:
  https://llvm.org/svn/llvm-project/compiler-rt/trunk@291012

Added:
  vendor/compiler-rt/dist/test/xray/TestCases/Linux/argv0-log-file-name.cc   (contents, props changed)
Modified:
  vendor/compiler-rt/dist/CMakeLists.txt
  vendor/compiler-rt/dist/lib/xray/xray_inmemory_log.cc

Modified: vendor/compiler-rt/dist/CMakeLists.txt
==============================================================================
--- vendor/compiler-rt/dist/CMakeLists.txt	Wed Jan  4 22:11:31 2017	(r311318)
+++ vendor/compiler-rt/dist/CMakeLists.txt	Wed Jan  4 22:11:33 2017	(r311319)
@@ -225,6 +225,17 @@ append_list_if(COMPILER_RT_HAS_WD4800_FL
 # Warnings to turn off for all libraries, not just sanitizers.
 append_string_if(COMPILER_RT_HAS_WUNUSED_PARAMETER_FLAG -Wno-unused-parameter CMAKE_C_FLAGS CMAKE_CXX_FLAGS)
 
+if (CMAKE_LINKER MATCHES "link.exe$")
+  # Silence MSVC linker warnings caused by empty object files. The
+  # sanitizer libraries intentionally use ifdefs that result in empty
+  # files, rather than skipping these files in the build system.
+  # Ideally, we would pass this flag only for the libraries that need
+  # it, but CMake doesn't seem to have a way to set linker flags for
+  # individual static libraries, so we enable the suppression flag for
+  # the whole compiler-rt project.
+  append("/IGNORE:4221" CMAKE_STATIC_LINKER_FLAGS)
+endif()
+
 add_subdirectory(include)
 
 set(COMPILER_RT_LIBCXX_PATH ${LLVM_MAIN_SRC_DIR}/projects/libcxx)

Modified: vendor/compiler-rt/dist/lib/xray/xray_inmemory_log.cc
==============================================================================
--- vendor/compiler-rt/dist/lib/xray/xray_inmemory_log.cc	Wed Jan  4 22:11:31 2017	(r311318)
+++ vendor/compiler-rt/dist/lib/xray/xray_inmemory_log.cc	Wed Jan  4 22:11:33 2017	(r311319)
@@ -112,14 +112,23 @@ static int __xray_OpenLogFile() XRAY_NEV
   // Open a temporary file once for the log.
   static char TmpFilename[256] = {};
   static char TmpWildcardPattern[] = "XXXXXX";
-  auto E = internal_strncat(TmpFilename, flags()->xray_logfile_base,
-                            sizeof(TmpFilename) - 10);
-  if (static_cast<size_t>((E + 6) - TmpFilename) > (sizeof(TmpFilename) - 1)) {
-    Report("XRay log file base too long: %s\n", flags()->xray_logfile_base);
+  auto Argv = GetArgv();
+  const char *Progname = Argv[0] == nullptr ? "(unknown)" : Argv[0];
+  const char *LastSlash = internal_strrchr(Progname, '/');
+
+  if (LastSlash != nullptr)
+    Progname = LastSlash + 1;
+
+  const int HalfLength = sizeof(TmpFilename) / 2 - sizeof(TmpWildcardPattern);
+  int NeededLength = internal_snprintf(TmpFilename, sizeof(TmpFilename),
+                                       "%.*s%.*s.%s",
+                                       HalfLength, flags()->xray_logfile_base,
+                                       HalfLength, Progname,
+                                       TmpWildcardPattern);
+  if (NeededLength > int(sizeof(TmpFilename))) {
+    Report("XRay log file name too long (%d): %s\n", NeededLength, TmpFilename);
     return -1;
   }
-  internal_strncat(TmpFilename, TmpWildcardPattern,
-                   sizeof(TmpWildcardPattern) - 1);
   int Fd = mkstemp(TmpFilename);
   if (Fd == -1) {
     Report("XRay: Failed opening temporary file '%s'; not logging events.\n",

Added: vendor/compiler-rt/dist/test/xray/TestCases/Linux/argv0-log-file-name.cc
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ vendor/compiler-rt/dist/test/xray/TestCases/Linux/argv0-log-file-name.cc	Wed Jan  4 22:11:33 2017	(r311319)
@@ -0,0 +1,14 @@
+// Check to make sure argv[0] is contained within the (randomised) XRay log file
+// name.
+
+// RUN: %clangxx_xray -std=c++11 %s -o %t
+// RUN: %run %t > xray.log.file.name 2>&1
+// RUN: ls | FileCheck xray.log.file.name
+// RUN: rm xray-log.* xray.log.file.name
+
+#include <cstdio>
+#include <libgen.h>
+
+[[clang::xray_always_instrument]] int main(int argc, char *argv[]) {
+  printf("// CHECK: xray-log.%s.{{.*}}\n", basename(argv[0]));
+}


More information about the svn-src-all mailing list