1 /*===- InstrProfilingPlatformDarwin.c - Profile data on Darwin ------------===*\
2 |*
3 |*                     The LLVM Compiler Infrastructure
4 |*
5 |* This file is distributed under the University of Illinois Open Source
6 |* License. See LICENSE.TXT for details.
7 |*
8 \*===----------------------------------------------------------------------===*/
9 
10 #include "InstrProfiling.h"
11 
12 #if defined(__APPLE__)
13 /* Use linker magic to find the bounds of the Data section. */
14 __attribute__((visibility("hidden")))
15 extern __llvm_profile_data DataStart __asm("section$start$__DATA$__llvm_prf_data");
16 __attribute__((visibility("hidden")))
17 extern __llvm_profile_data DataEnd   __asm("section$end$__DATA$__llvm_prf_data");
18 __attribute__((visibility("hidden")))
19 extern char NamesStart __asm("section$start$__DATA$__llvm_prf_names");
20 __attribute__((visibility("hidden")))
21 extern char NamesEnd   __asm("section$end$__DATA$__llvm_prf_names");
22 __attribute__((visibility("hidden")))
23 extern uint64_t CountersStart __asm("section$start$__DATA$__llvm_prf_cnts");
24 __attribute__((visibility("hidden")))
25 extern uint64_t CountersEnd   __asm("section$end$__DATA$__llvm_prf_cnts");
26 
27 __attribute__((visibility("hidden")))
__llvm_profile_data_begin(void)28 const __llvm_profile_data *__llvm_profile_data_begin(void) {
29   return &DataStart;
30 }
31 __attribute__((visibility("hidden")))
__llvm_profile_data_end(void)32 const __llvm_profile_data *__llvm_profile_data_end(void) {
33   return &DataEnd;
34 }
35 __attribute__((visibility("hidden")))
__llvm_profile_names_begin(void)36 const char *__llvm_profile_names_begin(void) { return &NamesStart; }
37 __attribute__((visibility("hidden")))
__llvm_profile_names_end(void)38 const char *__llvm_profile_names_end(void) { return &NamesEnd; }
39 __attribute__((visibility("hidden")))
__llvm_profile_counters_begin(void)40 uint64_t *__llvm_profile_counters_begin(void) { return &CountersStart; }
41 __attribute__((visibility("hidden")))
__llvm_profile_counters_end(void)42 uint64_t *__llvm_profile_counters_end(void) { return &CountersEnd; }
43 #endif
44