Commit Graph

49 Commits

Author SHA1 Message Date
Xinliang David Li c5307c6993 Define compatibility flag if not defined with -std=c++
llvm-svn: 276708
2016-07-25 23:12:53 +00:00
Xinliang David Li d4c5e27a27 [Profile] move utility interfaces to the right header /NFC
llvm-svn: 276021
2016-07-19 20:31:46 +00:00
Xinliang David Li fe9ecc9d9a Code refactoring: extract path prefix handling code
.. into reusable interfaces. No functional change is expected.

llvm-svn: 275807
2016-07-18 16:16:12 +00:00
Xinliang David Li aeff1518e0 [Profile] instroduce portability macro for dir separator(s
llvm-svn: 275597
2016-07-15 18:48:14 +00:00
Vedant Kumar e55855f362 [GCDA] Unlock arc file before closing it
The GCDA writer closed the arc file before unlocking it. This causes an
EBADF while unlocking the file, and opens us up to racy behavior.

Fixes PR26847.

llvm-svn: 262779
2016-03-05 20:10:25 +00:00
Reid Kleckner 5c10fa3f9a Silence MSVC warning about non-void prototypes
It thinks that these functions don't match the function pointer type
that they are passed with:

GCDAProfiling.c(578) : warning C4113: 'void (__cdecl *)()' differs in parameter lists from 'void (__cdecl *)(void)'
GCDAProfiling.c(579) : warning C4113: 'void (__cdecl *)()' differs in parameter lists from 'void (__cdecl *)(void)'
GCDAProfiling.c(580) : warning C4113: 'void (__cdecl *)()' differs in parameter lists from 'void (__cdecl *)(void)'

llvm-svn: 260475
2016-02-11 00:22:43 +00:00
Nico Weber 82210fbc1e Fix -Wexpansion-to-defined warnings in compiler-rt.
llvm-svn: 258200
2016-01-19 22:02:12 +00:00
Nathan Slingerland ba86c9279b [PGO] Enable building compiler-rt profile support library on Windows
Summary: This change configures Windows builds to build the complier-rt profile support library (clang_rt.profile-i386.lib). Windows API incompatibilities in the compiler-rt profile lib are also fixed.

Reviewers: davidxl, dnovillo

Subscribers: llvm-commits

Differential Revision: http://reviews.llvm.org/D15830

llvm-svn: 256848
2016-01-05 17:27:01 +00:00
Diego Novillo eae951415e Add support for generating profiles in a given directory.
When the file is initialized, this patch checks whether the path
specifies a directory. If so, it creates the directory tree before
truncating the file.

Use default.profdata instead of pgo-data for default indexed profile name.

llvm-svn: 241824
2015-07-09 17:21:52 +00:00
Justin Bogner 7759f1899e Add missing include
llvm-svn: 234037
2015-04-03 19:10:35 +00:00
Justin Bogner 8e1a2a3277 profile: Protect .gcda output with flock
This avoids crashing or corrupting data if multiple concurrent
processes write to the same .gcda file. This is hard to test, since
the previous behaviour was a data race that often worked out, and it
ignores errors in flock to fall back to the old racy behaviour so that
it won't degrade the behaviour on filesystems that don't support
flock.

llvm-svn: 234036
2015-04-03 18:55:44 +00:00
Justin Bogner 8da47ac82e profile: Improve error messages on bad GCDA files
llvm-svn: 215933
2014-08-18 20:47:32 +00:00
Duncan P. N. Exon Smith 61c97335c6 PGO: Fix obviously wrong typedefs for MS
llvm-svn: 204267
2014-03-19 22:10:24 +00:00
Viktor Kutuzov f31e53661f A fix for platform-dependent types in sanitizers' profiling support lib on x64 FreeBSD in 32-bit mode
llvm-svn: 203470
2014-03-10 16:50:53 +00:00
Nick Lewycky 62fd6778f5 Fix think-o from r199332 -- write to the new_filename we're building, not
filename the global variable.

llvm-svn: 199572
2014-01-19 07:37:29 +00:00
Joerg Sonnenberger c989455e6d Avoid shadowing the global filename. Reorg mangle_filename to be more
precise in the length accounting and use memcpy instead of
strcpy/strcat.

Differential Revision: http://llvm-reviews.chandlerc.com/D2547

llvm-svn: 199332
2014-01-15 20:57:10 +00:00
Matt Arsenault d326252d29 Fix minor gcc warnings.
C++ style comments not allowed in C90,
signed unsigned comparision.

llvm-svn: 196948
2013-12-10 19:05:43 +00:00
Yuchen Wu a5de343c79 compiler-rt: Added support for function checksums.
llvm-svn: 196357
2013-12-04 06:00:04 +00:00
Yuchen Wu ea7611c53c compiler-rt: Support for file checksum in GCDAProfiling.cpp.
Takes file checksum as an argument to write to .gcda file.

llvm-svn: 195190
2013-11-20 04:14:48 +00:00
Yuchen Wu 61a1bfcd61 Added summary info to GCDAProfiling.
This function will be called by GCOVProfiling to write and update object
and program summaries to be read in by llvm-cov.

llvm-svn: 194499
2013-11-12 18:45:50 +00:00
Bill Wendling a6ec07ce2d Fix typo
llvm-svn: 190543
2013-09-11 19:35:32 +00:00
Bill Wendling 97c22c3c92 Don't allow a NULL-length file. Try to revert to the buffered version.
llvm-svn: 190359
2013-09-09 22:25:46 +00:00
Bill Wendling 28e84fc53e Revert hack that omits errno on Darwin platforms. We now have an acceptable 'errno' header.
llvm-svn: 185106
2013-06-27 21:17:53 +00:00
Chandler Carruth fa95cc916f Fix a use after free I introduced and that Bill caught in code review
(thanks!) by deferring the free of the filename until we finish writing
the coverage data to that file.

Bill, let me know if you'd prefer a different approach!

llvm-svn: 184895
2013-06-26 00:26:16 +00:00
Bill Wendling 90c38bcf58 Don't use 'errno.h' on Apple just yet. This breaks for some of our buildbots.
llvm-svn: 184878
2013-06-25 21:08:40 +00:00
Chandler Carruth a26c814953 Address a few of the issues in GCDAProfiling I noted when looking
through Bill's patch:

1) Correctly test the file descriptor after the sceond attempt at
   creating the file.
