]> granicus.if.org Git - clang/commitdiff
[docs] Coverage: Flesh out instructions for avoiding static initializeres
authorVedant Kumar <vsk@apple.com>
Wed, 8 Jun 2016 22:24:52 +0000 (22:24 +0000)
committerVedant Kumar <vsk@apple.com>
Wed, 8 Jun 2016 22:24:52 +0000 (22:24 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@272214 91177308-0d34-0410-b5e6-96231b3b80d8

docs/SourceBasedCodeCoverage.rst

index 22420d97cd93e9b3445d7b9c4f0cd5d595eac10f..4425bdeb02caed4b7ddf236028e1223128bafd76 100644 (file)
@@ -192,14 +192,22 @@ By default the compiler runtime uses a static initializer to determine the
 profile output path and to register a writer function. To collect profiles
 without using static initializers, do this manually:
 
-* Export a ``int __llvm_profile_runtime`` symbol. The linker won't pull in the
-  object file containing the profiling runtime's static initializer if this
-  symbol is defined.
-
-* Call ``__llvm_profile_initialize_file`` once. This parses
-  ``LLVM_PROFILE_FILE`` and sets the output path.
-
-* Call ``__llvm_profile_write_file`` to write out a profile.
+* Export a ``int __llvm_profile_runtime`` symbol from each instrumented shared
+  library and executable. When the linker finds a definition of this symbol, it
+  knows to skip loading the object which contains the profiling runtime's
+  static initializer.
+
+* Forward-declare ``void __llvm_profile_initialize_file(void)`` and call it
+  once from each instrumented executable. This function parses
+  ``LLVM_PROFILE_FILE``, sets the output path, and truncates any existing files
+  at that path. To get the same behavior without truncating existing files,
+  pass a filename pattern string to ``void __llvm_profile_set_filename(char
+  *)``.  These calls can be placed anywhere so long as they precede all calls
+  to ``__llvm_profile_write_file``.
+
+* Forward-declare ``int __llvm_profile_write_file(void)`` and call it to write
+  out a profile. Calling this function multiple times appends profile data to
+  an existing on-disk raw profile.
 
 Drawbacks and limitations
 =========================