1 | /*===- InstrProfilingPlatformDarwin.c - Profile data on Darwin ------------===*\ |
2 | |* |
3 | |* Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
4 | |* See https://llvm.org/LICENSE.txt for license information. |
5 | |* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
6 | |* |
7 | \*===----------------------------------------------------------------------===*/ |
8 | |
9 | // Note: This is linked into the Darwin kernel, and must remain compatible |
10 | // with freestanding compilation. See `darwin_add_builtin_libraries`. |
11 | |
12 | #include "InstrProfiling.h" |
13 | #include "InstrProfilingInternal.h" |
14 | |
15 | #if defined(__APPLE__) |
16 | /* Use linker magic to find the bounds of the Data section. */ |
17 | COMPILER_RT_VISIBILITY |
18 | extern __llvm_profile_data |
19 | DataStart __asm("section$start$__DATA$" INSTR_PROF_DATA_SECT_NAME); |
20 | COMPILER_RT_VISIBILITY |
21 | extern __llvm_profile_data |
22 | DataEnd __asm("section$end$__DATA$" INSTR_PROF_DATA_SECT_NAME); |
23 | COMPILER_RT_VISIBILITY |
24 | extern char |
25 | NamesStart __asm("section$start$__DATA$" INSTR_PROF_NAME_SECT_NAME); |
26 | COMPILER_RT_VISIBILITY |
27 | extern char NamesEnd __asm("section$end$__DATA$" INSTR_PROF_NAME_SECT_NAME); |
28 | COMPILER_RT_VISIBILITY |
29 | extern char |
30 | CountersStart __asm("section$start$__DATA$" INSTR_PROF_CNTS_SECT_NAME); |
31 | COMPILER_RT_VISIBILITY |
32 | extern char CountersEnd __asm("section$end$__DATA$" INSTR_PROF_CNTS_SECT_NAME); |
33 | COMPILER_RT_VISIBILITY |
34 | extern char |
35 | BitmapStart __asm("section$start$__DATA$" INSTR_PROF_BITS_SECT_NAME); |
36 | COMPILER_RT_VISIBILITY |
37 | extern char BitmapEnd __asm("section$end$__DATA$" INSTR_PROF_BITS_SECT_NAME); |
38 | COMPILER_RT_VISIBILITY |
39 | extern VTableProfData |
40 | VTableProfStart __asm("section$start$__DATA$" INSTR_PROF_VTAB_SECT_NAME); |
41 | COMPILER_RT_VISIBILITY |
42 | extern VTableProfData |
43 | VTableProfEnd __asm("section$end$__DATA$" INSTR_PROF_VTAB_SECT_NAME); |
44 | COMPILER_RT_VISIBILITY |
45 | extern char |
46 | VNameStart __asm("section$start$__DATA$" INSTR_PROF_VNAME_SECT_NAME); |
47 | COMPILER_RT_VISIBILITY |
48 | extern char VNameEnd __asm("section$end$__DATA$" INSTR_PROF_VNAME_SECT_NAME); |
49 | COMPILER_RT_VISIBILITY |
50 | extern uint32_t |
51 | OrderFileStart __asm("section$start$__DATA$" INSTR_PROF_ORDERFILE_SECT_NAME); |
52 | |
53 | COMPILER_RT_VISIBILITY |
54 | extern ValueProfNode |
55 | VNodesStart __asm("section$start$__DATA$" INSTR_PROF_VNODES_SECT_NAME); |
56 | COMPILER_RT_VISIBILITY |
57 | extern ValueProfNode |
58 | VNodesEnd __asm("section$end$__DATA$" INSTR_PROF_VNODES_SECT_NAME); |
59 | |
60 | COMPILER_RT_VISIBILITY |
61 | const __llvm_profile_data *__llvm_profile_begin_data(void) { |
62 | return &DataStart; |
63 | } |
64 | COMPILER_RT_VISIBILITY |
65 | const __llvm_profile_data *__llvm_profile_end_data(void) { return &DataEnd; } |
66 | COMPILER_RT_VISIBILITY |
67 | const char *__llvm_profile_begin_names(void) { return &NamesStart; } |
68 | COMPILER_RT_VISIBILITY |
69 | const char *__llvm_profile_end_names(void) { return &NamesEnd; } |
70 | COMPILER_RT_VISIBILITY |
71 | char *__llvm_profile_begin_counters(void) { return &CountersStart; } |
72 | COMPILER_RT_VISIBILITY |
73 | char *__llvm_profile_end_counters(void) { return &CountersEnd; } |
74 | COMPILER_RT_VISIBILITY |
75 | char *__llvm_profile_begin_bitmap(void) { return &BitmapStart; } |
76 | COMPILER_RT_VISIBILITY |
77 | char *__llvm_profile_end_bitmap(void) { return &BitmapEnd; } |
78 | COMPILER_RT_VISIBILITY |
79 | const VTableProfData *__llvm_profile_begin_vtables(void) { |
80 | return &VTableProfStart; |
81 | } |
82 | COMPILER_RT_VISIBILITY |
83 | const VTableProfData *__llvm_profile_end_vtables(void) { |
84 | return &VTableProfEnd; |
85 | } |
86 | COMPILER_RT_VISIBILITY |
87 | const char *__llvm_profile_begin_vtabnames(void) { return &VNameStart; } |
88 | COMPILER_RT_VISIBILITY |
89 | const char *__llvm_profile_end_vtabnames(void) { return &VNameEnd; } |
90 | COMPILER_RT_VISIBILITY |
91 | uint32_t *__llvm_profile_begin_orderfile(void) { return &OrderFileStart; } |
92 | |
93 | COMPILER_RT_VISIBILITY |
94 | ValueProfNode *__llvm_profile_begin_vnodes(void) { |
95 | return &VNodesStart; |
96 | } |
97 | COMPILER_RT_VISIBILITY |
98 | ValueProfNode *__llvm_profile_end_vnodes(void) { return &VNodesEnd; } |
99 | |
100 | COMPILER_RT_VISIBILITY ValueProfNode *CurrentVNode = &VNodesStart; |
101 | COMPILER_RT_VISIBILITY ValueProfNode *EndVNode = &VNodesEnd; |
102 | |
103 | COMPILER_RT_VISIBILITY int __llvm_write_binary_ids(ProfDataWriter *Writer) { |
104 | return 0; |
105 | } |
106 | |
107 | #endif |
108 | |