diff options
author | Greg Hackmann <ghackmann@android.com> | 2019-05-14 18:45:25 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2019-05-14 22:52:51 -0400 |
commit | 826eba0d77bc74c4d1c611374b76abfe251e8538 (patch) | |
tree | 14c87fc4cce352127d798701051f27b96cd6cdf3 /kernel/gcov/gcc_base.c | |
parent | ce528c4c20f94b48781a9bb9e32435d2b9782995 (diff) |
gcov: clang: move common GCC code into gcc_base.c
Patch series "gcov: add Clang support", v4.
This patch (of 3):
base.c contains a few callbacks specific to GCC's gcov implementation.
Move these into their own module in preparation for Clang support.
Link: http://lkml.kernel.org/r/20190318025411.98014-2-trong@android.com
Signed-off-by: Greg Hackmann <ghackmann@android.com>
Signed-off-by: Nick Desaulniers <ndesaulniers@google.com>
Signed-off-by: Tri Vo <trong@android.com>
Tested-by: Trilok Soni <tsoni@quicinc.com>
Tested-by: Prasad Sodagudi <psodagud@quicinc.com>
Tested-by: Tri Vo <trong@android.com>
Reviewed-by: Peter Oberparleiter <oberpar@linux.ibm.com>
Cc: Daniel Mentz <danielmentz@google.com>
Cc: Petri Gynther <pgynther@google.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'kernel/gcov/gcc_base.c')
-rw-r--r-- | kernel/gcov/gcc_base.c | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/kernel/gcov/gcc_base.c b/kernel/gcov/gcc_base.c new file mode 100644 index 000000000000..3cf736b9f880 --- /dev/null +++ b/kernel/gcov/gcc_base.c | |||
@@ -0,0 +1,86 @@ | |||
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); | ||