2) Make the filename a global so that we can issue error messages from
   other routines.
3) Check errno in several places and print it out so that errors are
   easier to track down.

I don't really expect any of these to fix the current failures I'm
seeing, but I'm hopeful they'll at least let me debug them.

llvm-svn: 184799
2013-06-25 00:37:32 +00:00
Bill Wendling b7e7a38929 Don't override 'mode' and cleanup some variable names.
llvm-svn: 182599
2013-05-23 18:18:31 +00:00
Bill Wendling a600457cde Add 'mode' parameter when using 'O_CREAT'. Thanks to Evgeniy for pointing this out.
llvm-svn: 182598
2013-05-23 18:08:22 +00:00
Bill Wendling 353fbd3516 Performance improvement.
Using fwrite and fread was very *very* slow. The resulting code was multiple
times slower than GCC's implementation of gcov. Replace the fwrite/fread system
with an mmap() version.

If the `.gcda' file doesn't exist, we (re)allocate a buffer that we write
into. That gets written to the `.gcda' file in one chunk. If the `.gcda' file
already exists, we simply mmap() the file, modify the mapped data, and use
msync() to write the contents out to disk. It's much easier than implementing
our own buffering scheme, and we don't have to use fwrite's and fread's
buffering.

For those who are numbers-oriented, here are some timings:

GCC Verison
-----------

`.gcda' files don't exist:  23s
`.gcda' files do exist:     14s

LLVM Version (before this change)
---------------------------------

`.gcda' files don't exist:  28s
`.gcda' files do exist:     28s

LLVM Version (with this change)
-------------------------------

`.gcda' files don't exist:  18s
`.gcda' files do exist:      4s

It's a win-win-win-win-lose-win-win scenario!

<rdar://problem/13466086>

llvm-svn: 182563
2013-05-23 07:18:59 +00:00
Bill Wendling c054086630 Try to improve performance by using a read/write buffer instead of I/O.
The calls to fwrite/fread can be very expensive. GCC avoids this by using a
buffer to read and write from the file, thus limiting the number of fwrite/fread
calls.

<rdar://problem/13466086>

llvm-svn: 181924
2013-05-15 21:31:22 +00:00
Bill Wendling e575be4c0e I was wrong in my testing.
There isn't a speedup when using unbuffered I/O. It slows it down in fact.

llvm-svn: 181060
2013-05-03 22:06:41 +00:00
Bill Wendling 6ce98c49f4 Use unbuffered I/O. This reduces the runtime by about half. Our implementation is now only about 5 times slower than gcc's.
llvm-svn: 180980
2013-05-03 00:25:49 +00:00
Bill Wendling 9a9141aed5 Improve performance of file I/O.
The fread / fwrite calls were happening for each timer. However, that could be
pretty expensive for a large number of timers. Instead, read and write the
timers in one call.

