From 78831f42c1c0eb39bc6e8a907e1e421b528b2b62 Mon Sep 17 00:00:00 2001 From: Vedant Kumar Date: Mon, 28 Oct 2019 11:35:36 -0700 Subject: [PATCH 01/24] [debugserver] Detect arch from LLVM_DEFAULT_TARGET_TRIPLE The debugserver build needs to conditionally include files depending on the target architecture. Switch on the architecture specified by LLVM_DEFAULT_TARGET_TRIPLE, as the llvm and swift build systems use this variable to identify the target (the latter, indirectly, through LLVM_HOST_TRIPLE). It would be possible to switch on CMAKE_OSX_ARCHITECTURES, but the swift build does not provide it, preferring instead to pass arch-specific CFLAGS etc explicitly. Switching on LLVM_HOST_TRIPLE is also an option, but it breaks down when cross-compiling. Differential Revision: https://reviews.llvm.org/D69523 (cherry picked from commit 82d3ba87d06f9e2abc6e27d8799587d433c56630) --- .../debugserver/source/MacOSX/CMakeLists.txt | 20 ++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/lldb/tools/debugserver/source/MacOSX/CMakeLists.txt b/lldb/tools/debugserver/source/MacOSX/CMakeLists.txt index 7ad4a06a4d361..6d8e1ee449e34 100644 --- a/lldb/tools/debugserver/source/MacOSX/CMakeLists.txt +++ b/lldb/tools/debugserver/source/MacOSX/CMakeLists.txt @@ -1,14 +1,28 @@ -if("${CMAKE_OSX_ARCHITECTURES}" MATCHES ".*arm.*") +# The debugserver build needs to conditionally include files depending on the +# target architecture. +# +# Switch on the architecture specified by LLVM_DEFAULT_TARGET_TRIPLE, as +# the llvm and swift build systems use this variable to identify the +# target (the latter, indirectly, through LLVM_HOST_TRIPLE). +# +# It would be possible to switch on CMAKE_OSX_ARCHITECTURES, but the swift +# build does not provide it, preferring instead to pass arch-specific +# CFLAGS etc explicitly. Switching on LLVM_HOST_TRIPLE is also an option, +# but it breaks down when cross-compiling. + +string(REGEX MATCH "^[^-]*" LLDB_DEBUGSERVER_ARCH ${LLVM_DEFAULT_TARGET_TRIPLE}) + +if("${LLDB_DEBUGSERVER_ARCH}" MATCHES ".*arm.*") list(APPEND SOURCES arm/DNBArchImpl.cpp arm64/DNBArchImplARM64.cpp) include_directories(${CURRENT_SOURCE_DIR}/arm ${CURRENT_SOURCE_DIR}/arm64) endif() -if(NOT CMAKE_OSX_ARCHITECTURES OR "${CMAKE_OSX_ARCHITECTURES}" MATCHES ".*86.*") +if(NOT LLDB_DEBUGSERVER_ARCH OR "${LLDB_DEBUGSERVER_ARCH}" MATCHES ".*86.*") list(APPEND SOURCES i386/DNBArchImplI386.cpp x86_64/DNBArchImplX86_64.cpp) include_directories(${CURRENT_SOURCE_DIR}/i386 ${CURRENT_SOURCE_DIR}/x86_64) endif() -if("${CMAKE_OSX_ARCHITECTURES}" MATCHES ".*ppc.*") +if("${LLDB_DEBUGSERVER_ARCH}" MATCHES ".*ppc.*") list(APPEND SOURCES ppc/DNBArchImpl.cpp) include_directories(${CURRENT_SOURCE_DIR}/ppc) endif() From eb497cbf0a0d02e01c04d3080e19db1fb5654bb3 Mon Sep 17 00:00:00 2001 From: Saleem Abdulrasool Date: Tue, 29 Oct 2019 08:20:58 -0700 Subject: [PATCH 02/24] build: workaround stale caches (NFC) `LLVM_DEFAULT_TARGET_TRIPLE` is a cached variable, which means that it may actually be unset. Furthermore, in standalone builds, the variable may be fully undefined. Apply the regular expression over the empty string in such a case. This should improve the state of the green dragon bot. (cherry picked from commit 55eec2ba96bd9c19ccb5d4d13cb8c88d4abcebc6) --- lldb/tools/debugserver/source/MacOSX/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lldb/tools/debugserver/source/MacOSX/CMakeLists.txt b/lldb/tools/debugserver/source/MacOSX/CMakeLists.txt index 6d8e1ee449e34..59812b27dff28 100644 --- a/lldb/tools/debugserver/source/MacOSX/CMakeLists.txt +++ b/lldb/tools/debugserver/source/MacOSX/CMakeLists.txt @@ -10,7 +10,7 @@ # CFLAGS etc explicitly. Switching on LLVM_HOST_TRIPLE is also an option, # but it breaks down when cross-compiling. -string(REGEX MATCH "^[^-]*" LLDB_DEBUGSERVER_ARCH ${LLVM_DEFAULT_TARGET_TRIPLE}) +string(REGEX MATCH "^[^-]*" LLDB_DEBUGSERVER_ARCH "${LLVM_DEFAULT_TARGET_TRIPLE}") if("${LLDB_DEBUGSERVER_ARCH}" MATCHES ".*arm.*") list(APPEND SOURCES arm/DNBArchImpl.cpp arm64/DNBArchImplARM64.cpp) From 950b72179f81875dabc164401143b7c9eb2268a9 Mon Sep 17 00:00:00 2001 From: Saleem Abdulrasool Date: Wed, 30 Oct 2019 12:07:07 -0700 Subject: [PATCH 03/24] DebugServer: be more lenient about the target triple When building standalone, `LLVM_DEFAULT_TARGET_TRIPLE` may be undefined. Matching against an empty string does not work as desired in CMake, so, fallback to the old behaviour, defaulting `LLDB_DEBUGSERVER_ARCH` to `CMAKE_OSX_ARCHITECTURES`. (cherry picked from commit 5e029c4cfd7b8db269b6db475ecd420311fbd7d1) --- lldb/tools/debugserver/source/MacOSX/CMakeLists.txt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/lldb/tools/debugserver/source/MacOSX/CMakeLists.txt b/lldb/tools/debugserver/source/MacOSX/CMakeLists.txt index 59812b27dff28..cf08985ed6f27 100644 --- a/lldb/tools/debugserver/source/MacOSX/CMakeLists.txt +++ b/lldb/tools/debugserver/source/MacOSX/CMakeLists.txt @@ -10,7 +10,11 @@ # CFLAGS etc explicitly. Switching on LLVM_HOST_TRIPLE is also an option, # but it breaks down when cross-compiling. -string(REGEX MATCH "^[^-]*" LLDB_DEBUGSERVER_ARCH "${LLVM_DEFAULT_TARGET_TRIPLE}") +if(LLVM_DEFAULT_TARGET_TRIPLE) + string(REGEX MATCH "^[^-]*" LLDB_DEBUGSERVER_ARCH ${LLVM_DEFAULT_TARGET_TRIPLE}) +else() + set(LLDB_DEBUGSERVER_ARCH ${CMAKE_OSX_ARCHITECTURES}) +endif() if("${LLDB_DEBUGSERVER_ARCH}" MATCHES ".*arm.*") list(APPEND SOURCES arm/DNBArchImpl.cpp arm64/DNBArchImplARM64.cpp) From e87d17b2a2537838d598bb3e1f5996e98b58f04c Mon Sep 17 00:00:00 2001 From: Vedant Kumar Date: Tue, 1 Oct 2019 18:14:54 -0700 Subject: [PATCH 04/24] [profile] Clean up stale raw profiles in instrprof-write-file.c (cherry picked from commit ade776b5845384bb45fcd2f7919d80f4101971a7) --- compiler-rt/test/profile/instrprof-write-file.c | 1 + 1 file changed, 1 insertion(+) diff --git a/compiler-rt/test/profile/instrprof-write-file.c b/compiler-rt/test/profile/instrprof-write-file.c index af008ed9439e8..e2f5e112e0643 100644 --- a/compiler-rt/test/profile/instrprof-write-file.c +++ b/compiler-rt/test/profile/instrprof-write-file.c @@ -1,3 +1,4 @@ +// RUN: rm -rf %t1.profraw %t2.profraw // RUN: %clang_profgen -o %t -O3 %s // RUN: env LLVM_PROFILE_FILE=%t1.profraw %run %t %t2.profraw // RUN: llvm-profdata merge -o %t1.profdata %t1.profraw From 78d8648200aaa357a51e5e2626d419cd2ea55e9b Mon Sep 17 00:00:00 2001 From: Vedant Kumar Date: Sat, 12 Oct 2019 00:23:15 +0000 Subject: [PATCH 05/24] [llvm-profdata] Make "malformed-ptr-to-counter-array.test" textual As pointed out in https://reviews.llvm.org/D66979 post-commit, making this test textual would make it more maintainable. Differential Revision: https://reviews.llvm.org/D68718 llvm-svn: 374617 (cherry picked from commit 852e3b207651ce4cc8e9382282eca5e91ac1476b) --- .../malformed-ptr-to-counter-array.profraw | Bin 563560 -> 0 bytes .../malformed-ptr-to-counter-array.test | 49 +++++++++++++++++- 2 files changed, 47 insertions(+), 2 deletions(-) delete mode 100644 llvm/test/tools/llvm-profdata/Inputs/malformed-ptr-to-counter-array.profraw diff --git a/llvm/test/tools/llvm-profdata/Inputs/malformed-ptr-to-counter-array.profraw b/llvm/test/tools/llvm-profdata/Inputs/malformed-ptr-to-counter-array.profraw deleted file mode 100644 index 72fddd76fc6e3287cb7a504b264183e22891ac31..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 563560 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%0DuFD;$w>nb+l*M|btaTLm8P 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 z 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%0DQ0Vp%l)&#NDzDKhU^I@|mW% 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 | FileCheck %s +RUN: printf '\201rforpl\377' > %t.profraw +RUN: printf '\4\0\0\0\0\0\0\0' >> %t.profraw +RUN: printf '\1\0\0\0\0\0\0\0' >> %t.profraw +RUN: printf '\2\0\0\0\0\0\0\0' >> %t.profraw +RUN: printf '\10\0\0\0\0\0\0\0' >> %t.profraw +RUN: printf '\0\0\6\0\1\0\0\0' >> %t.profraw +RUN: printf '\0\0\6\0\2\0\0\0' >> %t.profraw +RUN: printf '\0\0\0\0\0\0\0\0' >> %t.profraw + +// Data Section +// +// struct ProfData { +// #define INSTR_PROF_DATA(Type, LLVMType, Name, Initializer) \ +// Type Name; +// #include "llvm/ProfileData/InstrProfData.inc" +// }; + +RUN: printf '\067\265\035\031\112\165\023\344' >> %t.profraw +RUN: printf '\02\0\0\0\0\0\0\0' >> %t.profraw + +// Note: The CounterPtr here is off-by-one. This should trigger a malformed profile error. +RUN: printf '\0\0\6\0\1\0\0\1' >> %t.profraw + +RUN: printf '\0\0\0\0\0\0\0\0' >> %t.profraw +RUN: printf '\0\0\0\0\0\0\0\0' >> %t.profraw +RUN: printf '\02\0\0\0\0\0\0\0' >> %t.profraw + +// Counter Section + +RUN: printf '\067\0\0\0\0\0\0\0' >> %t.profraw +RUN: printf '\101\0\0\0\0\0\0\0' >> %t.profraw + +// Name Section + +RUN: printf '\3\0bar\0\0\0' >> %t.profraw + +RUN: not llvm-profdata merge -o /dev/null %t.profraw 2>&1 | FileCheck %s CHECK: Malformed instrumentation profile data From 448563b4a4f989ee09fabaff531c8d45fc46b4ed Mon Sep 17 00:00:00 2001 From: Vedant Kumar Date: Mon, 14 Oct 2019 17:20:22 +0000 Subject: [PATCH 06/24] [llvm-profdata] Weaken "malformed-ptr-to-counter-array.test" to appease arm bots There are a number arm bots failing after r374617 landed, and I'm not sure why. It looks a bit like the error message llvm-profdata is expected to print to stderr isn't flushed. Weaken the test in an attempt to appease the arm bots: if this doesn't work, that means that llvm-profdata is actually *not failing*, and that will be a clear indication that some logic error is actually happening. http://lab.llvm.org:8011/builders/clang-cmake-armv7-global-isel/builds/5604/ llvm-svn: 374792 (cherry picked from commit eef612bf91b640f3cd57be003b0dcd5c22f84202) --- .../tools/llvm-profdata/malformed-ptr-to-counter-array.test | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/llvm/test/tools/llvm-profdata/malformed-ptr-to-counter-array.test b/llvm/test/tools/llvm-profdata/malformed-ptr-to-counter-array.test index 0cfc93b01f25b..81f5c6a25a1c9 100644 --- a/llvm/test/tools/llvm-profdata/malformed-ptr-to-counter-array.test +++ b/llvm/test/tools/llvm-profdata/malformed-ptr-to-counter-array.test @@ -45,6 +45,4 @@ RUN: printf '\101\0\0\0\0\0\0\0' >> %t.profraw RUN: printf '\3\0bar\0\0\0' >> %t.profraw -RUN: not llvm-profdata merge -o /dev/null %t.profraw 2>&1 | FileCheck %s - -CHECK: Malformed instrumentation profile data +RUN: not llvm-profdata merge -o /dev/null %t.profraw From a89987569cd5e90a1abc2f880373459ab47adc5c Mon Sep 17 00:00:00 2001 From: Vedant Kumar Date: Tue, 15 Oct 2019 17:10:44 +0000 Subject: [PATCH 07/24] [llvm-profdata] Remove tools/llvm-profdata/malformed-ptr-to-counter-array.test This test is still failing on the ARM bots and I need time to investigate. llvm-svn: 374915 (cherry picked from commit e409f12131905a07e9286c0e191af9978e43b893) --- .../malformed-ptr-to-counter-array.test | 48 ------------------- 1 file changed, 48 deletions(-) delete mode 100644 llvm/test/tools/llvm-profdata/malformed-ptr-to-counter-array.test diff --git a/llvm/test/tools/llvm-profdata/malformed-ptr-to-counter-array.test b/llvm/test/tools/llvm-profdata/malformed-ptr-to-counter-array.test deleted file mode 100644 index 81f5c6a25a1c9..0000000000000 --- a/llvm/test/tools/llvm-profdata/malformed-ptr-to-counter-array.test +++ /dev/null @@ -1,48 +0,0 @@ -// Header -// -// INSTR_PROF_RAW_HEADER(uint64_t, Magic, __llvm_profile_get_magic()) -// INSTR_PROF_RAW_HEADER(uint64_t, Version, __llvm_profile_get_version()) -// INSTR_PROF_RAW_HEADER(uint64_t, DataSize, DataSize) -// INSTR_PROF_RAW_HEADER(uint64_t, CountersSize, CountersSize) -// INSTR_PROF_RAW_HEADER(uint64_t, NamesSize, NamesSize) -// INSTR_PROF_RAW_HEADER(uint64_t, CountersDelta, (uintptr_t)CountersBegin) -// INSTR_PROF_RAW_HEADER(uint64_t, NamesDelta, (uintptr_t)NamesBegin) -// INSTR_PROF_RAW_HEADER(uint64_t, ValueKindLast, IPVK_Last) - -RUN: printf '\201rforpl\377' > %t.profraw -RUN: printf '\4\0\0\0\0\0\0\0' >> %t.profraw -RUN: printf '\1\0\0\0\0\0\0\0' >> %t.profraw -RUN: printf '\2\0\0\0\0\0\0\0' >> %t.profraw -RUN: printf '\10\0\0\0\0\0\0\0' >> %t.profraw -RUN: printf '\0\0\6\0\1\0\0\0' >> %t.profraw -RUN: printf '\0\0\6\0\2\0\0\0' >> %t.profraw -RUN: printf '\0\0\0\0\0\0\0\0' >> %t.profraw - -// Data Section -// -// struct ProfData { -// #define INSTR_PROF_DATA(Type, LLVMType, Name, Initializer) \ -// Type Name; -// #include "llvm/ProfileData/InstrProfData.inc" -// }; - -RUN: printf '\067\265\035\031\112\165\023\344' >> %t.profraw -RUN: printf '\02\0\0\0\0\0\0\0' >> %t.profraw - -// Note: The CounterPtr here is off-by-one. This should trigger a malformed profile error. -RUN: printf '\0\0\6\0\1\0\0\1' >> %t.profraw - -RUN: printf '\0\0\0\0\0\0\0\0' >> %t.profraw -RUN: printf '\0\0\0\0\0\0\0\0' >> %t.profraw -RUN: printf '\02\0\0\0\0\0\0\0' >> %t.profraw - -// Counter Section - -RUN: printf '\067\0\0\0\0\0\0\0' >> %t.profraw -RUN: printf '\101\0\0\0\0\0\0\0' >> %t.profraw - -// Name Section - -RUN: printf '\3\0bar\0\0\0' >> %t.profraw - -RUN: not llvm-profdata merge -o /dev/null %t.profraw From c94123fb5abb400593b3ba2da40bcfc3e8a9a4ce Mon Sep 17 00:00:00 2001 From: Vedant Kumar Date: Tue, 15 Oct 2019 17:53:48 +0000 Subject: [PATCH 08/24] [llvm-profdata] Reinstate tools/llvm-profdata/malformed-ptr-to-counter-array.test I removed this test to unblock the ARM bots while looking into failures (r374915), and am reinstating it now with a fix. I believe the problem was that counter ptr address I used, '\0\0\6\0\1\0\0\1', set the high bits of the pointer, not the low bits like I wanted. On x86_64 this superficially looks like it tests r370826, but it doesn't, as it would have been caught before r370826. However, on ARM (or, 32-bit hosts more generally), I suspect the high bits were cleared, and you get a 'valid' profile. I verified that setting the *low* bits of the pointer does trigger the new condition: -// Note: The CounterPtr here is off-by-one. This should trigger a malformed profile error. -RUN: printf '\0\0\6\0\1\0\0\1' >> %t.profraw +// Note: The CounterPtr here is off-by-one. +// +// Octal '\11' is 9 in decimal: this should push CounterOffset to 1. As there are two counters, +// the profile reader should error out. +RUN: printf '\11\0\6\0\1\0\0\0' >> %t.profraw This reverts commit c7cf5b3e4b918c9769fd760f28485b8d943ed968. llvm-svn: 374927 (cherry picked from commit c7ec51a7c3ede8c1024b90d5fdc91979a9f01bf8) --- .../malformed-ptr-to-counter-array.test | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 llvm/test/tools/llvm-profdata/malformed-ptr-to-counter-array.test diff --git a/llvm/test/tools/llvm-profdata/malformed-ptr-to-counter-array.test b/llvm/test/tools/llvm-profdata/malformed-ptr-to-counter-array.test new file mode 100644 index 0000000000000..c355bdcbdeaec --- /dev/null +++ b/llvm/test/tools/llvm-profdata/malformed-ptr-to-counter-array.test @@ -0,0 +1,52 @@ +// Header +// +// INSTR_PROF_RAW_HEADER(uint64_t, Magic, __llvm_profile_get_magic()) +// INSTR_PROF_RAW_HEADER(uint64_t, Version, __llvm_profile_get_version()) +// INSTR_PROF_RAW_HEADER(uint64_t, DataSize, DataSize) +// INSTR_PROF_RAW_HEADER(uint64_t, CountersSize, CountersSize) +// INSTR_PROF_RAW_HEADER(uint64_t, NamesSize, NamesSize) +// INSTR_PROF_RAW_HEADER(uint64_t, CountersDelta, (uintptr_t)CountersBegin) +// INSTR_PROF_RAW_HEADER(uint64_t, NamesDelta, (uintptr_t)NamesBegin) +// INSTR_PROF_RAW_HEADER(uint64_t, ValueKindLast, IPVK_Last) + +RUN: printf '\201rforpl\377' > %t.profraw +RUN: printf '\4\0\0\0\0\0\0\0' >> %t.profraw +RUN: printf '\1\0\0\0\0\0\0\0' >> %t.profraw +RUN: printf '\2\0\0\0\0\0\0\0' >> %t.profraw +RUN: printf '\10\0\0\0\0\0\0\0' >> %t.profraw +RUN: printf '\0\0\6\0\1\0\0\0' >> %t.profraw +RUN: printf '\0\0\6\0\2\0\0\0' >> %t.profraw +RUN: printf '\0\0\0\0\0\0\0\0' >> %t.profraw + +// Data Section +// +// struct ProfData { +// #define INSTR_PROF_DATA(Type, LLVMType, Name, Initializer) \ +// Type Name; +// #include "llvm/ProfileData/InstrProfData.inc" +// }; + +RUN: printf '\067\265\035\031\112\165\023\344' >> %t.profraw +RUN: printf '\02\0\0\0\0\0\0\0' >> %t.profraw + +// Note: The CounterPtr here is off-by-one. +// +// Octal '\11' is 9 in decimal: this should push CounterOffset to 1. As there are two counters, +// the profile reader should error out. +RUN: printf '\11\0\6\0\1\0\0\0' >> %t.profraw + +RUN: printf '\0\0\0\0\0\0\0\0' >> %t.profraw +RUN: printf '\0\0\0\0\0\0\0\0' >> %t.profraw +RUN: printf '\02\0\0\0\0\0\0\0' >> %t.profraw + +// Counter Section + +RUN: printf '\067\0\0\0\0\0\0\0' >> %t.profraw +RUN: printf '\101\0\0\0\0\0\0\0' >> %t.profraw + +// Name Section + +RUN: printf '\3\0bar\0\0\0' >> %t.profraw + +RUN: not llvm-profdata merge -o /dev/null %t.profraw 2>&1 | FileCheck %s +CHECK: Malformed instrumentation profile data From 2ab58b149ac420b8c6383d541f49164a0aa38193 Mon Sep 17 00:00:00 2001 From: Sajjad Mirza Date: Mon, 24 Jun 2019 21:32:50 +0000 Subject: [PATCH 09/24] (Reland with changes) Adding a function for setting coverage output file. Summary: User code can open a file on its own and pass it to the runtime, rather than specifying a name and having the runtime open the file. This supports the use case where a process cannot open a file on its own but can receive a file descriptor from another process. Relanding https://reviews.llvm.org/D62541. The original revision unlocked the file before calling flush, this revision fixes that. Reviewers: Dor1s, davidxl Reviewed By: Dor1s Subscribers: #sanitizers, llvm-commits Tags: #sanitizers, #llvm Differential Revision: https://reviews.llvm.org/D63581 llvm-svn: 364231 (cherry picked from commit 6694b2b36bdd3dbb3b047315411cb38432d19d02) --- compiler-rt/lib/profile/InstrProfiling.h | 21 +++++- compiler-rt/lib/profile/InstrProfilingFile.c | 64 +++++++++++++++---- compiler-rt/lib/profile/InstrProfilingUtil.c | 20 ++++++ compiler-rt/lib/profile/InstrProfilingUtil.h | 2 + .../instrprof-set-file-object-merging.c | 43 +++++++++++++ .../test/profile/instrprof-set-file-object.c | 31 +++++++++ 6 files changed, 168 insertions(+), 13 deletions(-) create mode 100644 compiler-rt/test/profile/instrprof-set-file-object-merging.c create mode 100644 compiler-rt/test/profile/instrprof-set-file-object.c diff --git a/compiler-rt/lib/profile/InstrProfiling.h b/compiler-rt/lib/profile/InstrProfiling.h index 91afd5e6b92df..4d196a89b4920 100644 --- a/compiler-rt/lib/profile/InstrProfiling.h +++ b/compiler-rt/lib/profile/InstrProfiling.h @@ -10,6 +10,7 @@ #define PROFILE_INSTRPROFILING_H_ #include "InstrProfilingPort.h" +#include #define INSTR_PROF_VISIBILITY COMPILER_RT_VISIBILITY #include "InstrProfData.inc" @@ -125,7 +126,7 @@ int __llvm_orderfile_write_file(void); /*! * \brief this is a wrapper interface to \c __llvm_profile_write_file. * After this interface is invoked, a arleady dumped flag will be set - * so that profile won't be dumped again during program exit. + * so that profile won't be dumped again during program exit. * Invocation of interface __llvm_profile_reset_counters will clear * the flag. This interface is designed to be used to collect profile * data from user selected hot regions. The use model is @@ -157,6 +158,24 @@ int __llvm_orderfile_dump(void); */ void __llvm_profile_set_filename(const char *Name); +/*! + * \brief Set the FILE object for writing instrumentation data. + * + * Sets the FILE object to be used for subsequent calls to + * \a __llvm_profile_write_file(). The profile file name set by environment + * variable, command-line option, or calls to \a __llvm_profile_set_filename + * will be ignored. + * + * \c File will not be closed after a call to \a __llvm_profile_write_file() but + * it may be flushed. Passing NULL restores default behavior. + * + * If \c EnableMerge is nonzero, the runtime will always merge profiling data + * with the contents of the profiling file. If EnableMerge is zero, the runtime + * may still merge the data if it would have merged for another reason (for + * example, because of a %m specifier in the file name). + */ +void __llvm_profile_set_file_object(FILE *File, int EnableMerge); + /*! \brief Register to write instrumentation data to file at exit. */ int __llvm_profile_register_write_file_atexit(void); diff --git a/compiler-rt/lib/profile/InstrProfilingFile.c b/compiler-rt/lib/profile/InstrProfilingFile.c index 4e6e34921cc19..9a47293f68c3b 100644 --- a/compiler-rt/lib/profile/InstrProfilingFile.c +++ b/compiler-rt/lib/profile/InstrProfilingFile.c @@ -38,7 +38,7 @@ /* From where is profile name specified. * The order the enumerators define their * precedence. Re-order them may lead to - * runtime behavior change. */ + * runtime behavior change. */ typedef enum ProfileNameSpecifier { PNS_unknown = 0, PNS_default, @@ -93,9 +93,27 @@ typedef struct lprofFilename { COMPILER_RT_WEAK lprofFilename lprofCurFilename = {0, 0, 0, 0, {0}, {0}, 0, 0, 0, {0}, 0, PNS_unknown}; +static int ProfileMergeRequested = 0; +static int isProfileMergeRequested() { return ProfileMergeRequested; } +static void setProfileMergeRequested(int EnableMerge) { + ProfileMergeRequested = EnableMerge; +} + +static FILE *ProfileFile = NULL; +static FILE *getProfileFile() { return ProfileFile; } +static void setProfileFile(FILE *File) { ProfileFile = File; } + +COMPILER_RT_VISIBILITY void __llvm_profile_set_file_object(FILE *File, + int EnableMerge) { + setProfileFile(File); + setProfileMergeRequested(EnableMerge); +} + static int getCurFilenameLength(); static const char *getCurFilename(char *FilenameBuf, int ForceUseBuf); -static unsigned doMerging() { return lprofCurFilename.MergePoolSize; } +static unsigned doMerging() { + return lprofCurFilename.MergePoolSize || isProfileMergeRequested(); +} /* Return 1 if there is an error, otherwise return 0. */ static uint32_t fileWriter(ProfDataWriter *This, ProfDataIOVec *IOVecs, @@ -229,11 +247,16 @@ static void createProfileDir(const char *Filename) { * its instrumented shared libraries dump profile data into their own data file. */ static FILE *openFileForMerging(const char *ProfileFileName, int *MergeDone) { - FILE *ProfileFile; + FILE *ProfileFile = NULL; int rc; - createProfileDir(ProfileFileName); - ProfileFile = lprofOpenFileEx(ProfileFileName); + ProfileFile = getProfileFile(); + if (ProfileFile) { + lprofLockFileHandle(ProfileFile); + } else { + createProfileDir(ProfileFileName); + ProfileFile = lprofOpenFileEx(ProfileFileName); + } if (!ProfileFile) return NULL; @@ -248,6 +271,16 @@ static FILE *openFileForMerging(const char *ProfileFileName, int *MergeDone) { return ProfileFile; } +static FILE *getFileObject(const char *OutputName) { + FILE *File; + File = getProfileFile(); + if (File != NULL) { + return File; + } + + return fopen(OutputName, "ab"); +} + /* Write profile data to file \c OutputName. */ static int writeFile(const char *OutputName) { int RetVal; @@ -255,10 +288,10 @@ static int writeFile(const char *OutputName) { int MergeDone = 0; VPMergeHook = &lprofMergeValueProfData; - if (!doMerging()) - OutputFile = fopen(OutputName, "ab"); - else + if (doMerging()) OutputFile = openFileForMerging(OutputName, &MergeDone); + else + OutputFile = getFileObject(OutputName); if (!OutputFile) return -1; @@ -269,7 +302,15 @@ static int writeFile(const char *OutputName) { initFileWriter(&fileWriter, OutputFile); RetVal = lprofWriteData(&fileWriter, lprofGetVPDataReader(), MergeDone); - fclose(OutputFile); + if (OutputFile == getProfileFile()) { + fflush(OutputFile); + if (doMerging()) { + lprofUnlockFileHandle(OutputFile); + } + } else { + fclose(OutputFile); + } + return RetVal; } @@ -653,7 +694,7 @@ void __llvm_profile_initialize_file(void) { EnvFilenamePat = getFilenamePatFromEnv(); if (EnvFilenamePat) { - /* Pass CopyFilenamePat = 1, to ensure that the filename would be valid + /* Pass CopyFilenamePat = 1, to ensure that the filename would be valid at the moment when __llvm_profile_write_file() gets executed. */ parseAndSetFilename(EnvFilenamePat, PNS_environment, 1); return; @@ -689,8 +730,7 @@ int __llvm_profile_write_file(void) { int PDeathSig = 0; if (lprofProfileDumped()) { - PROF_NOTE("Profile data not written to file: %s.\n", - "already written"); + PROF_NOTE("Profile data not written to file: %s.\n", "already written"); return 0; } diff --git a/compiler-rt/lib/profile/InstrProfilingUtil.c b/compiler-rt/lib/profile/InstrProfilingUtil.c index 5e479ae7150ac..02d100792db86 100644 --- a/compiler-rt/lib/profile/InstrProfilingUtil.c +++ b/compiler-rt/lib/profile/InstrProfilingUtil.c @@ -154,6 +154,26 @@ COMPILER_RT_VISIBILITY int lprofUnlockFd(int fd) { #endif } +COMPILER_RT_VISIBILITY int lprofLockFileHandle(FILE *F) { + int fd; +#if defined(_WIN32) + fd = _fileno(F); +#else + fd = fileno(F); +#endif + return lprofLockFd(fd); +} + +COMPILER_RT_VISIBILITY int lprofUnlockFileHandle(FILE *F) { + int fd; +#if defined(_WIN32) + fd = _fileno(F); +#else + fd = fileno(F); +#endif + return lprofUnlockFd(fd); +} + COMPILER_RT_VISIBILITY FILE *lprofOpenFileEx(const char *ProfileName) { FILE *f; int fd; diff --git a/compiler-rt/lib/profile/InstrProfilingUtil.h b/compiler-rt/lib/profile/InstrProfilingUtil.h index 9cd0860fda237..efba94ca76396 100644 --- a/compiler-rt/lib/profile/InstrProfilingUtil.h +++ b/compiler-rt/lib/profile/InstrProfilingUtil.h @@ -23,6 +23,8 @@ unsigned __llvm_profile_get_dir_mode(void); int lprofLockFd(int fd); int lprofUnlockFd(int fd); +int lprofLockFileHandle(FILE *F); +int lprofUnlockFileHandle(FILE *F); /*! Open file \c Filename for read+write with write * lock for exclusive access. The caller will block diff --git a/compiler-rt/test/profile/instrprof-set-file-object-merging.c b/compiler-rt/test/profile/instrprof-set-file-object-merging.c new file mode 100644 index 0000000000000..3f71a8103561a --- /dev/null +++ b/compiler-rt/test/profile/instrprof-set-file-object-merging.c @@ -0,0 +1,43 @@ +// Test that the specified output merges the profiling data. +// Run the program twice so that the counters accumulate. +// RUN: %clang -fprofile-instr-generate -fcoverage-mapping -o %t %s +// RUN: %run %t %t.merging.profraw +// RUN: %run %t %t.merging.profraw +// RUN: test -f %t.merging.profraw +// RUN: llvm-profdata merge -o %t.merging.profdata %t.merging.profraw +// RUN: llvm-cov show -instr-profile %t.merging.profdata %t | FileCheck %s --match-full-lines +// RUN: rm %t.merging.profdata %t.merging.profraw +#include + +extern void __llvm_profile_set_file_object(FILE *, int); + +int main(int argc, const char *argv[]) { + if (argc < 2) + return 1; + + FILE *F = fopen(argv[1], "r+b"); + if (!F) { + // File might not exist, try opening with truncation + F = fopen(argv[1], "w+b"); + } + __llvm_profile_set_file_object(F, 1); + + return 0; +} +// CHECK: 10| |#include +// CHECK: 11| | +// CHECK: 12| |extern void __llvm_profile_set_file_object(FILE *, int); +// CHECK: 13| | +// CHECK: 14| 2|int main(int argc, const char *argv[]) { +// CHECK: 15| 2| if (argc < 2) +// CHECK: 16| 0| return 1; +// CHECK: 17| 2| +// CHECK: 18| 2| FILE *F = fopen(argv[1], "r+b"); +// CHECK: 19| 2| if (!F) { +// CHECK: 20| 1| // File might not exist, try opening with truncation +// CHECK: 21| 1| F = fopen(argv[1], "w+b"); +// CHECK: 22| 1| } +// CHECK: 23| 2| __llvm_profile_set_file_object(F, 1); +// CHECK: 24| 2| +// CHECK: 25| 2| return 0; +// CHECK: 26| 2|} diff --git a/compiler-rt/test/profile/instrprof-set-file-object.c b/compiler-rt/test/profile/instrprof-set-file-object.c new file mode 100644 index 0000000000000..813130007f04e --- /dev/null +++ b/compiler-rt/test/profile/instrprof-set-file-object.c @@ -0,0 +1,31 @@ +// Test that the specified output has profiling data. +// RUN: %clang -fprofile-instr-generate -fcoverage-mapping -o %t %s +// RUN: %run %t %t.file.profraw +// RUN: test -f %t.file.profraw +// RUN: llvm-profdata merge -o %t.file.profdata %t.file.profraw +// RUN: llvm-cov show -instr-profile %t.file.profdata %t | FileCheck %s --match-full-lines +// RUN: rm %t.file.profraw %t.file.profdata +#include + +extern void __llvm_profile_set_file_object(FILE *, int); + +int main(int argc, const char *argv[]) { + if (argc < 2) + return 1; + + FILE *F = fopen(argv[1], "w+b"); + __llvm_profile_set_file_object(F, 0); + return 0; +} +// CHECK: 8| |#include +// CHECK: 9| | +// CHECK: 10| |extern void __llvm_profile_set_file_object(FILE *, int); +// CHECK: 11| | +// CHECK: 12| 1|int main(int argc, const char *argv[]) { +// CHECK: 13| 1| if (argc < 2) +// CHECK: 14| 0| return 1; +// CHECK: 15| 1| +// CHECK: 16| 1| FILE *F = fopen(argv[1], "w+b"); +// CHECK: 17| 1| __llvm_profile_set_file_object(F, 0); +// CHECK: 18| 1| return 0; +// CHECK: 19| 1|} From e5c6f3b2d6bba6298c6a4051780c08057725b197 Mon Sep 17 00:00:00 2001 From: Vedant Kumar Date: Fri, 18 Oct 2019 23:33:40 +0000 Subject: [PATCH 10/24] [profile] Do not cache __llvm_profile_get_filename result When the %m filename pattern is used, the filename is unique to each image, so the cached value is wrong. It struck me that the full filename isn't something that's recomputed often, so perhaps it doesn't need to be cached at all. David Li pointed out we can go further and just hide lprofCurFilename. This may regress workflows that depend on using the set-filename API to change filenames across all loaded DSOs, but this is expected to be very rare. rdar://55137071 Differential Revision: https://reviews.llvm.org/D69137 llvm-svn: 375301 (cherry picked from commit 937241b0d9e8f896d4387292f01abf18ba9f9fcb) --- clang/lib/Driver/ToolChains/Darwin.cpp | 1 - clang/test/Driver/darwin-ld.c | 2 +- compiler-rt/lib/profile/InstrProfiling.h | 15 ++++++++++++++- compiler-rt/lib/profile/InstrProfilingFile.c | 11 ++--------- .../Inputs/instrprof-get-filename-dso.c | 5 +++++ .../Posix/instrprof-set-filename-shared.test | 8 -------- .../instrprof-get-filename-merge-mode.c | 18 ++++++++++++++++++ 7 files changed, 40 insertions(+), 20 deletions(-) create mode 100644 compiler-rt/test/profile/Inputs/instrprof-get-filename-dso.c delete mode 100644 compiler-rt/test/profile/Posix/instrprof-set-filename-shared.test create mode 100644 compiler-rt/test/profile/instrprof-get-filename-merge-mode.c diff --git a/clang/lib/Driver/ToolChains/Darwin.cpp b/clang/lib/Driver/ToolChains/Darwin.cpp index 0c4874107f4a5..fa0453ae75eb8 100644 --- a/clang/lib/Driver/ToolChains/Darwin.cpp +++ b/clang/lib/Driver/ToolChains/Darwin.cpp @@ -1132,7 +1132,6 @@ void Darwin::addProfileRTLibs(const ArgList &Args, } else { addExportedSymbol(CmdArgs, "___llvm_profile_filename"); addExportedSymbol(CmdArgs, "___llvm_profile_raw_version"); - addExportedSymbol(CmdArgs, "_lprofCurFilename"); } addExportedSymbol(CmdArgs, "_lprofDirMode"); } diff --git a/clang/test/Driver/darwin-ld.c b/clang/test/Driver/darwin-ld.c index f01eeb4ea28e0..12a9cf05c2402 100644 --- a/clang/test/Driver/darwin-ld.c +++ b/clang/test/Driver/darwin-ld.c @@ -355,7 +355,7 @@ // RUN: FileCheck -check-prefix=PROFILE_EXPORT %s < %t.log // RUN: %clang -target x86_64-apple-darwin12 -fprofile-instr-generate -Xlinker -exported_symbols_list -Xlinker /dev/null -### %t.o 2> %t.log // RUN: FileCheck -check-prefix=PROFILE_EXPORT %s < %t.log -// PROFILE_EXPORT: "-exported_symbol" "___llvm_profile_filename" "-exported_symbol" "___llvm_profile_raw_version" "-exported_symbol" "_lprofCurFilename" +// PROFILE_EXPORT: "-exported_symbol" "___llvm_profile_filename" "-exported_symbol" "___llvm_profile_raw_version" // // RUN: %clang -target x86_64-apple-darwin12 -fprofile-instr-generate --coverage -### %t.o 2> %t.log // RUN: FileCheck -check-prefix=NO_PROFILE_EXPORT %s < %t.log diff --git a/compiler-rt/lib/profile/InstrProfiling.h b/compiler-rt/lib/profile/InstrProfiling.h index 4d196a89b4920..3de30584d74dc 100644 --- a/compiler-rt/lib/profile/InstrProfiling.h +++ b/compiler-rt/lib/profile/InstrProfiling.h @@ -155,6 +155,10 @@ int __llvm_orderfile_dump(void); * * \c Name is not copied, so it must remain valid. Passing NULL resets the * filename logic to the default behaviour. + * + * Note: There may be multiple copies of the profile runtime (one for each + * instrumented image/DSO). This API only modifies the filename within the + * copy of the runtime available to the calling image. */ void __llvm_profile_set_filename(const char *Name); @@ -173,6 +177,10 @@ void __llvm_profile_set_filename(const char *Name); * with the contents of the profiling file. If EnableMerge is zero, the runtime * may still merge the data if it would have merged for another reason (for * example, because of a %m specifier in the file name). + * + * Note: There may be multiple copies of the profile runtime (one for each + * instrumented image/DSO). This API only modifies the file object within the + * copy of the runtime available to the calling image. */ void __llvm_profile_set_file_object(FILE *File, int EnableMerge); @@ -196,7 +204,12 @@ const char *__llvm_profile_get_path_prefix(); * \brief Return filename (including path) of the profile data. Note that if the * user calls __llvm_profile_set_filename later after invoking this interface, * the actual file name may differ from what is returned here. - * Side-effect: this API call will invoke malloc with dynamic memory allocation. + * Side-effect: this API call will invoke malloc with dynamic memory allocation + * (the returned pointer must be passed to `free` to avoid a leak). + * + * Note: There may be multiple copies of the profile runtime (one for each + * instrumented image/DSO). This API only retrieves the filename from the copy + * of the runtime available to the calling image. */ const char *__llvm_profile_get_filename(); diff --git a/compiler-rt/lib/profile/InstrProfilingFile.c b/compiler-rt/lib/profile/InstrProfilingFile.c index 9a47293f68c3b..55e11ef3e2db0 100644 --- a/compiler-rt/lib/profile/InstrProfilingFile.c +++ b/compiler-rt/lib/profile/InstrProfilingFile.c @@ -72,7 +72,6 @@ typedef struct lprofFilename { * by runtime. */ unsigned OwnsFilenamePat; const char *ProfilePathPrefix; - const char *Filename; char PidChars[MAX_PID_SIZE]; char Hostname[COMPILER_RT_MAX_HOSTLEN]; unsigned NumPids; @@ -90,8 +89,8 @@ typedef struct lprofFilename { ProfileNameSpecifier PNS; } lprofFilename; -COMPILER_RT_WEAK lprofFilename lprofCurFilename = {0, 0, 0, 0, {0}, - {0}, 0, 0, 0, {0}, 0, PNS_unknown}; +static lprofFilename lprofCurFilename = {0, 0, 0, {0}, {0}, 0, + 0, 0, {0}, 0, PNS_unknown}; static int ProfileMergeRequested = 0; static int isProfileMergeRequested() { return ProfileMergeRequested; } @@ -423,8 +422,6 @@ static int parseFilenamePattern(const char *FilenamePat, /* Clean up cached prefix and filename. */ if (lprofCurFilename.ProfilePathPrefix) free((void *)lprofCurFilename.ProfilePathPrefix); - if (lprofCurFilename.Filename) - free((void *)lprofCurFilename.Filename); if (lprofCurFilename.FilenamePat && lprofCurFilename.OwnsFilenamePat) { free((void *)lprofCurFilename.FilenamePat); @@ -664,9 +661,6 @@ const char *__llvm_profile_get_filename(void) { char *FilenameBuf; const char *Filename; - if (lprofCurFilename.Filename) - return lprofCurFilename.Filename; - Length = getCurFilenameLength(); FilenameBuf = (char *)malloc(Length + 1); if (!FilenameBuf) { @@ -677,7 +671,6 @@ const char *__llvm_profile_get_filename(void) { if (!Filename) return "\0"; - lprofCurFilename.Filename = FilenameBuf; return FilenameBuf; } diff --git a/compiler-rt/test/profile/Inputs/instrprof-get-filename-dso.c b/compiler-rt/test/profile/Inputs/instrprof-get-filename-dso.c new file mode 100644 index 0000000000000..2709434003451 --- /dev/null +++ b/compiler-rt/test/profile/Inputs/instrprof-get-filename-dso.c @@ -0,0 +1,5 @@ +const char *__llvm_profile_get_filename(void); + +const char *get_filename_from_DSO(void) { + return __llvm_profile_get_filename(); +} diff --git a/compiler-rt/test/profile/Posix/instrprof-set-filename-shared.test b/compiler-rt/test/profile/Posix/instrprof-set-filename-shared.test deleted file mode 100644 index 439c6c0dda8fa..0000000000000 --- a/compiler-rt/test/profile/Posix/instrprof-set-filename-shared.test +++ /dev/null @@ -1,8 +0,0 @@ -# Test that __llvm_profile_set_filename is honored by shared libary too. -RUN: mkdir -p %t.d -RUN: %clang_profgen=%t.shared.profraw -fPIC -shared -o %t.d/t.shared %S/../Inputs/instrprof-dlopen-func.c -RUN: %clang_profgen -DCALL_SHARED -o %t.m -O3 -rpath %t.d %t.d/t.shared %S/../instrprof-set-filename.c -RUN: %run %t.m %t.main.profraw -RUN: llvm-profdata show %t.main.profraw | FileCheck --check-prefix=SHARED %s - -# SHARED: Total functions: 2 diff --git a/compiler-rt/test/profile/instrprof-get-filename-merge-mode.c b/compiler-rt/test/profile/instrprof-get-filename-merge-mode.c new file mode 100644 index 0000000000000..c6e2fca22d194 --- /dev/null +++ b/compiler-rt/test/profile/instrprof-get-filename-merge-mode.c @@ -0,0 +1,18 @@ +// Test __llvm_profile_get_filename when the on-line merging mode is enabled. +// +// RUN: %clang_pgogen -dynamiclib -o %t.dso %p/Inputs/instrprof-get-filename-dso.c +// RUN: %clang_pgogen -o %t %s %t.dso +// RUN: env LLVM_PROFILE_FILE="%t-%m.profraw" %run %t + +#include + +const char *__llvm_profile_get_filename(void); +extern const char *get_filename_from_DSO(void); + +int main(int argc, const char *argv[]) { + const char *filename1 = __llvm_profile_get_filename(); + const char *filename2 = get_filename_from_DSO(); + + // Exit with code 1 if the two filenames are the same. + return strcmp(filename1, filename2) == 0; +} From f0c6a1e49d70bbe3d65b8ece136379280dec8486 Mon Sep 17 00:00:00 2001 From: Vedant Kumar Date: Sat, 19 Oct 2019 00:46:53 +0000 Subject: [PATCH 11/24] [profile] Disable instrprof-get-filename-merge-mode.c on Windows The Windows bots are failing with: clang: warning: argument unused during compilation: '-dynamiclib' [-Wunused-command-line-argument] llvm-svn: 375315 (cherry picked from commit f6a46304174e7a31f5f18d18a5a3a24eaddf35f0) --- .../test/profile/{ => Posix}/instrprof-get-filename-merge-mode.c | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename compiler-rt/test/profile/{ => Posix}/instrprof-get-filename-merge-mode.c (100%) diff --git a/compiler-rt/test/profile/instrprof-get-filename-merge-mode.c b/compiler-rt/test/profile/Posix/instrprof-get-filename-merge-mode.c similarity index 100% rename from compiler-rt/test/profile/instrprof-get-filename-merge-mode.c rename to compiler-rt/test/profile/Posix/instrprof-get-filename-merge-mode.c From 8bc4f02d7b8e1ae48b490ac57490c9a2f036ea9f Mon Sep 17 00:00:00 2001 From: Vedant Kumar Date: Sat, 19 Oct 2019 00:51:27 +0000 Subject: [PATCH 12/24] [profile] Use -fPIC -shared in a test instead of -dynamiclib This is more portable than -dynamiclib. Also, fix the path to an input file that broke when the test was moved in r375315. llvm-svn: 375317 (cherry picked from commit b081220cfd46965fa25dbf826cd3f42f4f9e54cd) --- .../test/profile/Posix/instrprof-get-filename-merge-mode.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/compiler-rt/test/profile/Posix/instrprof-get-filename-merge-mode.c b/compiler-rt/test/profile/Posix/instrprof-get-filename-merge-mode.c index c6e2fca22d194..7e26e3e6b5dd3 100644 --- a/compiler-rt/test/profile/Posix/instrprof-get-filename-merge-mode.c +++ b/compiler-rt/test/profile/Posix/instrprof-get-filename-merge-mode.c @@ -1,6 +1,6 @@ // Test __llvm_profile_get_filename when the on-line merging mode is enabled. // -// RUN: %clang_pgogen -dynamiclib -o %t.dso %p/Inputs/instrprof-get-filename-dso.c +// RUN: %clang_pgogen -fPIC -shared -o %t.dso %p/../Inputs/instrprof-get-filename-dso.c // RUN: %clang_pgogen -o %t %s %t.dso // RUN: env LLVM_PROFILE_FILE="%t-%m.profraw" %run %t From 38f7fcd84abb934f8cdfef433d0c8aebf3f71d23 Mon Sep 17 00:00:00 2001 From: Vedant Kumar Date: Thu, 19 Sep 2019 11:56:43 -0700 Subject: [PATCH 13/24] [profile] Add a mode to continuously sync counter updates to a file Add support for continuously syncing profile counter updates to a file. The motivation for this is that programs do not always exit cleanly. On iOS, for example, programs are usually killed via a signal from the OS. Running atexit() handlers after catching a signal is unreliable, so some method for progressively writing out profile data is necessary. The approach taken here is to mmap() the `__llvm_prf_cnts` section onto a raw profile. To do this, the linker must page-align the counter and data sections, and the runtime must ensure that counters are mapped to a page-aligned offset within a raw profile. Continuous mode is (for the moment) incompatible with the online merging mode. This limitation is lifted in https://reviews.llvm.org/D69586. Continuous mode is also (for the moment) incompatible with value profiling, as I'm not sure whether there is interest in this and the implementation may be tricky. As I have not been able to test extensively on non-Darwin platforms, only Darwin support is included for the moment. However, continuous mode may "just work" without modification on Linux and some UNIX-likes. AIUI the default value for the GNU linker's `--section-alignment` flag is set to the page size on many systems. This appears to be true for LLD as well, as its `no_nmagic` option is on by default. Continuous mode will not "just work" on Fuchsia or Windows, as it's not possible to mmap() a section on these platforms. There is a proposal to add a layer of indirection to the profile instrumentation to support these platforms. rdar://54210980 Differential Revision: https://reviews.llvm.org/D68351 (cherry picked from commit d889d1efefe9f97507e3eafa85a2e3939df9750f) --- clang/docs/SourceBasedCodeCoverage.rst | 10 ++ clang/lib/Driver/ToolChains/Darwin.cpp | 36 ++++- clang/test/Driver/darwin-ld.c | 6 + compiler-rt/lib/profile/InstrProfData.inc | 4 +- compiler-rt/lib/profile/InstrProfiling.h | 46 ++++++ .../lib/profile/InstrProfilingBuffer.c | 74 ++++++++- compiler-rt/lib/profile/InstrProfilingFile.c | 146 ++++++++++++++++- compiler-rt/lib/profile/InstrProfilingPort.h | 10 ++ .../lib/profile/InstrProfilingRuntime.cc | 3 +- .../lib/profile/InstrProfilingWriter.c | 22 ++- .../test/profile/ContinuousSyncMode/basic.c | 32 ++++ .../darwin-proof-of-concept.c | 151 ++++++++++++++++++ .../ContinuousSyncMode/lit.local.cfg.py | 18 +++ .../ContinuousSyncMode/multiple-DSOs.c | 35 ++++ .../ContinuousSyncMode/pid-substitution.c | 34 ++++ .../ContinuousSyncMode/set-file-object.c | 32 ++++ .../profile/ContinuousSyncMode/set-filename.c | 17 ++ .../llvm/ProfileData/InstrProfData.inc | 6 +- llvm/lib/ProfileData/InstrProfReader.cpp | 8 +- .../llvm-profdata/Inputs/c-general.profraw | Bin 1680 -> 1696 bytes llvm/test/tools/llvm-profdata/c-general.test | 4 +- .../malformed-ptr-to-counter-array.test | 4 +- .../tools/llvm-profdata/raw-32-bits-be.test | 4 +- .../tools/llvm-profdata/raw-32-bits-le.test | 4 +- .../tools/llvm-profdata/raw-64-bits-be.test | 4 +- .../tools/llvm-profdata/raw-64-bits-le.test | 4 +- .../tools/llvm-profdata/raw-two-profiles.test | 8 +- 27 files changed, 697 insertions(+), 25 deletions(-) create mode 100644 compiler-rt/test/profile/ContinuousSyncMode/basic.c create mode 100644 compiler-rt/test/profile/ContinuousSyncMode/darwin-proof-of-concept.c create mode 100644 compiler-rt/test/profile/ContinuousSyncMode/lit.local.cfg.py create mode 100644 compiler-rt/test/profile/ContinuousSyncMode/multiple-DSOs.c create mode 100644 compiler-rt/test/profile/ContinuousSyncMode/pid-substitution.c create mode 100644 compiler-rt/test/profile/ContinuousSyncMode/set-file-object.c create mode 100644 compiler-rt/test/profile/ContinuousSyncMode/set-filename.c diff --git a/clang/docs/SourceBasedCodeCoverage.rst b/clang/docs/SourceBasedCodeCoverage.rst index 27a1950a16028..0beb284e475ee 100644 --- a/clang/docs/SourceBasedCodeCoverage.rst +++ b/clang/docs/SourceBasedCodeCoverage.rst @@ -87,6 +87,16 @@ directory structure will be created. Additionally, the following special be between 1 and 9. The merge pool specifier can only occur once per filename pattern. +* "%c" expands out to nothing, but enables a mode in which profile counter + updates are continuously synced to a file. This means that if the + instrumented program crashes, or is killed by a signal, perfect coverage + information can still be recovered. Continuous mode is not yet compatible with + the "%Nm" merging mode described above, does not support value profiling for + PGO, and is only supported on Darwin. Support for Linux may be mostly + complete but requires testing, and support for Fuchsia/Windows may require + more extensive changes: please get involved if you are interested in porting + this feature. + .. code-block:: console # Step 2: Run the program. diff --git a/clang/lib/Driver/ToolChains/Darwin.cpp b/clang/lib/Driver/ToolChains/Darwin.cpp index fa0453ae75eb8..31fb95c29c191 100644 --- a/clang/lib/Driver/ToolChains/Darwin.cpp +++ b/clang/lib/Driver/ToolChains/Darwin.cpp @@ -19,6 +19,7 @@ #include "clang/Driver/SanitizerArgs.h" #include "llvm/ADT/StringSwitch.h" #include "llvm/Option/ArgList.h" +#include "llvm/ProfileData/InstrProf.h" #include "llvm/Support/Path.h" #include "llvm/Support/ScopedPrinter.h" #include "llvm/Support/TargetParser.h" @@ -1114,6 +1115,19 @@ static void addExportedSymbol(ArgStringList &CmdArgs, const char *Symbol) { CmdArgs.push_back(Symbol); } +/// Add a sectalign directive for \p Segment and \p Section to the maximum +/// expected page size for Darwin. +/// +/// On iPhone 6+ the max supported page size is 16K. On macOS, the max is 4K. +/// Use a common alignment constant (16K) for now, and reduce the alignment on +/// macOS if it proves important. +static void addSectalignToPage(const ArgList &Args, ArgStringList &CmdArgs, + StringRef Segment, StringRef Section) { + for (const char *A : {"-sectalign", Args.MakeArgString(Segment), + Args.MakeArgString(Section), "0x4000"}) + CmdArgs.push_back(A); +} + void Darwin::addProfileRTLibs(const ArgList &Args, ArgStringList &CmdArgs) const { if (!needsProfileRT(Args)) return; @@ -1121,11 +1135,13 @@ void Darwin::addProfileRTLibs(const ArgList &Args, AddLinkRuntimeLib(Args, CmdArgs, "profile", RuntimeLinkOptions(RLO_AlwaysLink | RLO_FirstLink)); + bool ForGCOV = needsGCovInstrumentation(Args); + // If we have a symbol export directive and we're linking in the profile // runtime, automatically export symbols necessary to implement some of the // runtime's functionality. if (hasExportSymbolDirective(Args)) { - if (needsGCovInstrumentation(Args)) { + if (ForGCOV) { addExportedSymbol(CmdArgs, "___gcov_flush"); addExportedSymbol(CmdArgs, "_flush_fn_list"); addExportedSymbol(CmdArgs, "_writeout_fn_list"); @@ -1135,6 +1151,24 @@ void Darwin::addProfileRTLibs(const ArgList &Args, } addExportedSymbol(CmdArgs, "_lprofDirMode"); } + + // Align __llvm_prf_{cnts,data} sections to the maximum expected page + // alignment. This allows profile counters to be mmap()'d to disk. Note that + // it's not enough to just page-align __llvm_prf_cnts: the following section + // must also be page-aligned so that its data is not clobbered by mmap(). + // + // The section alignment is only needed when continuous profile sync is + // enabled, but this is expected to be the default in Xcode. Specifying the + // extra alignment also allows the same binary to be used with/without sync + // enabled. + if (!ForGCOV) { + for (auto IPSK : {llvm::IPSK_cnts, llvm::IPSK_data}) { + addSectalignToPage( + Args, CmdArgs, "__DATA", + llvm::getInstrProfSectionName(IPSK, llvm::Triple::MachO, + /*AddSegmentInfo=*/false)); + } + } } void DarwinClang::AddLinkSanitizerLibArgs(const ArgList &Args, diff --git a/clang/test/Driver/darwin-ld.c b/clang/test/Driver/darwin-ld.c index 12a9cf05c2402..a9f2988ec2f39 100644 --- a/clang/test/Driver/darwin-ld.c +++ b/clang/test/Driver/darwin-ld.c @@ -345,6 +345,12 @@ // RUN: FileCheck -check-prefix=LINK_PROFILE_FIRST %s < %t.log // LINK_PROFILE_FIRST: {{ld(.exe)?"}} "{{[^"]+}}libclang_rt.profile_{{[a-z]+}}.a" +// RUN: %clang -target x86_64-apple-darwin12 -fprofile-instr-generate -### %t.o 2> %t.log +// RUN: FileCheck -check-prefix=PROFILE_SECTALIGN %s < %t.log +// RUN: %clang -target arm64-apple-ios12 -fprofile-instr-generate -### %t.o 2> %t.log +// RUN: FileCheck -check-prefix=PROFILE_SECTALIGN %s < %t.log +// PROFILE_SECTALIGN: "-sectalign" "__DATA" "__llvm_prf_cnts" "0x4000" "-sectalign" "__DATA" "__llvm_prf_data" "0x4000" + // RUN: %clang -target x86_64-apple-darwin12 -fprofile-instr-generate -exported_symbols_list /dev/null -### %t.o 2> %t.log // RUN: FileCheck -check-prefix=PROFILE_EXPORT %s < %t.log // RUN: %clang -target x86_64-apple-darwin12 -fprofile-instr-generate -Wl,-exported_symbols_list,/dev/null -### %t.o 2> %t.log diff --git a/compiler-rt/lib/profile/InstrProfData.inc b/compiler-rt/lib/profile/InstrProfData.inc index 7078af5f4cf8d..99f41d8fef077 100644 --- a/compiler-rt/lib/profile/InstrProfData.inc +++ b/compiler-rt/lib/profile/InstrProfData.inc @@ -130,7 +130,9 @@ INSTR_PROF_VALUE_NODE(PtrToNodeT, llvm::Type::getInt8PtrTy(Ctx), Next, \ INSTR_PROF_RAW_HEADER(uint64_t, Magic, __llvm_profile_get_magic()) INSTR_PROF_RAW_HEADER(uint64_t, Version, __llvm_profile_get_version()) INSTR_PROF_RAW_HEADER(uint64_t, DataSize, DataSize) +INSTR_PROF_RAW_HEADER(uint64_t, PaddingBytesBeforeCounters, PaddingBytesBeforeCounters) INSTR_PROF_RAW_HEADER(uint64_t, CountersSize, CountersSize) +INSTR_PROF_RAW_HEADER(uint64_t, PaddingBytesAfterCounters, PaddingBytesAfterCounters) INSTR_PROF_RAW_HEADER(uint64_t, NamesSize, NamesSize) INSTR_PROF_RAW_HEADER(uint64_t, CountersDelta, (uintptr_t)CountersBegin) INSTR_PROF_RAW_HEADER(uint64_t, NamesDelta, (uintptr_t)NamesBegin) @@ -628,7 +630,7 @@ serializeValueProfDataFrom(ValueProfRecordClosure *Closure, (uint64_t)'f' << 16 | (uint64_t)'R' << 8 | (uint64_t)129 /* Raw profile format version (start from 1). */ -#define INSTR_PROF_RAW_VERSION 4 +#define INSTR_PROF_RAW_VERSION 5 /* Indexed profile format version (start from 1). */ #define INSTR_PROF_INDEX_VERSION 5 /* Coverage mapping format vresion (start from 0). */ diff --git a/compiler-rt/lib/profile/InstrProfiling.h b/compiler-rt/lib/profile/InstrProfiling.h index 3de30584d74dc..a992de4c83799 100644 --- a/compiler-rt/lib/profile/InstrProfiling.h +++ b/compiler-rt/lib/profile/InstrProfiling.h @@ -38,6 +38,22 @@ typedef struct ValueProfNode { #include "InstrProfData.inc" } ValueProfNode; +/*! + * \brief Return 1 if profile counters are continuously synced to the raw + * profile via an mmap(). This is in contrast to the default mode, in which + * the raw profile is written out at program exit time. + */ +int __llvm_profile_is_continuous_mode_enabled(void); + +/*! + * \brief Enable continuous mode. + * + * See \ref __llvm_profile_is_continuous_mode_enabled. The behavior is undefined + * if continuous mode is already enabled, or if it cannot be enable due to + * conflicting options. + */ +void __llvm_profile_enable_continuous_mode(void); + /*! * \brief Get number of bytes necessary to pad the argument to eight * byte boundary. @@ -159,6 +175,12 @@ int __llvm_orderfile_dump(void); * Note: There may be multiple copies of the profile runtime (one for each * instrumented image/DSO). This API only modifies the filename within the * copy of the runtime available to the calling image. + * + * Warning: This is a no-op if continuous mode (\ref + * __llvm_profile_is_continuous_mode_enabled) is on. The reason for this is + * that in continuous mode, profile counters are mmap()'d to the profile at + * program initialization time. Support for transferring the mmap'd profile + * counts to a new file has not been implemented. */ void __llvm_profile_set_filename(const char *Name); @@ -181,6 +203,12 @@ void __llvm_profile_set_filename(const char *Name); * Note: There may be multiple copies of the profile runtime (one for each * instrumented image/DSO). This API only modifies the file object within the * copy of the runtime available to the calling image. + * + * Warning: This is a no-op if continuous mode (\ref + * __llvm_profile_is_continuous_mode_enabled) is on. The reason for this is + * that in continuous mode, profile counters are mmap()'d to the profile at + * program initialization time. Support for transferring the mmap'd profile + * counts to a new file has not been implemented. */ void __llvm_profile_set_file_object(FILE *File, int EnableMerge); @@ -223,6 +251,24 @@ uint64_t __llvm_profile_get_version(void); uint64_t __llvm_profile_get_data_size(const __llvm_profile_data *Begin, const __llvm_profile_data *End); +/* ! \brief Given the sizes of the data and counter information, return the + * number of padding bytes before and after the counters, and after the names, + * in the raw profile. + * + * Note: In this context, "size" means "number of entries", i.e. the first two + * arguments must be the result of __llvm_profile_get_data_size() and of + * (__llvm_profile_end_counters() - __llvm_profile_begin_counters()) resp. + * + * Note: When mmap() mode is disabled, no padding bytes before/after counters + * are needed. However, in mmap() mode, the counter section in the raw profile + * must be page-aligned: this API computes the number of padding bytes + * needed to achieve that. + */ +void __llvm_profile_get_padding_sizes_for_counters( + uint64_t DataSize, uint64_t CountersSize, uint64_t NamesSize, + uint64_t *PaddingBytesBeforeCounters, uint64_t *PaddingBytesAfterCounters, + uint64_t *PaddingBytesAfterNames); + /*! * \brief Set the flag that profile data has been dumped to the file. * This is useful for users to disable dumping profile data to the file for diff --git a/compiler-rt/lib/profile/InstrProfilingBuffer.c b/compiler-rt/lib/profile/InstrProfilingBuffer.c index 5bdeb8e328078..089ff5a0153d3 100644 --- a/compiler-rt/lib/profile/InstrProfilingBuffer.c +++ b/compiler-rt/lib/profile/InstrProfilingBuffer.c @@ -8,6 +8,27 @@ #include "InstrProfiling.h" #include "InstrProfilingInternal.h" +#include "InstrProfilingPort.h" + +/* When continuous mode is enabled (%c), this parameter is set to 1. This is + * incompatible with the in-process merging mode. Lifting this restriction + * may be complicated, as merging mode requires a lock on the profile, and + * mmap() mode would require that lock to be held for the entire process + * lifetime. + * + * This parameter is defined here in InstrProfilingBuffer.o, instead of in + * InstrProfilingFile.o, to sequester all libc-dependent code in + * InstrProfilingFile.o. The test `instrprof-without-libc` will break if this + * layering is violated. */ +static int ContinuouslySyncProfile = 0; + +COMPILER_RT_VISIBILITY int __llvm_profile_is_continuous_mode_enabled(void) { + return ContinuouslySyncProfile; +} + +COMPILER_RT_VISIBILITY void __llvm_profile_enable_continuous_mode(void) { + ContinuouslySyncProfile = 1; +} COMPILER_RT_VISIBILITY uint64_t __llvm_profile_get_size_for_buffer(void) { @@ -30,6 +51,41 @@ uint64_t __llvm_profile_get_data_size(const __llvm_profile_data *Begin, sizeof(__llvm_profile_data); } +/// Calculate the number of padding bytes needed to add to \p Offset in order +/// for (\p Offset + Padding) to be page-aligned. +static uint64_t calculateBytesNeededToPageAlign(uint64_t Offset, + unsigned PageSize) { + uint64_t OffsetModPage = Offset % PageSize; + if (OffsetModPage > 0) + return PageSize - OffsetModPage; + return 0; +} + +COMPILER_RT_VISIBILITY +void __llvm_profile_get_padding_sizes_for_counters( + uint64_t DataSize, uint64_t CountersSize, uint64_t NamesSize, + uint64_t *PaddingBytesBeforeCounters, uint64_t *PaddingBytesAfterCounters, + uint64_t *PaddingBytesAfterNames) { + if (!__llvm_profile_is_continuous_mode_enabled()) { + *PaddingBytesBeforeCounters = 0; + *PaddingBytesAfterCounters = 0; + *PaddingBytesAfterNames = __llvm_profile_get_num_padding_bytes(NamesSize); + return; + } + + // In continuous mode, the file offsets for headers and for the start of + // counter sections need to be page-aligned. + unsigned PageSize = getpagesize(); + uint64_t DataSizeInBytes = DataSize * sizeof(__llvm_profile_data); + uint64_t CountersSizeInBytes = CountersSize * sizeof(uint64_t); + *PaddingBytesBeforeCounters = calculateBytesNeededToPageAlign( + sizeof(__llvm_profile_header) + DataSizeInBytes, PageSize); + *PaddingBytesAfterCounters = + calculateBytesNeededToPageAlign(CountersSizeInBytes, PageSize); + *PaddingBytesAfterNames = + calculateBytesNeededToPageAlign(NamesSize, PageSize); +} + COMPILER_RT_VISIBILITY uint64_t __llvm_profile_get_size_for_buffer_internal( const __llvm_profile_data *DataBegin, const __llvm_profile_data *DataEnd, @@ -37,11 +93,21 @@ uint64_t __llvm_profile_get_size_for_buffer_internal( const char *NamesBegin, const char *NamesEnd) { /* Match logic in __llvm_profile_write_buffer(). */ const uint64_t NamesSize = (NamesEnd - NamesBegin) * sizeof(char); - const uint8_t Padding = __llvm_profile_get_num_padding_bytes(NamesSize); + uint64_t DataSize = __llvm_profile_get_data_size(DataBegin, DataEnd); + uint64_t CountersSize = CountersEnd - CountersBegin; + + /* Determine how much padding is needed before/after the counters and after + * the names. */ + uint64_t PaddingBytesBeforeCounters, PaddingBytesAfterCounters, + PaddingBytesAfterNames; + __llvm_profile_get_padding_sizes_for_counters( + DataSize, CountersSize, NamesSize, &PaddingBytesBeforeCounters, + &PaddingBytesAfterCounters, &PaddingBytesAfterNames); + return sizeof(__llvm_profile_header) + - (__llvm_profile_get_data_size(DataBegin, DataEnd) * - sizeof(__llvm_profile_data)) + - (CountersEnd - CountersBegin) * sizeof(uint64_t) + NamesSize + Padding; + (DataSize * sizeof(__llvm_profile_data)) + PaddingBytesBeforeCounters + + (CountersSize * sizeof(uint64_t)) + PaddingBytesAfterCounters + + NamesSize + PaddingBytesAfterNames; } COMPILER_RT_VISIBILITY diff --git a/compiler-rt/lib/profile/InstrProfilingFile.c b/compiler-rt/lib/profile/InstrProfilingFile.c index 55e11ef3e2db0..1295b84a16c77 100644 --- a/compiler-rt/lib/profile/InstrProfilingFile.c +++ b/compiler-rt/lib/profile/InstrProfilingFile.c @@ -33,6 +33,7 @@ #include "InstrProfiling.h" #include "InstrProfilingInternal.h" +#include "InstrProfilingPort.h" #include "InstrProfilingUtil.h" /* From where is profile name specified. @@ -104,6 +105,12 @@ static void setProfileFile(FILE *File) { ProfileFile = File; } COMPILER_RT_VISIBILITY void __llvm_profile_set_file_object(FILE *File, int EnableMerge) { + if (__llvm_profile_is_continuous_mode_enabled()) { + PROF_WARN("__llvm_profile_set_file_object(fd=%d) not supported, because " + "continuous sync mode (%%c) is enabled", + fileno(File)); + return; + } setProfileFile(File); setProfileMergeRequested(EnableMerge); } @@ -351,6 +358,15 @@ static void truncateCurrentFile(void) { if (lprofCurFilename.MergePoolSize) return; + /* Only create the profile directory and truncate an existing profile once. + * In continuous mode, this is necessary, as the profile is written-to by the + * runtime initializer. */ + const char *lprofInitOnceEnv = "__LLVM_PROFILE_RT_INIT_ONCE"; + int initialized = getenv(lprofInitOnceEnv) != NULL; + if (initialized) + return; + setenv(lprofInitOnceEnv, lprofInitOnceEnv, 1); + createProfileDir(Filename); /* Truncate the file. Later we'll reopen and append. */ @@ -366,6 +382,13 @@ static void exitSignalHandler(int sig) { } static void installExitSignalHandlers(void) { + if (__llvm_profile_is_continuous_mode_enabled()) { + PROF_WARN( + "%s", + "Not installing exit handlers because continuous mode is enabled."); + return; + } + unsigned I; struct sigaction sigact; int err; @@ -380,6 +403,99 @@ static void installExitSignalHandlers(void) { } } +static void initializeProfileForContinuousMode(void) { +#if defined(__Fuchsia__) || defined(_WIN32) + PROF_ERR("%s\n", "Continuous mode not yet supported on Fuchsia or Windows."); +#else // defined(__Fuchsia__) || defined(_WIN32) + if (!__llvm_profile_is_continuous_mode_enabled()) + return; + + /* Get the sizes of various profile data sections. Taken from + * __llvm_profile_get_size_for_buffer(). */ + const __llvm_profile_data *DataBegin = __llvm_profile_begin_data(); + const __llvm_profile_data *DataEnd = __llvm_profile_end_data(); + const uint64_t *CountersBegin = __llvm_profile_begin_counters(); + const uint64_t *CountersEnd = __llvm_profile_end_counters(); + const char *NamesBegin = __llvm_profile_begin_names(); + const char *NamesEnd = __llvm_profile_end_names(); + const uint64_t NamesSize = (NamesEnd - NamesBegin) * sizeof(char); + uint64_t DataSize = __llvm_profile_get_data_size(DataBegin, DataEnd); + uint64_t CountersSize = CountersEnd - CountersBegin; + + /* Check that the counter and data sections in this image are page-aligned. */ + unsigned PageSize = getpagesize(); + if ((intptr_t)CountersBegin % PageSize != 0) { + PROF_ERR("Counters section not page-aligned (start = %p, pagesz = %u).\n", + CountersBegin, PageSize); + return; + } + if ((intptr_t)DataBegin % PageSize != 0) { + PROF_ERR("Data section not page-aligned (start = %p, pagesz = %u).\n", + DataBegin, PageSize); + return; + } + + /* Open the raw profile in append mode. */ + int Length = getCurFilenameLength(); + char *FilenameBuf = (char *)COMPILER_RT_ALLOCA(Length + 1); + const char *Filename = getCurFilename(FilenameBuf, 0); + if (!Filename) + return; + FILE *File = fopen(Filename, "a+b"); + if (!File) + return; + + int Fileno = fileno(File); + + /* Check that the offset within the file is page-aligned. */ + off_t CurrentFileOffset = ftello(File); + off_t OffsetModPage = CurrentFileOffset % PageSize; + if (OffsetModPage != 0) { + PROF_ERR("Continuous counter sync mode is enabled, but raw profile is not" + "page-aligned. CurrentFileOffset = %lld, pagesz = %u.\n", + CurrentFileOffset, PageSize); + return; + } + + /* Determine how much padding is needed before/after the counters and after + * the names. */ + uint64_t PaddingBytesBeforeCounters, PaddingBytesAfterCounters, + PaddingBytesAfterNames; + __llvm_profile_get_padding_sizes_for_counters( + DataSize, CountersSize, NamesSize, &PaddingBytesBeforeCounters, + &PaddingBytesAfterCounters, &PaddingBytesAfterNames); + + uint64_t PageAlignedCountersLength = + (CountersSize * sizeof(uint64_t)) + PaddingBytesAfterCounters; + uint64_t FileOffsetToCounters = + CurrentFileOffset + sizeof(__llvm_profile_header) + + (DataSize * sizeof(__llvm_profile_data)) + PaddingBytesBeforeCounters; + + /* Write the partial profile. This grows the file to a point where the mmap() + * can succeed. Leak the file handle, as the file should stay open. */ + setProfileFile(File); + int rc = writeFile(Filename); + if (rc) + PROF_ERR("Failed to write file \"%s\": %s\n", Filename, strerror(errno)); + setProfileFile(NULL); + + uint64_t *CounterMmap = (uint64_t *)mmap( + (void *)CountersBegin, PageAlignedCountersLength, PROT_READ | PROT_WRITE, + MAP_FIXED | MAP_SHARED, Fileno, FileOffsetToCounters); + if (CounterMmap != CountersBegin) { + PROF_ERR( + "Continuous counter sync mode is enabled, but mmap() failed (%s).\n" + " - CountersBegin: %p\n" + " - PageAlignedCountersLength: %llu\n" + " - Fileno: %d\n" + " - FileOffsetToCounters: %llu\n", + strerror(errno), CountersBegin, PageAlignedCountersLength, Fileno, + FileOffsetToCounters); + return; + } +#endif // defined(__Fuchsia__) || defined(_WIN32) +} + static const char *DefaultProfileName = "default.profraw"; static void resetFilenameToDefault(void) { if (lprofCurFilename.FilenamePat && lprofCurFilename.OwnsFilenamePat) { @@ -455,12 +571,33 @@ static int parseFilenamePattern(const char *FilenamePat, FilenamePat); return -1; } + } else if (FilenamePat[I] == 'c') { + if (__llvm_profile_is_continuous_mode_enabled()) { + PROF_WARN("%%c specifier can only be specified once in %s.\n", + FilenamePat); + return -1; + } + if (MergingEnabled) { + PROF_WARN("%%c specifier can not be used with profile merging (%%m) " + "in %s.\n", + FilenamePat); + return -1; + } + + __llvm_profile_enable_continuous_mode(); + I++; /* advance to 'c' */ } else if (containsMergeSpecifier(FilenamePat, I)) { if (MergingEnabled) { PROF_WARN("%%m specifier can only be specified once in %s.\n", FilenamePat); return -1; } + if (__llvm_profile_is_continuous_mode_enabled()) { + PROF_WARN("%%c specifier can not be used with profile merging (%%m) " + "in %s.\n", + FilenamePat); + return -1; + } MergingEnabled = 1; if (FilenamePat[I] == 'm') lprofCurFilename.MergePoolSize = 1; @@ -499,6 +636,7 @@ static void parseAndSetFilename(const char *FilenamePat, const char *OldFilenamePat = lprofCurFilename.FilenamePat; ProfileNameSpecifier OldPNS = lprofCurFilename.PNS; + /* The old profile name specifier takes precedence over the old one. */ if (PNS < OldPNS) return; @@ -527,6 +665,7 @@ static void parseAndSetFilename(const char *FilenamePat, } truncateCurrentFile(); + initializeProfileForContinuousMode(); installExitSignalHandlers(); } @@ -570,7 +709,8 @@ static const char *getCurFilename(char *FilenameBuf, int ForceUseBuf) { return 0; if (!(lprofCurFilename.NumPids || lprofCurFilename.NumHosts || - lprofCurFilename.MergePoolSize || lprofCurFilename.NumExitSignals)) { + lprofCurFilename.MergePoolSize || lprofCurFilename.NumExitSignals || + __llvm_profile_is_continuous_mode_enabled())) { if (!ForceUseBuf) return lprofCurFilename.FilenamePat; @@ -708,6 +848,8 @@ void __llvm_profile_initialize_file(void) { */ COMPILER_RT_VISIBILITY void __llvm_profile_set_filename(const char *FilenamePat) { + if (__llvm_profile_is_continuous_mode_enabled()) + return; parseAndSetFilename(FilenamePat, PNS_runtime_api, 1); } @@ -722,7 +864,7 @@ int __llvm_profile_write_file(void) { char *FilenameBuf; int PDeathSig = 0; - if (lprofProfileDumped()) { + if (lprofProfileDumped() || __llvm_profile_is_continuous_mode_enabled()) { PROF_NOTE("Profile data not written to file: %s.\n", "already written"); return 0; } diff --git a/compiler-rt/lib/profile/InstrProfilingPort.h b/compiler-rt/lib/profile/InstrProfilingPort.h index da5b5c0f8bb7d..9462cf1a240fc 100644 --- a/compiler-rt/lib/profile/InstrProfilingPort.h +++ b/compiler-rt/lib/profile/InstrProfilingPort.h @@ -99,6 +99,16 @@ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) #endif /* DIR_SEPARATOR_2 */ +#if defined(_WIN32) +static inline size_t getpagesize() { + SYSTEM_INFO S; + GetNativeSystemInfo(&S); + return S.dwPageSize; +} +#else /* defined(_WIN32) */ +#include +#endif /* defined(_WIN32) */ + #define PROF_ERR(Format, ...) \ fprintf(stderr, "LLVM Profile Error: " Format, __VA_ARGS__); diff --git a/compiler-rt/lib/profile/InstrProfilingRuntime.cc b/compiler-rt/lib/profile/InstrProfilingRuntime.cc index 679186ef83094..5dff09d706329 100644 --- a/compiler-rt/lib/profile/InstrProfilingRuntime.cc +++ b/compiler-rt/lib/profile/InstrProfilingRuntime.cc @@ -19,8 +19,9 @@ namespace { class RegisterRuntime { public: RegisterRuntime() { - __llvm_profile_register_write_file_atexit(); __llvm_profile_initialize_file(); + if (!__llvm_profile_is_continuous_mode_enabled()) + __llvm_profile_register_write_file_atexit(); } }; diff --git a/compiler-rt/lib/profile/InstrProfilingWriter.c b/compiler-rt/lib/profile/InstrProfilingWriter.c index d910cbb8f2fc0..ae9e1fa6ac137 100644 --- a/compiler-rt/lib/profile/InstrProfilingWriter.c +++ b/compiler-rt/lib/profile/InstrProfilingWriter.c @@ -14,6 +14,7 @@ #include "InstrProfiling.h" #include "InstrProfilingInternal.h" +#include "InstrProfilingPort.h" #define INSTR_PROF_VALUE_PROF_DATA #include "InstrProfData.inc" @@ -257,10 +258,11 @@ lprofWriteDataImpl(ProfDataWriter *Writer, const __llvm_profile_data *DataBegin, const uint64_t DataSize = __llvm_profile_get_data_size(DataBegin, DataEnd); const uint64_t CountersSize = CountersEnd - CountersBegin; const uint64_t NamesSize = NamesEnd - NamesBegin; - const uint64_t Padding = __llvm_profile_get_num_padding_bytes(NamesSize); /* Enough zeroes for padding. */ - const char Zeroes[sizeof(uint64_t)] = {0}; + unsigned PageSize = getpagesize(); + char Zeroes[PageSize]; + memset(Zeroes, 0, PageSize); /* Create the header. */ __llvm_profile_header Header; @@ -268,6 +270,14 @@ lprofWriteDataImpl(ProfDataWriter *Writer, const __llvm_profile_data *DataBegin, if (!DataSize) return 0; + /* Determine how much padding is needed before/after the counters and after + * the names. */ + uint64_t PaddingBytesBeforeCounters, PaddingBytesAfterCounters, + PaddingBytesAfterNames; + __llvm_profile_get_padding_sizes_for_counters( + DataSize, CountersSize, NamesSize, &PaddingBytesBeforeCounters, + &PaddingBytesAfterCounters, &PaddingBytesAfterNames); + /* Initialize header structure. */ #define INSTR_PROF_RAW_HEADER(Type, Name, Init) Header.Name = Init; #include "InstrProfData.inc" @@ -276,11 +286,17 @@ lprofWriteDataImpl(ProfDataWriter *Writer, const __llvm_profile_data *DataBegin, ProfDataIOVec IOVec[] = { {&Header, sizeof(__llvm_profile_header), 1}, {DataBegin, sizeof(__llvm_profile_data), DataSize}, + {Zeroes, sizeof(uint8_t), PaddingBytesBeforeCounters}, {CountersBegin, sizeof(uint64_t), CountersSize}, + {Zeroes, sizeof(uint8_t), PaddingBytesAfterCounters}, {SkipNameDataWrite ? NULL : NamesBegin, sizeof(uint8_t), NamesSize}, - {Zeroes, sizeof(uint8_t), Padding}}; + {Zeroes, sizeof(uint8_t), PaddingBytesAfterNames}}; if (Writer->Write(Writer, IOVec, sizeof(IOVec) / sizeof(*IOVec))) return -1; + /* Value profiling is not yet supported in continuous mode. */ + if (__llvm_profile_is_continuous_mode_enabled()) + return 0; + return writeValueProfData(Writer, VPDataReader, DataBegin, DataEnd); } diff --git a/compiler-rt/test/profile/ContinuousSyncMode/basic.c b/compiler-rt/test/profile/ContinuousSyncMode/basic.c new file mode 100644 index 0000000000000..9e29a0b0477ec --- /dev/null +++ b/compiler-rt/test/profile/ContinuousSyncMode/basic.c @@ -0,0 +1,32 @@ +// RUN: %clang -fprofile-instr-generate -fcoverage-mapping -o %t.exe %s +// RUN: echo "garbage" > %t.profraw +// RUN: env LLVM_PROFILE_FILE="%c%t.profraw" %run %t.exe +// RUN: llvm-profdata show --counts --all-functions %t.profraw | FileCheck %s -check-prefix=CHECK-COUNTS +// RUN: llvm-profdata merge -o %t.profdata %t.profraw +// RUN: llvm-cov report %t.exe -instr-profile %t.profdata | FileCheck %s -check-prefix=CHECK-COVERAGE + +// CHECK-COUNTS: Counters: +// CHECK-COUNTS-NEXT: main: +// CHECK-COUNTS-NEXT: Hash: 0x{{.*}} +// CHECK-COUNTS-NEXT: Counters: 2 +// CHECK-COUNTS-NEXT: Function count: 1 +// CHECK-COUNTS-NEXT: Block counts: [1] +// CHECK-COUNTS-NEXT: Instrumentation level: Front-end +// CHECK-COUNTS-NEXT: Functions shown: 1 +// CHECK-COUNTS-NEXT: Total functions: 1 +// CHECK-COUNTS-NEXT: Maximum function count: 1 +// CHECK-COUNTS-NEXT: Maximum internal block count: 1 + +// CHECK-COVERAGE: Filename Regions Missed Regions Cover Functions Missed Functions Executed Lines Missed Lines Cover +// CHECK-COVERAGE-NEXT: --- +// CHECK-COVERAGE-NEXT: basic.c 4 1 75.00% 1 0 100.00% 5 2 60.00% +// CHECK-COVERAGE-NEXT: --- +// CHECK-COVERAGE-NEXT: TOTAL 4 1 75.00% 1 0 100.00% 5 2 60.00% + +extern int __llvm_profile_is_continuous_mode_enabled(void); + +int main() { + if (__llvm_profile_is_continuous_mode_enabled()) + return 0; + return 1; +} diff --git a/compiler-rt/test/profile/ContinuousSyncMode/darwin-proof-of-concept.c b/compiler-rt/test/profile/ContinuousSyncMode/darwin-proof-of-concept.c new file mode 100644 index 0000000000000..85caca9a56b40 --- /dev/null +++ b/compiler-rt/test/profile/ContinuousSyncMode/darwin-proof-of-concept.c @@ -0,0 +1,151 @@ +// Test whether mmap'ing profile counters onto an open file is feasible. As +// this involves some platform-specific logic, this test is designed to be a +// minimum viable proof-of-concept: it may be useful when porting the mmap() +// mode to a new platform, but is not in and of itself a test of the profiling +// runtime. + +// REQUIRES: darwin + +// Align counters and data to the maximum expected page size (16K). +// RUN: %clang -g -o %t %s \ +// RUN: -Wl,-sectalign,__DATA,__pcnts,0x4000 \ +// RUN: -Wl,-sectalign,__DATA,__pdata,0x4000 + +// Create a 'profile' using mmap() and validate it. +// RUN: %run %t create %t.tmpfile +// RUN: %run %t validate %t.tmpfile + +#include +#include +#include +#include +#include +#include + +__attribute__((section("__DATA,__pcnts"))) int counters[] = {0xbad}; +extern int cnts_start __asm("section$start$__DATA$__pcnts"); +const size_t cnts_len = 0x4000; + +__attribute__((section("__DATA,__pdata"))) int data[] = {1, 2, 3}; +extern int data_start __asm("section$start$__DATA$__pdata"); +const size_t data_len = sizeof(int) * 3; + +int create_tmpfile(char *path) { + // Create a temp file. + int fd = open(path, O_RDWR | O_TRUNC | O_CREAT, 0666); + if (fd == -1) { + perror("open"); + return EXIT_FAILURE; + } + + // Grow the file to hold data and counters. + if (0 != ftruncate(fd, cnts_len + data_len)) { + perror("ftruncate"); + return EXIT_FAILURE; + } + + // Write the data first (at offset 0x4000, after the counters). + if (data_len != pwrite(fd, &data, data_len, 0x4000)) { + perror("write"); + return EXIT_FAILURE; + } + + // Map the counters into the file, before the data. + // + // Requirements (on Darwin): + // - &cnts_start must be page-aligned. + // - The length and offset-into-fd must be page-aligned. + int *counter_map = (int *)mmap(&cnts_start, 0x4000, PROT_READ | PROT_WRITE, + MAP_FIXED | MAP_SHARED, fd, 0); + if (counter_map != &cnts_start) { + perror("mmap"); + return EXIT_FAILURE; + } + + // Update counters 1..9. These updates should be visible in the file. + // Expect counter 0 (0xbad), which is not updated, to be zero in the file. + for (int i = 1; i < 10; ++i) + counter_map[i] = i; + + // Intentionally do not msync(), munmap(), or close(). + return EXIT_SUCCESS; +} + +int validate_tmpfile(char *path) { + int fd = open(path, O_RDONLY); + if (fd == -1) { + perror("open"); + return EXIT_FAILURE; + } + + // Verify that the file length is: sizeof(counters) + sizeof(data). + const size_t num_bytes = cnts_len + data_len; + int buf[num_bytes]; + if (num_bytes != read(fd, &buf, num_bytes)) { + perror("read"); + return EXIT_FAILURE; + } + + // Verify the values of counters 1..9 (i.e. that the mmap() worked). + for (int i = 0; i < 10; ++i) { + if (buf[i] != i) { + fprintf(stderr, + "validate_tmpfile: Expected '%d' at pos=%d, but got '%d' instead.\n", + i, i, buf[i]); + return EXIT_FAILURE; + } + } + + // Verify that the rest of the counters (after counter 9) are 0. + const int num_cnts = 0x4000 / sizeof(int); + for (int i = 10; i < num_cnts; ++i) { + if (buf[i] != 0) { + fprintf(stderr, + "validate_tmpfile: Expected '%d' at pos=%d, but got '%d' instead.\n", + 0, i, buf[i]); + return EXIT_FAILURE; + } + } + + // Verify that the data written after the counters is equal to the "data[]" + // array (i.e. {1, 2, 3}). + for (int i = num_cnts; i < num_cnts + 3; ++i) { + if (buf[i] != (i - num_cnts + 1)) { + fprintf(stderr, + "validate_tmpfile: Expected '%d' at pos=%d, but got '%d' instead.\n", + i - num_cnts + 1, i, buf[i]); + return EXIT_FAILURE; + } + } + + // Intentionally do not close(). + return EXIT_SUCCESS; +} + +int main(int argc, char **argv) { + intptr_t cnts_start_int = (intptr_t)&cnts_start; + intptr_t data_start_int = (intptr_t)&data_start; + int pagesz = getpagesize(); + + if (cnts_start_int % pagesz != 0) { + fprintf(stderr, "__pcnts is not page-aligned: 0x%lx.\n", cnts_start_int); + return EXIT_FAILURE; + } + if (data_start_int % pagesz != 0) { + fprintf(stderr, "__pdata is not page-aligned: 0x%lx.\n", data_start_int); + return EXIT_FAILURE; + } + if (cnts_start_int + 0x4000 != data_start_int) { + fprintf(stderr, "__pdata not ordered after __pcnts.\n"); + return EXIT_FAILURE; + } + + char *action = argv[1]; + char *path = argv[2]; + if (0 == strcmp(action, "create")) + return create_tmpfile(path); + else if (0 == strcmp(action, "validate")) + return validate_tmpfile(path); + else + return EXIT_FAILURE; +} diff --git a/compiler-rt/test/profile/ContinuousSyncMode/lit.local.cfg.py b/compiler-rt/test/profile/ContinuousSyncMode/lit.local.cfg.py new file mode 100644 index 0000000000000..0918f09cdaa88 --- /dev/null +++ b/compiler-rt/test/profile/ContinuousSyncMode/lit.local.cfg.py @@ -0,0 +1,18 @@ +import subprocess + +def getRoot(config): + if not config.parent: + return config + return getRoot(config.parent) + +root = getRoot(config) + +# As this has not been tested extensively on non-Darwin platforms, +# only Darwin support is enabled for the moment. However, continuous mode +# may "just work" without modification on Linux and other UNIX-likes (AIUI +# the default value for the GNU linker's `--section-alignment` flag is +# 0x1000, which is the size of a page on many systems). +# +# Please add supported configs to this list. +if root.host_os not in ['Darwin']: + config.unsupported = True diff --git a/compiler-rt/test/profile/ContinuousSyncMode/multiple-DSOs.c b/compiler-rt/test/profile/ContinuousSyncMode/multiple-DSOs.c new file mode 100644 index 0000000000000..a54c9af6828d4 --- /dev/null +++ b/compiler-rt/test/profile/ContinuousSyncMode/multiple-DSOs.c @@ -0,0 +1,35 @@ +// RUN: echo "void dso1(void) {}" > %t.dso1.c +// RUN: echo "void dso2(void) {}" > %t.dso2.c +// RUN: %clang_pgogen -dynamiclib -o %t.dso1.dylib %t.dso1.c +// RUN: %clang_pgogen -dynamiclib -o %t.dso2.dylib %t.dso2.c +// RUN: %clang_pgogen -o %t.exe %s %t.dso1.dylib %t.dso2.dylib +// RUN: env LLVM_PROFILE_FILE="%c%t.profraw" %run %t.exe +// RUN: llvm-profdata show --counts --all-functions %t.profraw | FileCheck %s + +// CHECK-LABEL: Counters: +// CHECK-NEXT: dso1: +// CHECK-NEXT: Hash: 0x{{.*}} +// CHECK-NEXT: Counters: 1 +// CHECK-NEXT: Block counts: [1] +// CHECK-NEXT: dso2: +// CHECK-NEXT: Hash: 0x{{.*}} +// CHECK-NEXT: Counters: 1 +// CHECK-NEXT: Block counts: [1] +// CHECK-NEXT: main: +// CHECK-NEXT: Hash: 0x{{.*}} +// CHECK-NEXT: Counters: 1 +// CHECK-NEXT: Block counts: [1] +// CHECK-NEXT: Instrumentation level: IR +// CHECK-NEXT: Functions shown: 3 +// CHECK-NEXT: Total functions: 3 +// CHECK-NEXT: Maximum function count: 1 +// CHECK-NEXT: Maximum internal block count: 0 + +void dso1(void); +void dso2(void); + +int main() { + dso1(); + dso2(); + return 0; +} diff --git a/compiler-rt/test/profile/ContinuousSyncMode/pid-substitution.c b/compiler-rt/test/profile/ContinuousSyncMode/pid-substitution.c new file mode 100644 index 0000000000000..64ba0fbdb7a50 --- /dev/null +++ b/compiler-rt/test/profile/ContinuousSyncMode/pid-substitution.c @@ -0,0 +1,34 @@ +// RUN: rm -rf %t.dir && mkdir -p %t.dir +// RUN: %clang_pgogen -o %t.exe %s +// +// Note: %%p is needed here, not %p, because of lit's path substitution. +// RUN: env LLVM_PROFILE_FILE="%t.dir/%c-%%p" %run %t.exe + +#include +#include + +extern int __llvm_profile_is_continuous_mode_enabled(void); +extern const char *__llvm_profile_get_filename(void); +extern int getpid(void); + +int main() { + // Check that continuous mode is enabled. + if (!__llvm_profile_is_continuous_mode_enabled()) + return 1; + + // Check that the PID is actually in the filename. + const char *Filename = __llvm_profile_get_filename(); + + int Len = strlen(Filename); + --Len; + while (Filename[Len] != '-') + --Len; + + const char *PidStr = Filename + Len + 1; + int Pid = atoi(PidStr); + + if (Pid != getpid()) + return 1; + + return 0; +} diff --git a/compiler-rt/test/profile/ContinuousSyncMode/set-file-object.c b/compiler-rt/test/profile/ContinuousSyncMode/set-file-object.c new file mode 100644 index 0000000000000..ac3be3b5237cf --- /dev/null +++ b/compiler-rt/test/profile/ContinuousSyncMode/set-file-object.c @@ -0,0 +1,32 @@ +// RUN: %clang_pgogen -o %t.exe %s +// RUN: env LLVM_PROFILE_FILE="%c%t.profraw" %run %t.exe %t.bad 2>&1 | FileCheck %s + +// CHECK: __llvm_profile_set_file_object(fd={{[0-9]+}}) not supported +// CHECK: Profile data not written to file: already written. + +#include + +extern int __llvm_profile_is_continuous_mode_enabled(void); +extern void __llvm_profile_set_file_object(FILE *, int); +extern int __llvm_profile_write_file(void); + +int main(int argc, char **argv) { + if (!__llvm_profile_is_continuous_mode_enabled()) + return 1; + + FILE *f = fopen(argv[1], "a+b"); + if (!f) + return 1; + + __llvm_profile_set_file_object(f, 0); // Try to set the file to "%t.bad". + + if (__llvm_profile_write_file() != 0) + return 1; + + f = fopen(argv[1], "r"); + if (!f) + return 1; + + fseek(f, 0, SEEK_END); + return ftell(f); // Check that the "%t.bad" is empty. +} diff --git a/compiler-rt/test/profile/ContinuousSyncMode/set-filename.c b/compiler-rt/test/profile/ContinuousSyncMode/set-filename.c new file mode 100644 index 0000000000000..2e6a78950a00b --- /dev/null +++ b/compiler-rt/test/profile/ContinuousSyncMode/set-filename.c @@ -0,0 +1,17 @@ +// RUN: %clang_pgogen -o %t.exe %s +// RUN: env LLVM_PROFILE_FILE="%c%t.profraw" %run %t.exe %t.profraw %t.bad + +#include + +extern int __llvm_profile_is_continuous_mode_enabled(void); +extern void __llvm_profile_set_filename(const char *); +extern const char *__llvm_profile_get_filename(); + +int main(int argc, char **argv) { + if (!__llvm_profile_is_continuous_mode_enabled()) + return 1; + + __llvm_profile_set_filename(argv[2]); // Try to set the filename to "%t.bad". + const char *Filename = __llvm_profile_get_filename(); + return strcmp(Filename, argv[1]); // Check that the filename is "%t.profraw". +} diff --git a/llvm/include/llvm/ProfileData/InstrProfData.inc b/llvm/include/llvm/ProfileData/InstrProfData.inc index 749781b9ac2d0..99f41d8fef077 100644 --- a/llvm/include/llvm/ProfileData/InstrProfData.inc +++ b/llvm/include/llvm/ProfileData/InstrProfData.inc @@ -130,7 +130,9 @@ INSTR_PROF_VALUE_NODE(PtrToNodeT, llvm::Type::getInt8PtrTy(Ctx), Next, \ INSTR_PROF_RAW_HEADER(uint64_t, Magic, __llvm_profile_get_magic()) INSTR_PROF_RAW_HEADER(uint64_t, Version, __llvm_profile_get_version()) INSTR_PROF_RAW_HEADER(uint64_t, DataSize, DataSize) +INSTR_PROF_RAW_HEADER(uint64_t, PaddingBytesBeforeCounters, PaddingBytesBeforeCounters) INSTR_PROF_RAW_HEADER(uint64_t, CountersSize, CountersSize) +INSTR_PROF_RAW_HEADER(uint64_t, PaddingBytesAfterCounters, PaddingBytesAfterCounters) INSTR_PROF_RAW_HEADER(uint64_t, NamesSize, NamesSize) INSTR_PROF_RAW_HEADER(uint64_t, CountersDelta, (uintptr_t)CountersBegin) INSTR_PROF_RAW_HEADER(uint64_t, NamesDelta, (uintptr_t)NamesBegin) @@ -628,7 +630,7 @@ serializeValueProfDataFrom(ValueProfRecordClosure *Closure, (uint64_t)'f' << 16 | (uint64_t)'R' << 8 | (uint64_t)129 /* Raw profile format version (start from 1). */ -#define INSTR_PROF_RAW_VERSION 4 +#define INSTR_PROF_RAW_VERSION 5 /* Indexed profile format version (start from 1). */ #define INSTR_PROF_INDEX_VERSION 5 /* Coverage mapping format vresion (start from 0). */ @@ -742,7 +744,7 @@ typedef struct InstrProfValueData { #endif /* INSTR_PROF_DATA_INC */ #ifndef INSTR_ORDER_FILE_INC -// The maximal # of functions: 128*1024 (the buffer size will be 128*4 KB). +/* The maximal # of functions: 128*1024 (the buffer size will be 128*4 KB). */ #define INSTR_ORDER_FILE_BUFFER_SIZE 131072 #define INSTR_ORDER_FILE_BUFFER_BITS 17 #define INSTR_ORDER_FILE_BUFFER_MASK 0x1ffff diff --git a/llvm/lib/ProfileData/InstrProfReader.cpp b/llvm/lib/ProfileData/InstrProfReader.cpp index c80d94ea6e7e1..0c80fe6a2c732 100644 --- a/llvm/lib/ProfileData/InstrProfReader.cpp +++ b/llvm/lib/ProfileData/InstrProfReader.cpp @@ -362,7 +362,9 @@ Error RawInstrProfReader::readHeader( CountersDelta = swap(Header.CountersDelta); NamesDelta = swap(Header.NamesDelta); auto DataSize = swap(Header.DataSize); + auto PaddingBytesBeforeCounters = swap(Header.PaddingBytesBeforeCounters); auto CountersSize = swap(Header.CountersSize); + auto PaddingBytesAfterCounters = swap(Header.PaddingBytesAfterCounters); NamesSize = swap(Header.NamesSize); ValueKindLast = swap(Header.ValueKindLast); @@ -370,8 +372,10 @@ Error RawInstrProfReader::readHeader( auto PaddingSize = getNumPaddingBytes(NamesSize); ptrdiff_t DataOffset = sizeof(RawInstrProf::Header); - ptrdiff_t CountersOffset = DataOffset + DataSizeInBytes; - ptrdiff_t NamesOffset = CountersOffset + sizeof(uint64_t) * CountersSize; + ptrdiff_t CountersOffset = + DataOffset + DataSizeInBytes + PaddingBytesBeforeCounters; + ptrdiff_t NamesOffset = CountersOffset + (sizeof(uint64_t) * CountersSize) + + PaddingBytesAfterCounters; ptrdiff_t ValueDataOffset = NamesOffset + NamesSize + PaddingSize; auto *Start = reinterpret_cast(&Header); diff --git a/llvm/test/tools/llvm-profdata/Inputs/c-general.profraw b/llvm/test/tools/llvm-profdata/Inputs/c-general.profraw index 332d11b140f520ba1c97942d466866e3b230f731..c453d806770d82b673e80e0b66f20f73d07ab419 100644 GIT binary patch delta 419 zcmbQhyMVX8u_!ISs37M*D+2`ZKxr723u8d(MKHdCAUh+F?T`eaL2MAX-rgzl`{iu* zi)Jo!1aesz7@+C`J_vx-LsT&^0A)a6Vm_zntR9E zi)U+51yrKp6G&pOwCLNj-%R6Py4^VdmALR3B=J^S^r`o{iJ#fImKG>NTov#QC^1=< zQCgIlKfm*w#Q#?uN)VX?KR`0RK$(e;ZTdgwurN%3${73x$Ji!`_x7eEa-0G605E!t(I(WRup!0-bq5x@u1aaLM%dZQ2H2!td6Ngxn+0Lt_NW%wTo^grNWU;=jMFoP5_FwB6; zT##}A%De^2oB}dHU;|X9K-vK)Bg-T$3Kj+u7oaic!ga7~l diff --git a/llvm/test/tools/llvm-profdata/c-general.test b/llvm/test/tools/llvm-profdata/c-general.test index ed4e61962e425..d4ed384ad6032 100644 --- a/llvm/test/tools/llvm-profdata/c-general.test +++ b/llvm/test/tools/llvm-profdata/c-general.test @@ -5,7 +5,7 @@ $ SRC=path/to/llvm $ CFE=$SRC/tools/clang $ TESTDIR=$SRC/test/tools/llvm-profdata $ CFE_TESTDIR=$CFE/test/Profile -$ clang -o a.out -fprofile-instr-generate $CFE_TESTDIR/c-general.c +$ clang -o a.out -fprofile-instr-generate $CFE_TESTDIR/c-general.c -mllvm -enable-name-compression=false $ LLVM_PROFILE_FILE=$TESTDIR/Inputs/c-general.profraw ./a.out RUN: llvm-profdata show %p/Inputs/c-general.profraw -o - | FileCheck %s @@ -14,7 +14,7 @@ RUN: llvm-profdata show %p/Inputs/c-general.profraw -o - --function=switches | F SWITCHES-LABEL: Counters: SWITCHES-NEXT: switches: -SWITCHES-NEXT: Hash: 0x2618e4f23f2e8daa +SWITCHES-NEXT: Hash: 0xa50a07f391ae4be5 SWITCHES-NEXT: Counters: 19 SWITCHES-NEXT: Function count: 1 SWITCHES-LABEL: Functions shown: 1 diff --git a/llvm/test/tools/llvm-profdata/malformed-ptr-to-counter-array.test b/llvm/test/tools/llvm-profdata/malformed-ptr-to-counter-array.test index c355bdcbdeaec..bad4eb301829f 100644 --- a/llvm/test/tools/llvm-profdata/malformed-ptr-to-counter-array.test +++ b/llvm/test/tools/llvm-profdata/malformed-ptr-to-counter-array.test @@ -10,9 +10,11 @@ // INSTR_PROF_RAW_HEADER(uint64_t, ValueKindLast, IPVK_Last) RUN: printf '\201rforpl\377' > %t.profraw -RUN: printf '\4\0\0\0\0\0\0\0' >> %t.profraw +RUN: printf '\5\0\0\0\0\0\0\0' >> %t.profraw RUN: printf '\1\0\0\0\0\0\0\0' >> %t.profraw +RUN: printf '\0\0\0\0\0\0\0\0' >> %t.profraw RUN: printf '\2\0\0\0\0\0\0\0' >> %t.profraw +RUN: printf '\0\0\0\0\0\0\0\0' >> %t.profraw RUN: printf '\10\0\0\0\0\0\0\0' >> %t.profraw RUN: printf '\0\0\6\0\1\0\0\0' >> %t.profraw RUN: printf '\0\0\6\0\2\0\0\0' >> %t.profraw diff --git a/llvm/test/tools/llvm-profdata/raw-32-bits-be.test b/llvm/test/tools/llvm-profdata/raw-32-bits-be.test index d6e1daa1655cc..cebd25a07f4a1 100644 --- a/llvm/test/tools/llvm-profdata/raw-32-bits-be.test +++ b/llvm/test/tools/llvm-profdata/raw-32-bits-be.test @@ -1,7 +1,9 @@ RUN: printf '\377lprofR\201' > %t -RUN: printf '\0\0\0\0\0\0\0\4' >> %t +RUN: printf '\0\0\0\0\0\0\0\5' >> %t RUN: printf '\0\0\0\0\0\0\0\2' >> %t +RUN: printf '\0\0\0\0\0\0\0\0' >> %t RUN: printf '\0\0\0\0\0\0\0\3' >> %t +RUN: printf '\0\0\0\0\0\0\0\0' >> %t RUN: printf '\0\0\0\0\0\0\0\20' >> %t RUN: printf '\0\0\0\0\1\0\0\0' >> %t RUN: printf '\0\0\0\0\2\0\0\0' >> %t diff --git a/llvm/test/tools/llvm-profdata/raw-32-bits-le.test b/llvm/test/tools/llvm-profdata/raw-32-bits-le.test index cd36aafc9ad9e..a176f80ec95ac 100644 --- a/llvm/test/tools/llvm-profdata/raw-32-bits-le.test +++ b/llvm/test/tools/llvm-profdata/raw-32-bits-le.test @@ -1,7 +1,9 @@ RUN: printf '\201Rforpl\377' > %t -RUN: printf '\4\0\0\0\0\0\0\0' >> %t +RUN: printf '\5\0\0\0\0\0\0\0' >> %t RUN: printf '\2\0\0\0\0\0\0\0' >> %t +RUN: printf '\0\0\0\0\0\0\0\0' >> %t RUN: printf '\3\0\0\0\0\0\0\0' >> %t +RUN: printf '\0\0\0\0\0\0\0\0' >> %t RUN: printf '\20\0\0\0\0\0\0\0' >> %t RUN: printf '\0\0\0\1\0\0\0\0' >> %t RUN: printf '\0\0\0\2\0\0\0\0' >> %t diff --git a/llvm/test/tools/llvm-profdata/raw-64-bits-be.test b/llvm/test/tools/llvm-profdata/raw-64-bits-be.test index 75cc84d68862d..c679207102e40 100644 --- a/llvm/test/tools/llvm-profdata/raw-64-bits-be.test +++ b/llvm/test/tools/llvm-profdata/raw-64-bits-be.test @@ -1,7 +1,9 @@ RUN: printf '\377lprofr\201' > %t -RUN: printf '\0\0\0\0\0\0\0\4' >> %t +RUN: printf '\0\0\0\0\0\0\0\5' >> %t RUN: printf '\0\0\0\0\0\0\0\2' >> %t +RUN: printf '\0\0\0\0\0\0\0\0' >> %t RUN: printf '\0\0\0\0\0\0\0\3' >> %t +RUN: printf '\0\0\0\0\0\0\0\0' >> %t RUN: printf '\0\0\0\0\0\0\0\20' >> %t RUN: printf '\0\0\0\1\0\4\0\0' >> %t RUN: printf '\0\0\0\2\0\4\0\0' >> %t diff --git a/llvm/test/tools/llvm-profdata/raw-64-bits-le.test b/llvm/test/tools/llvm-profdata/raw-64-bits-le.test index d8a9c9a7586c7..8e179a8716255 100644 --- a/llvm/test/tools/llvm-profdata/raw-64-bits-le.test +++ b/llvm/test/tools/llvm-profdata/raw-64-bits-le.test @@ -1,7 +1,9 @@ RUN: printf '\201rforpl\377' > %t -RUN: printf '\4\0\0\0\0\0\0\0' >> %t +RUN: printf '\5\0\0\0\0\0\0\0' >> %t RUN: printf '\2\0\0\0\0\0\0\0' >> %t +RUN: printf '\0\0\0\0\0\0\0\0' >> %t RUN: printf '\3\0\0\0\0\0\0\0' >> %t +RUN: printf '\0\0\0\0\0\0\0\0' >> %t RUN: printf '\20\0\0\0\0\0\0\0' >> %t RUN: printf '\0\0\4\0\1\0\0\0' >> %t RUN: printf '\0\0\4\0\2\0\0\0' >> %t diff --git a/llvm/test/tools/llvm-profdata/raw-two-profiles.test b/llvm/test/tools/llvm-profdata/raw-two-profiles.test index a377375c1768c..9cd8a8c7b00ee 100644 --- a/llvm/test/tools/llvm-profdata/raw-two-profiles.test +++ b/llvm/test/tools/llvm-profdata/raw-two-profiles.test @@ -1,7 +1,9 @@ RUN: printf '\201rforpl\377' > %t-foo.profraw -RUN: printf '\4\0\0\0\0\0\0\0' >> %t-foo.profraw +RUN: printf '\5\0\0\0\0\0\0\0' >> %t-foo.profraw RUN: printf '\1\0\0\0\0\0\0\0' >> %t-foo.profraw +RUN: printf '\0\0\0\0\0\0\0\0' >> %t-foo.profraw RUN: printf '\1\0\0\0\0\0\0\0' >> %t-foo.profraw +RUN: printf '\0\0\0\0\0\0\0\0' >> %t-foo.profraw RUN: printf '\10\0\0\0\0\0\0\0' >> %t-foo.profraw RUN: printf '\0\0\4\0\1\0\0\0' >> %t-foo.profraw RUN: printf '\0\0\4\0\2\0\0\0' >> %t-foo.profraw @@ -18,9 +20,11 @@ RUN: printf '\023\0\0\0\0\0\0\0' >> %t-foo.profraw RUN: printf '\3\0foo\0\0\0' >> %t-foo.profraw RUN: printf '\201rforpl\377' > %t-bar.profraw -RUN: printf '\4\0\0\0\0\0\0\0' >> %t-bar.profraw +RUN: printf '\5\0\0\0\0\0\0\0' >> %t-bar.profraw RUN: printf '\1\0\0\0\0\0\0\0' >> %t-bar.profraw +RUN: printf '\0\0\0\0\0\0\0\0' >> %t-bar.profraw RUN: printf '\2\0\0\0\0\0\0\0' >> %t-bar.profraw +RUN: printf '\0\0\0\0\0\0\0\0' >> %t-bar.profraw RUN: printf '\10\0\0\0\0\0\0\0' >> %t-bar.profraw RUN: printf '\0\0\6\0\1\0\0\0' >> %t-bar.profraw RUN: printf '\0\0\6\0\2\0\0\0' >> %t-bar.profraw From 3ea52bec00aa56b2054aa65f63707200a1a53867 Mon Sep 17 00:00:00 2001 From: Vedant Kumar Date: Thu, 31 Oct 2019 16:22:07 -0700 Subject: [PATCH 14/24] [profile] Speculative fix for Windows after D68351 setenv() appears to not be available on Windows: http://lab.llvm.org:8011/builders/sanitizer-windows/builds/53545/steps/stage%201%20build/logs/stdio (cherry picked from commit aa7f3a405d112d9fe0084a8b3c4667e265f607ad) --- compiler-rt/lib/profile/InstrProfilingPort.h | 1 + 1 file changed, 1 insertion(+) diff --git a/compiler-rt/lib/profile/InstrProfilingPort.h b/compiler-rt/lib/profile/InstrProfilingPort.h index 9462cf1a240fc..ceafdb9783f24 100644 --- a/compiler-rt/lib/profile/InstrProfilingPort.h +++ b/compiler-rt/lib/profile/InstrProfilingPort.h @@ -105,6 +105,7 @@ static inline size_t getpagesize() { GetNativeSystemInfo(&S); return S.dwPageSize; } +#define setenv _putenv #else /* defined(_WIN32) */ #include #endif /* defined(_WIN32) */ From 99d852fa0c8aae4b82c33a5ed6f1fca6a59d68fe Mon Sep 17 00:00:00 2001 From: Vedant Kumar Date: Thu, 31 Oct 2019 16:25:24 -0700 Subject: [PATCH 15/24] [profile] Second speculative fix for Windows VLAs in C appear to not work on Windows, so use COMPILER_RT_ALLOCA: C:\b\slave\sanitizer-windows\llvm-project\compiler-rt\lib\profile\InstrProfilingWriter.c(264): error C2057: expected constant expression C:\b\slave\sanitizer-windows\llvm-project\compiler-rt\lib\profile\InstrProfilingWriter.c(264): error C2466: cannot allocate an array of constant size 0 C:\b\slave\sanitizer-windows\llvm-project\compiler-rt\lib\profile\InstrProfilingWriter.c(264): error C2133: 'Zeroes': unknown size (cherry picked from commit 6dfe8e590e1e50e26c80af59971bc206d8c567f6) --- compiler-rt/lib/profile/InstrProfilingWriter.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/compiler-rt/lib/profile/InstrProfilingWriter.c b/compiler-rt/lib/profile/InstrProfilingWriter.c index ae9e1fa6ac137..0b2e17612ab3e 100644 --- a/compiler-rt/lib/profile/InstrProfilingWriter.c +++ b/compiler-rt/lib/profile/InstrProfilingWriter.c @@ -261,7 +261,7 @@ lprofWriteDataImpl(ProfDataWriter *Writer, const __llvm_profile_data *DataBegin, /* Enough zeroes for padding. */ unsigned PageSize = getpagesize(); - char Zeroes[PageSize]; + char *Zeroes = (char *)COMPILER_RT_ALLOCA(PageSize); memset(Zeroes, 0, PageSize); /* Create the header. */ From 6e4528bdf55bbb3fa33a9d039be3ce4ebd96d41e Mon Sep 17 00:00:00 2001 From: Vedant Kumar Date: Thu, 31 Oct 2019 16:35:57 -0700 Subject: [PATCH 16/24] [profile] Third speculative fix for Windows after D68351 _putenv on Windows takes 1 argument, whereas setenv elsewhere takes 3. Just treat the two platforms differently. http://lab.llvm.org:8011/builders/sanitizer-windows/builds/53547 (cherry picked from commit a49795d8abcf8bf5d38b6ba4e665559c30eb3e62) --- compiler-rt/lib/profile/InstrProfilingFile.c | 11 ++++++++--- compiler-rt/lib/profile/InstrProfilingPort.h | 1 - 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/compiler-rt/lib/profile/InstrProfilingFile.c b/compiler-rt/lib/profile/InstrProfilingFile.c index 1295b84a16c77..ca34c389b2107 100644 --- a/compiler-rt/lib/profile/InstrProfilingFile.c +++ b/compiler-rt/lib/profile/InstrProfilingFile.c @@ -341,6 +341,8 @@ static int writeOrderFile(const char *OutputName) { return RetVal; } +#define LPROF_INIT_ONCE_ENV "__LLVM_PROFILE_RT_INIT_ONCE" + static void truncateCurrentFile(void) { const char *Filename; char *FilenameBuf; @@ -361,11 +363,14 @@ static void truncateCurrentFile(void) { /* Only create the profile directory and truncate an existing profile once. * In continuous mode, this is necessary, as the profile is written-to by the * runtime initializer. */ - const char *lprofInitOnceEnv = "__LLVM_PROFILE_RT_INIT_ONCE"; - int initialized = getenv(lprofInitOnceEnv) != NULL; + int initialized = getenv(LPROF_INIT_ONCE_ENV) != NULL; if (initialized) return; - setenv(lprofInitOnceEnv, lprofInitOnceEnv, 1); +#if defined(_WIN32) + _putenv(LPROF_INIT_ONCE_ENV "=" LPROF_INIT_ONCE_ENV); +#else + setenv(LPROF_INIT_ONCE_ENV, LPROF_INIT_ONCE_ENV, 1); +#endif createProfileDir(Filename); diff --git a/compiler-rt/lib/profile/InstrProfilingPort.h b/compiler-rt/lib/profile/InstrProfilingPort.h index ceafdb9783f24..9462cf1a240fc 100644 --- a/compiler-rt/lib/profile/InstrProfilingPort.h +++ b/compiler-rt/lib/profile/InstrProfilingPort.h @@ -105,7 +105,6 @@ static inline size_t getpagesize() { GetNativeSystemInfo(&S); return S.dwPageSize; } -#define setenv _putenv #else /* defined(_WIN32) */ #include #endif /* defined(_WIN32) */ From 160b0901a6cfb4d10b99de14d0ab00d9c15f6d0a Mon Sep 17 00:00:00 2001 From: Vedant Kumar Date: Thu, 31 Oct 2019 16:45:39 -0700 Subject: [PATCH 17/24] [profile] Fourth fix for toolchains without zlib after D68351 Fix llvm/test/tools/llvm-profdata/nocompress.test, which I missed when authoring D68351 because my toolchain is configured with zlib support. (cherry picked from commit fd3d45006178afef983cc89b69e96d4104147a28) --- .../llvm-profdata/Inputs/compressed.profraw | Bin 1632 -> 1648 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/llvm/test/tools/llvm-profdata/Inputs/compressed.profraw b/llvm/test/tools/llvm-profdata/Inputs/compressed.profraw index 0cfaa07b1954203812f0f872db1c71951a675251..dabb8cb4d4c7adfbbe6c927b10c340e315d35758 100644 GIT binary patch delta 419 zcmaFB^MR+nu_!ISs37M*D+2`ZKxr723u8d(5*UAj6CWdx?eGaggV-Q&y}eW9_siMr z7tLJe2;{ObFhJFPsE4S7sA6CM%7DPcd`{6>JvPaVRvK0cP^AkRfJ!I!N{ecreK&I! z&(@*}sDwfjNMf(F=-ad3Oygd<-8lf2C};*rypb-8_XLhco1sfr@eP{*JlVusD zMVa~YJI_h{f5ov0B9qVolJNz~Onhw9|2c<+VFFa_;Ini9aQ3-JzMnh{JgFkEl%6#4yfHhVKf zm;t8l10PUeVy?7k|09jAMH*a;0Z;=L@Pj1gN{e=)RFfgouN*D-&B+g2UPH*&K zoSgnk`U6yAf)GgJue9i@UOoFyPbAb9G$$~CfPkn21H)upMrl#w!-6eddKY>vS`t7K z3^K&jRQAi= Date: Thu, 31 Oct 2019 17:03:51 -0700 Subject: [PATCH 18/24] [profile] Fifth speculative fix for Android after D68351 Use the printf macros from inttypes.h to sidestep -Wformat issues: /var/lib/buildbot/sanitizer-buildbot6/sanitizer-x86_64-linux-android/build/llvm-project/compiler-rt/lib/profile/InstrProfilingFile.c:425:14: error: format specifies type 'long long' but the argument has type 'off_t' (aka 'long') [-Werror,-Wformat] CurrentFileOffset, PageSize); ^~~~~~~~~~~~~~~~~ /var/lib/buildbot/sanitizer-buildbot6/sanitizer-x86_64-linux-android/build/llvm-project/compiler-rt/lib/profile/InstrProfilingPort.h:114:50: note: expanded from macro 'PROF_ERR' fprintf(stderr, "LLVM Profile Error: " Format, __VA_ARGS__); ~~~~~~ ^~~~~~~~~~~ /var/lib/buildbot/sanitizer-buildbot6/sanitizer-x86_64-linux-android/build/llvm-project/compiler-rt/lib/profile/InstrProfilingFile.c:461:41: error: format specifies type 'unsigned long long' but the argument has type 'uint64_t' (aka 'unsigned long') [-Werror,-Wformat] strerror(errno), CountersBegin, PageAlignedCountersLength, Fileno, ^~~~~~~~~~~~~~~~~~~~~~~~~ /var/lib/buildbot/sanitizer-buildbot6/sanitizer-x86_64-linux-android/build/llvm-project/compiler-rt/lib/profile/InstrProfilingPort.h:114:50: note: expanded from macro 'PROF_ERR' fprintf(stderr, "LLVM Profile Error: " Format, __VA_ARGS__); ~~~~~~ ^~~~~~~~~~~ /var/lib/buildbot/sanitizer-buildbot6/sanitizer-x86_64-linux-android/build/llvm-project/compiler-rt/lib/profile/InstrProfilingFile.c:462:9: error: format specifies type 'unsigned long long' but the argument has type 'uint64_t' (aka 'unsigned long') [-Werror,-Wformat] FileOffsetToCounters); ^~~~~~~~~~~~~~~~~~~~ /var/lib/buildbot/sanitizer-buildbot6/sanitizer-x86_64-linux-android/build/llvm-project/compiler-rt/lib/profile/InstrProfilingPort.h:114:50: note: expanded from macro 'PROF_ERR' fprintf(stderr, "LLVM Profile Error: " Format, __VA_ARGS__); (cherry picked from commit 197bad50896c5b05d31e8aa7839d0a9357c6a4a3) --- compiler-rt/lib/profile/InstrProfilingFile.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/compiler-rt/lib/profile/InstrProfilingFile.c b/compiler-rt/lib/profile/InstrProfilingFile.c index ca34c389b2107..be4b97cffeb65 100644 --- a/compiler-rt/lib/profile/InstrProfilingFile.c +++ b/compiler-rt/lib/profile/InstrProfilingFile.c @@ -457,8 +457,8 @@ static void initializeProfileForContinuousMode(void) { off_t OffsetModPage = CurrentFileOffset % PageSize; if (OffsetModPage != 0) { PROF_ERR("Continuous counter sync mode is enabled, but raw profile is not" - "page-aligned. CurrentFileOffset = %lld, pagesz = %u.\n", - CurrentFileOffset, PageSize); + "page-aligned. CurrentFileOffset = %" PRIu64 ", pagesz = %u.\n", + (uint64_t) CurrentFileOffset, PageSize); return; } @@ -491,9 +491,9 @@ static void initializeProfileForContinuousMode(void) { PROF_ERR( "Continuous counter sync mode is enabled, but mmap() failed (%s).\n" " - CountersBegin: %p\n" - " - PageAlignedCountersLength: %llu\n" + " - PageAlignedCountersLength: %" PRIu64 "\n" " - Fileno: %d\n" - " - FileOffsetToCounters: %llu\n", + " - FileOffsetToCounters: %" PRIu64 "\n", strerror(errno), CountersBegin, PageAlignedCountersLength, Fileno, FileOffsetToCounters); return; From 2079f4cd3ae61568eb5d96697dac00841351c303 Mon Sep 17 00:00:00 2001 From: Vedant Kumar Date: Tue, 10 Sep 2019 18:36:50 +0000 Subject: [PATCH 19/24] [Function] Factor out GetCallEdgeForReturnAddress, NFC Finding the call edge in a function which corresponds to a particular return address is a generic/useful operation. llvm-svn: 371543 (cherry picked from commit ff02109ad47af387839f3163168382273fcec05b) --- lldb/include/lldb/Symbol/Function.h | 5 +++++ lldb/source/Symbol/Function.cpp | 14 ++++++++++++++ lldb/source/Target/StackFrameList.cpp | 15 ++++----------- 3 files changed, 23 insertions(+), 11 deletions(-) diff --git a/lldb/include/lldb/Symbol/Function.h b/lldb/include/lldb/Symbol/Function.h index f68a16705d935..b0a7a0d184669 100644 --- a/lldb/include/lldb/Symbol/Function.h +++ b/lldb/include/lldb/Symbol/Function.h @@ -402,6 +402,11 @@ class Function : public UserID, public SymbolContextScope { /// return None. llvm::MutableArrayRef GetTailCallingEdges(); + /// Get the outgoing call edge from this function which has the given return + /// address \p return_pc, or return nullptr. Note that this will not return a + /// tail-calling edge. + CallEdge *GetCallEdgeForReturnAddress(lldb::addr_t return_pc, Target &target); + /// Get accessor for the block list. /// /// \return diff --git a/lldb/source/Symbol/Function.cpp b/lldb/source/Symbol/Function.cpp index 28ce4fdd4ad40..9ba178f2563c1 100644 --- a/lldb/source/Symbol/Function.cpp +++ b/lldb/source/Symbol/Function.cpp @@ -276,6 +276,20 @@ llvm::MutableArrayRef Function::GetTailCallingEdges() { }); } +CallEdge *Function::GetCallEdgeForReturnAddress(addr_t return_pc, + Target &target) { + auto edges = GetCallEdges(); + auto edge_it = + std::lower_bound(edges.begin(), edges.end(), return_pc, + [&](const CallEdge &edge, addr_t pc) { + return edge.GetReturnPCAddress(*this, target) < pc; + }); + if (edge_it == edges.end() || + edge_it->GetReturnPCAddress(*this, target) != return_pc) + return nullptr; + return &const_cast(*edge_it); +} + Block &Function::GetBlock(bool can_create) { if (!m_block.BlockInfoHasBeenParsed() && can_create) { ModuleSP module_sp = CalculateSymbolContextModule(); diff --git a/lldb/source/Target/StackFrameList.cpp b/lldb/source/Target/StackFrameList.cpp index 69445624a53c8..fbced5fd132d9 100644 --- a/lldb/source/Target/StackFrameList.cpp +++ b/lldb/source/Target/StackFrameList.cpp @@ -250,26 +250,19 @@ static void FindInterveningFrames(Function &begin, Function &end, begin.GetDisplayName(), end.GetDisplayName(), return_pc); // Find a non-tail calling edge with the correct return PC. - auto first_level_edges = begin.GetCallEdges(); if (log) - for (const CallEdge &edge : first_level_edges) + for (const CallEdge &edge : begin.GetCallEdges()) LLDB_LOG(log, "FindInterveningFrames: found call with retn-PC = {0:x}", edge.GetReturnPCAddress(begin, target)); - auto first_edge_it = std::lower_bound( - first_level_edges.begin(), first_level_edges.end(), return_pc, - [&](const CallEdge &edge, addr_t target_pc) { - return edge.GetReturnPCAddress(begin, target) < target_pc; - }); - if (first_edge_it == first_level_edges.end() || - first_edge_it->GetReturnPCAddress(begin, target) != return_pc) { + CallEdge *first_edge = begin.GetCallEdgeForReturnAddress(return_pc, target); + if (!first_edge) { LLDB_LOG(log, "No call edge outgoing from {0} with retn-PC == {1:x}", begin.GetDisplayName(), return_pc); return; } - CallEdge &first_edge = const_cast(*first_edge_it); // The first callee may not be resolved, or there may be nothing to fill in. - Function *first_callee = first_edge.GetCallee(images); + Function *first_callee = first_edge->GetCallee(images); if (!first_callee) { LLDB_LOG(log, "Could not resolve callee"); return; From e028da8bced4568f94d1b19001d4f8f897f76391 Mon Sep 17 00:00:00 2001 From: Vedant Kumar Date: Tue, 10 Sep 2019 18:36:53 +0000 Subject: [PATCH 20/24] [lldbtest] Add an "expected_cmd_failure" option to the filecheck helper llvm-svn: 371544 (cherry picked from commit 3ef7dbd6650d53af79dedbfcd3c85a96b29c96bb) --- lldb/packages/Python/lldbsuite/test/lldbtest.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/lldb/packages/Python/lldbsuite/test/lldbtest.py b/lldb/packages/Python/lldbsuite/test/lldbtest.py index 48dc81780e9b4..3f1a30fb34459 100644 --- a/lldb/packages/Python/lldbsuite/test/lldbtest.py +++ b/lldb/packages/Python/lldbsuite/test/lldbtest.py @@ -2208,12 +2208,16 @@ def filecheck( self, command, check_file, - filecheck_options = ''): + filecheck_options = '', + expect_cmd_failure = False): # Run the command. self.runCmd( command, + check=(not expect_cmd_failure), msg="FileCheck'ing result of `{0}`".format(command)) + self.assertTrue((not expect_cmd_failure) == self.res.Succeeded()) + # Get the error text if there was an error, and the regular text if not. output = self.res.GetOutput() if self.res.Succeeded() \ else self.res.GetError() From 565eac5df1a117fa696a21d646a7bcde03a9d9e2 Mon Sep 17 00:00:00 2001 From: Vedant Kumar Date: Wed, 11 Sep 2019 21:23:42 +0000 Subject: [PATCH 21/24] [Status] Add a LLDB_ERRORF macro for error reporting (similar to LLDB_LOGF) llvm-svn: 371667 (cherry picked from commit bb5811852576b438c21edadd7bc3e9cc36fc6dd9) --- lldb/include/lldb/Utility/Status.h | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/lldb/include/lldb/Utility/Status.h b/lldb/include/lldb/Utility/Status.h index 71a9879708a35..e6a0a8e7fce1b 100644 --- a/lldb/include/lldb/Utility/Status.h +++ b/lldb/include/lldb/Utility/Status.h @@ -212,4 +212,11 @@ template <> struct format_provider { }; } +#define LLDB_ERRORF(status, fmt, ...) \ + do { \ + if (status) { \ + (status)->SetErrorStringWithFormat((fmt), __VA_ARGS__); \ + } \ + } while (0); + #endif // #ifndef LLDB_UTILITY_STATUS_H From 6bb49116a043b6b9981581ca0b3df5a038d5b4d5 Mon Sep 17 00:00:00 2001 From: Vedant Kumar Date: Mon, 4 Nov 2019 17:00:23 -0800 Subject: [PATCH 22/24] [cmake] Add an option to skip stripping before install The swift build system has support for cross-compiling, installing, and generating symbols for lldb. As the swift symbol-generation step occurs after installation, we need to disable stripping during the install. (cherry picked from commit 610f80f7baea5e46c0ccd4cbb905a679c7c56a05) --- lldb/cmake/modules/AddLLDB.cmake | 16 +++++++++------- lldb/cmake/modules/LLDBConfig.cmake | 1 + 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/lldb/cmake/modules/AddLLDB.cmake b/lldb/cmake/modules/AddLLDB.cmake index a0b007c23d01f..c4edd735dce44 100644 --- a/lldb/cmake/modules/AddLLDB.cmake +++ b/lldb/cmake/modules/AddLLDB.cmake @@ -260,13 +260,15 @@ function(lldb_add_post_install_steps_darwin name install_prefix) install(CODE "execute_process(COMMAND xcrun dsymutil -o=${dsym_name} ${buildtree_name})" COMPONENT ${name}) - # Strip distribution binary with -ST (removing debug symbol table entries and - # Swift symbols). Avoid CMAKE_INSTALL_DO_STRIP and llvm_externalize_debuginfo() - # as they can't be configured sufficiently. - set(installtree_name "\$ENV\{DESTDIR\}${install_prefix}/${bundle_subdir}${output_name}") - install(CODE "message(STATUS \"Stripping: ${installtree_name}\")" COMPONENT ${name}) - install(CODE "execute_process(COMMAND xcrun strip -ST ${installtree_name})" - COMPONENT ${name}) + if(NOT LLDB_SKIP_STRIP) + # Strip distribution binary with -ST (removing debug symbol table entries and + # Swift symbols). Avoid CMAKE_INSTALL_DO_STRIP and llvm_externalize_debuginfo() + # as they can't be configured sufficiently. + set(installtree_name "\$ENV\{DESTDIR\}${install_prefix}/${bundle_subdir}${output_name}") + install(CODE "message(STATUS \"Stripping: ${installtree_name}\")" COMPONENT ${name}) + install(CODE "execute_process(COMMAND xcrun strip -ST ${installtree_name})" + COMPONENT ${name}) + endif() endfunction() # CMake's set_target_properties() doesn't allow to pass lists for RPATH diff --git a/lldb/cmake/modules/LLDBConfig.cmake b/lldb/cmake/modules/LLDBConfig.cmake index 9f5c9ccc03ba2..de21ce1acadb8 100644 --- a/lldb/cmake/modules/LLDBConfig.cmake +++ b/lldb/cmake/modules/LLDBConfig.cmake @@ -51,6 +51,7 @@ option(LLDB_USE_ENTITLEMENTS "When codesigning, use entitlements if available" O option(LLDB_BUILD_FRAMEWORK "Build LLDB.framework (Darwin only)" OFF) option(LLDB_NO_INSTALL_DEFAULT_RPATH "Disable default RPATH settings in binaries" OFF) option(LLDB_USE_SYSTEM_DEBUGSERVER "Use the system's debugserver for testing (Darwin only)." OFF) +option(LLDB_SKIP_STRIP "Whether to skip stripping of binaries when installing lldb." OFF) if(LLDB_BUILD_FRAMEWORK) if(NOT APPLE) From fd566207f1fd378c6e4f9fa01e715639bbd8a51d Mon Sep 17 00:00:00 2001 From: Heejin Ahn Date: Thu, 31 Oct 2019 19:48:13 -0700 Subject: [PATCH 23/24] [clang][driver] Add ProfileData to LLVM_LINK_COMPONENTS Summary: After D68351 we need this to make builds with `-DBUILD_SHARED_LIB=ON` work. Reviewers: tlively Subscribers: mgorny, cfe-commits Tags: #clang Differential Revision: https://reviews.llvm.org/D69699 (cherry picked from commit b9903ec8979fc43f1484e1ee8749c7d18ce90bf0) --- clang/lib/Driver/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/clang/lib/Driver/CMakeLists.txt b/clang/lib/Driver/CMakeLists.txt index d90c0ff436071..36e7184cebd73 100644 --- a/clang/lib/Driver/CMakeLists.txt +++ b/clang/lib/Driver/CMakeLists.txt @@ -1,6 +1,7 @@ set(LLVM_LINK_COMPONENTS BinaryFormat Option + ProfileData Support ) From 59c5392804a93e5e79766540fbde916f94b53ce5 Mon Sep 17 00:00:00 2001 From: Vedant Kumar Date: Fri, 27 Sep 2019 20:12:38 +0000 Subject: [PATCH 24/24] [profile] Mark instrprof-gcov-fork.test UNSUPPORTED on Darwin as well This test remains flaky everywhere, I think. We should consider deleting it and accompanying support code in GCOVProfiling: I've stopped short of doing that now as the gcov exec* tests appear to be stable. See the thread re: r347779. llvm-svn: 373121 (cherry picked from commit 9639f3572aa9382891b03d3b8e77ebde15eb72ae) --- compiler-rt/test/profile/Posix/instrprof-gcov-fork.test | 1 + 1 file changed, 1 insertion(+) diff --git a/compiler-rt/test/profile/Posix/instrprof-gcov-fork.test b/compiler-rt/test/profile/Posix/instrprof-gcov-fork.test index 5a406fda4b671..31b6a23be49cd 100644 --- a/compiler-rt/test/profile/Posix/instrprof-gcov-fork.test +++ b/compiler-rt/test/profile/Posix/instrprof-gcov-fork.test @@ -1,4 +1,5 @@ UNSUPPORTED: linux +UNSUPPORTED: darwin RUN: mkdir -p %t.d RUN: cd %t.d