On Wed, 17 Apr 2019 15:53:28 -0700 Tri Vo <tr...@android.com> wrote: > LLVM uses profiling data that's deliberately similar to GCC, but has a very > different way of exporting that data. LLVM calls llvm_gcov_init() once per > module, and provides a couple of callbacks that we can use to ask for more > data. > > We care about the "writeout" callback, which in turn calls back into > compiler-rt/this module to dump all the gathered coverage data to disk: > > llvm_gcda_start_file() > llvm_gcda_emit_function() > llvm_gcda_emit_arcs() > llvm_gcda_emit_function() > llvm_gcda_emit_arcs() > [... repeats for each function ...] > llvm_gcda_summary_info() > llvm_gcda_end_file() > > This design is much more stateless and unstructured than gcc's, and is > intended to run at process exit. This forces us to keep some local state > about which module we're dealing with at the moment. On the other hand, it > also means we don't depend as much on how LLVM represents profiling data > internally. > > See LLVM's lib/Transforms/Instrumentation/GCOVProfiling.cpp for more > details on how this works, particularly GCOVProfiler::emitProfileArcs(), > GCOVProfiler::insertCounterWriteout(), and GCOVProfiler::insertFlush().
checkpatch speaketh truth. Also, I'll change those Co-authored-by's to the documented Co-developed-by. From: Andrew Morton <a...@linux-foundation.org> Subject: gcov-clang-support-checkpatch-fixes WARNING: Non-standard signature: Co-authored-by: #31: Co-authored-by: Nick Desaulniers <ndesaulni...@google.com> WARNING: Non-standard signature: Co-authored-by: #32: Co-authored-by: Tri Vo <tr...@android.com> WARNING: Possible unnecessary 'out of memory' message #158: FILE: kernel/gcov/clang.c:90: + if (!info) { + pr_warn_ratelimited("failed to allocate gcov info\n"); WARNING: Possible unnecessary 'out of memory' message #193: FILE: kernel/gcov/clang.c:125: + if (!info) { + pr_warn_ratelimited("failed to allocate gcov function info for %s\n", WARNING: line over 80 characters #546: FILE: kernel/gcov/clang.c:478: + pos += store_gcov_u32(buffer, pos, fi_ptr->cfg_checksum); total: 0 errors, 5 warnings, 663 lines checked NOTE: For some of the reported defects, checkpatch may be able to mechanically convert to the typical style using --fix or --fix-inplace. ./patches/gcov-clang-support.patch has style problems, please review. NOTE: If any of the errors are false positives, please report them to the maintainer, see CHECKPATCH in MAINTAINERS. Please run checkpatch prior to sending patches Cc: Daniel Mentz <danielme...@google.com> Cc: Greg Hackmann <ghackm...@android.com> Cc: Nick Desaulniers <ndesaulni...@google.com> Cc: Peter Oberparleiter <ober...@linux.ibm.com> Cc: Petri Gynther <pgynt...@google.com> Cc: Prasad Sodagudi <psoda...@quicinc.com> Cc: Trilok Soni <ts...@quicinc.com> Cc: Tri Vo <tr...@android.com> Signed-off-by: Andrew Morton <a...@linux-foundation.org> --- kernel/gcov/clang.c | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) --- a/kernel/gcov/clang.c~gcov-clang-support-checkpatch-fixes +++ a/kernel/gcov/clang.c @@ -86,10 +86,8 @@ void llvm_gcov_init(llvm_gcov_callback w { struct gcov_info *info = kzalloc(sizeof(*info), GFP_KERNEL); - if (!info) { - pr_warn_ratelimited("failed to allocate gcov info\n"); + if (!info) return; - } INIT_LIST_HEAD(&info->head); INIT_LIST_HEAD(&info->functions); @@ -121,11 +119,8 @@ void llvm_gcda_emit_function(u32 ident, { struct gcov_fn_info *info = kzalloc(sizeof(*info), GFP_KERNEL); - if (!info) { - pr_warn_ratelimited("failed to allocate gcov function info for %s\n", - function_name ?: "UNKNOWN"); + if (!info) return; - } INIT_LIST_HEAD(&info->head); info->ident = ident; _