1. [profile] Clean up stale raw profiles in instrprof-write-file.c (details)
  2. [profile] Add a mode to continuously sync counter updates to a file (details)
Commit ade776b5845384bb45fcd2f7919d80f4101971a7 by Vedant Kumar
[profile] Clean up stale raw profiles in instrprof-write-file.c
The file was modifiedcompiler-rt/test/profile/instrprof-write-file.c
Commit d889d1efefe9f97507e3eafa85a2e3939df9750f by Vedant Kumar
[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
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.
Differential Revision:
The file was addedcompiler-rt/test/profile/ContinuousSyncMode/
The file was modifiedcompiler-rt/lib/profile/
The file was modifiedllvm/include/llvm/ProfileData/
The file was modifiedllvm/test/tools/llvm-profdata/raw-32-bits-le.test
The file was modifiedclang/docs/SourceBasedCodeCoverage.rst
The file was addedcompiler-rt/test/profile/ContinuousSyncMode/multiple-DSOs.c
The file was modifiedcompiler-rt/lib/profile/InstrProfilingWriter.c
The file was modifiedllvm/test/tools/llvm-profdata/Inputs/c-general.profraw
The file was addedcompiler-rt/test/profile/ContinuousSyncMode/set-file-object.c
The file was modifiedllvm/lib/ProfileData/InstrProfReader.cpp
The file was modifiedllvm/test/tools/llvm-profdata/c-general.test
The file was modifiedllvm/test/tools/llvm-profdata/raw-32-bits-be.test
The file was modifiedllvm/test/tools/llvm-profdata/raw-64-bits-be.test
The file was modifiedllvm/test/tools/llvm-profdata/raw-64-bits-le.test
The file was modifiedllvm/test/tools/llvm-profdata/raw-two-profiles.test
The file was addedcompiler-rt/test/profile/ContinuousSyncMode/set-filename.c
The file was addedcompiler-rt/test/profile/ContinuousSyncMode/darwin-proof-of-concept.c
The file was modifiedcompiler-rt/lib/profile/InstrProfilingBuffer.c
The file was addedcompiler-rt/test/profile/ContinuousSyncMode/basic.c
The file was addedcompiler-rt/test/profile/ContinuousSyncMode/pid-substitution.c
The file was modifiedclang/test/Driver/darwin-ld.c
The file was modifiedcompiler-rt/lib/profile/InstrProfilingRuntime.cpp
The file was modifiedcompiler-rt/lib/profile/InstrProfilingPort.h
The file was modifiedllvm/test/tools/llvm-profdata/malformed-ptr-to-counter-array.test
The file was modifiedcompiler-rt/lib/profile/InstrProfiling.h
The file was modifiedcompiler-rt/lib/profile/InstrProfilingFile.c
The file was modifiedclang/lib/Driver/ToolChains/Darwin.cpp