This gives ~10% speedup in compilation time.

llvm-svn: 179990
2013-04-22 03:36:22 +00:00
Bill Wendling 51a6ff5799 Create a coverage initialization function.
This function replaces the call of `atexit' from being generated in the compile
units. Basically, it registers the "writeout" and "flush" functions (if
present). It will generate calls to the `atexit' function for cleanups and final
writeout functions, but only once. This is better than checking for `main',
because a library may not have a `main' function in it.
<rdar://problem/12439551>

llvm-svn: 177578
2013-03-20 21:11:47 +00:00
Bill Wendling e647659d58 Add a way to register and execute "writeout" functions.
It may be prohibitively expensive to write out >1000 files at the same time. So
we would rather emit them serially. These functions allow the GCOV
implementation to register the functions that writeout the GCOV information per
compile unit. At exit, they are written.
<rdar://problem/12439551>

llvm-svn: 177436
2013-03-19 21:01:19 +00:00
Bill Wendling 2428f167f7 Add some GCOV functions that register all of the __llvm_gcov_flush() functions.
The __llvm_gcov_flush() functions only work for the local compile unit. However,
when __gcov_flush() is called, the user expects all of the counters to be
flushed, not just the ones in the current compile unit.

This adds some library functions that register the flush functions. It also
defined __gcov_flush() so that loops through that list and calls the functions.

PR15191 & <rdar://problem/13167507>

llvm-svn: 177337
2013-03-18 22:59:47 +00:00
Nick Lewycky 593eeb000a Don't emit the extra checksum into the .gcda file if the user hasn't asked for
it. Fortunately, versions of gcov that predate the extra checksum also ignore 
any extra data, so this isn't a problem. This matches the API change made in
r176745.

llvm-svn: 176746
2013-03-09 01:33:12 +00:00
Nick Lewycky 8015c6ee2f Take the GCDA version string as an input to llvm_gcda_start_file.
llvm-svn: 176618
2013-03-07 08:28:54 +00:00
Nick Lewycky 1052c99f46 Holy macaroons, somebody made a copy of llvm/runtime/profile/GCDAProfiling.c,
didn't delete the original, and now they've diverged. I have no idea what's
going on. Apply my patch in r176173 to this one too, this one looks newer?

llvm-svn: 176236
2013-02-28 07:00:13 +00:00
Bill Wendling b556d5f13c Remove debugging code.
llvm-svn: 164052
2012-09-17 20:43:11 +00:00
Bill Wendling 06fb5f0cc2 Remove unused variable.
llvm-svn: 163930
2012-09-14 20:23:31 +00:00
Bill Wendling 66429fe1c7 Add support for reading the GCDA file and merging the arc information.
With the advent of the __llvm_gcov_flush function, we need to be able to merge
counts into the .gcda files in an intelligent manner. This involves reading the
file if it exists, adding the counts together, and then writing the results.
<rdar://problem/12185886>

llvm-svn: 163923
2012-09-14 18:55:32 +00:00
Bill Wendling f11b42e396 Free the allocated filename. Found by clang static analyzer.
llvm-svn: 158514
2012-06-15 09:12:04 +00:00
Bill Wendling aa888a29eb Add support for the GCOV_PREFIX_STRIP env variable which tries to strip off the first 'n' directories from the filename.
llvm-svn: 157574
2012-05-28 10:09:01 +00:00
Bill Wendling 65adec933d Simplify the logic that tries to open the GCDA file at all costs. Basically, if
we can't open the file even after creating all of the directories to it, then
just give up.

llvm-svn: 157572
2012-05-28 09:46:43 +00:00
Bill Wendling bba2a7d46d * A bit of cleanup of the 'recursive_mkdir'. No functionality change.
* Check for absolute paths before using the GCOV_PREFIX.
* Don't add an ending path separator if there's already one.

llvm-svn: 157571
2012-05-28 09:41:48 +00:00
Bill Wendling f16084723c Don't use 'strrchr', which isn't implemented here yet.
llvm-svn: 157560
2012-05-28 02:50:53 +00:00
Bill Wendling 74f987f3b6 Sync with old GCOV runtime library's file.
llvm-svn: 157559
2012-05-28 02:34:34 +00:00
Daniel Dunbar fb16114782 lib: Import GCDA profiling support from LLVM.
- I'm in the process of moving this here but it will live in both places until
   the ancilliary support is ready.
 - Currently unused.

llvm-svn: 144865
2011-11-17 00:12:10 +00:00