summaryrefslogtreecommitdiff
path: root/lib/profile/InstrProfiling.c
diff options
context:
space:
mode:
authorDuncan P. N. Exon Smith <dexonsmith@apple.com>2014-03-20 03:23:10 +0000
committerDuncan P. N. Exon Smith <dexonsmith@apple.com>2014-03-20 03:23:10 +0000
commit4709975bfe6b884e3b2b62da7545b01a82239906 (patch)
treec945165555e4835915952a1ccc892e8c350da07b /lib/profile/InstrProfiling.c
parentcab2b24e0704c4efb150c6ea44195b766e56a690 (diff)
PGO: Split out initialization of section bounds
Currently we register instrumentation data at runtime to determine the bounds of the sections where the data lives. Soon we'll implement platform-specific linker magic to determine this at link time. Move this logic to a separate file, so that our build system can choose the correct platform-specific code. No functionality change intended. <rdar://problem/15943240> git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@204299 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/profile/InstrProfiling.c')
-rw-r--r--lib/profile/InstrProfiling.c37
1 files changed, 2 insertions, 35 deletions
diff --git a/lib/profile/InstrProfiling.c b/lib/profile/InstrProfiling.c
index 41818ab8a..c897052d8 100644
--- a/lib/profile/InstrProfiling.c
+++ b/lib/profile/InstrProfiling.c
@@ -9,40 +9,6 @@
#include "InstrProfiling.h"
-/* TODO: Calculate these with linker magic. */
-static const __llvm_pgo_data *First = NULL;
-static const __llvm_pgo_data *Last = NULL;
-
-/*!
- * \brief Register an instrumented function.
- *
- * Calls to this are emitted by clang with -fprofile-instr-generate. Such
- * calls are only required (and only emitted) on targets where we haven't
- * implemented linker magic to find the bounds of the section.
- *
- * For now, that's all targets.
- */
-void __llvm_pgo_register_function(void *Data_) {
- /* TODO: Only emit this function if we can't use linker magic. */
- const __llvm_pgo_data *Data = (__llvm_pgo_data*)Data_;
- if (!First || Data < First)
- First = Data;
- if (!Last || Data >= Last)
- Last = Data + 1;
-}
-
-/*! \brief Get the first instrumentation record. */
-static const __llvm_pgo_data *getFirst() {
- /* TODO: Use extern + linker magic instead of a static variable. */
- return First;
-}
-
-/*! \brief Get the last instrumentation record. */
-static const __llvm_pgo_data *getLast() {
- /* TODO: Use extern + linker magic instead of a static variable. */
- return Last;
-}
-
/* TODO: void __llvm_pgo_get_size_for_buffer(void); */
static void writeFunction(FILE *OutputFile, const __llvm_pgo_data *Data) {
@@ -64,6 +30,7 @@ void __llvm_pgo_write_buffer(FILE *OutputFile) {
*/
const __llvm_pgo_data *I, *E;
- for (I = getFirst(), E = getLast(); I != E; ++I)
+ for (I = __llvm_pgo_data_begin(), E = __llvm_pgo_data_end();
+ I != E; ++I)
writeFunction(OutputFile, I);
}