Merge tag 'staging-5.14-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh...
[linux-2.6-microblaze.git] / kernel / gcov / gcc_base.c
1 // SPDX-License-Identifier: GPL-2.0
2
3 #include <linux/export.h>
4 #include <linux/kernel.h>
5 #include <linux/mutex.h>
6 #include "gcov.h"
7
8 /*
9  * __gcov_init is called by gcc-generated constructor code for each object
10  * file compiled with -fprofile-arcs.
11  */
12 void __gcov_init(struct gcov_info *info)
13 {
14         static unsigned int gcov_version;
15
16         mutex_lock(&gcov_lock);
17         if (gcov_version == 0) {
18                 gcov_version = gcov_info_version(info);
19                 /*
20                  * Printing gcc's version magic may prove useful for debugging
21                  * incompatibility reports.
22                  */
23                 pr_info("version magic: 0x%x\n", gcov_version);
24         }
25         /*
26          * Add new profiling data structure to list and inform event
27          * listener.
28          */
29         gcov_info_link(info);
30         if (gcov_events_enabled)
31                 gcov_event(GCOV_ADD, info);
32         mutex_unlock(&gcov_lock);
33 }
34 EXPORT_SYMBOL(__gcov_init);
35
36 /*
37  * These functions may be referenced by gcc-generated profiling code but serve
38  * no function for kernel profiling.
39  */
40 void __gcov_flush(void)
41 {
42         /* Unused. */
43 }
44 EXPORT_SYMBOL(__gcov_flush);
45
46 void __gcov_merge_add(gcov_type *counters, unsigned int n_counters)
47 {
48         /* Unused. */
49 }
50 EXPORT_SYMBOL(__gcov_merge_add);
51
52 void __gcov_merge_single(gcov_type *counters, unsigned int n_counters)
53 {
54         /* Unused. */
55 }
56 EXPORT_SYMBOL(__gcov_merge_single);
57
58 void __gcov_merge_delta(gcov_type *counters, unsigned int n_counters)
59 {
60         /* Unused. */
61 }
62 EXPORT_SYMBOL(__gcov_merge_delta);
63
64 void __gcov_merge_ior(gcov_type *counters, unsigned int n_counters)
65 {
66         /* Unused. */
67 }
68 EXPORT_SYMBOL(__gcov_merge_ior);
69
70 void __gcov_merge_time_profile(gcov_type *counters, unsigned int n_counters)
71 {
72         /* Unused. */
73 }
74 EXPORT_SYMBOL(__gcov_merge_time_profile);
75
76 void __gcov_merge_icall_topn(gcov_type *counters, unsigned int n_counters)
77 {
78         /* Unused. */
79 }
80 EXPORT_SYMBOL(__gcov_merge_icall_topn);
81
82 void __gcov_exit(void)
83 {
84         /* Unused. */
85 }
86 EXPORT_SYMBOL(__gcov_exit);