Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/contrib/llvm-project/compiler-rt/lib/profile/InstrProfilingPlatformDarwin.c
35233 views
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
109