blob: 3df2a8f6e7ef26e87d0f0304425c707e0b3fb658 [file] [log] [blame]
Austin Schuhd57edc42019-09-21 17:52:38 -07001#
2# Copyright 2017 The Abseil Authors.
3#
4# Licensed under the Apache License, Version 2.0 (the "License");
5# you may not use this file except in compliance with the License.
6# You may obtain a copy of the License at
7#
8# https://www.apache.org/licenses/LICENSE-2.0
9#
10# Unless required by applicable law or agreed to in writing, software
11# distributed under the License is distributed on an "AS IS" BASIS,
12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13# See the License for the specific language governing permissions and
14# limitations under the License.
15#
16
17#load("@rules_cc//cc:defs.bzl", "cc_library", "cc_test")
18load(
19 "//absl:copts/configure_copts.bzl",
20 "ABSL_DEFAULT_COPTS",
21 "ABSL_DEFAULT_LINKOPTS",
22 "ABSL_TEST_COPTS",
23)
24
25package(
26 default_visibility = ["//visibility:public"],
27)
28
29licenses(["notice"]) # Apache 2.0
30
31cc_library(
32 name = "stacktrace",
33 srcs = [
34 "stacktrace.cc",
35 ],
36 hdrs = ["stacktrace.h"],
37 copts = ABSL_DEFAULT_COPTS,
38 linkopts = ABSL_DEFAULT_LINKOPTS,
39 deps = [
40 ":debugging_internal",
41 "//absl/base:core_headers",
42 ],
43)
44
45cc_library(
46 name = "symbolize",
47 srcs = [
48 "symbolize.cc",
49 "symbolize_elf.inc",
50 "symbolize_unimplemented.inc",
51 "symbolize_win32.inc",
52 ],
53 hdrs = [
54 "internal/symbolize.h",
55 "symbolize.h",
56 ],
57 copts = ABSL_DEFAULT_COPTS,
58 linkopts = ABSL_DEFAULT_LINKOPTS,
59 deps = [
60 ":debugging_internal",
61 ":demangle_internal",
62 "//absl/base",
63 "//absl/base:core_headers",
64 "//absl/base:dynamic_annotations",
65 "//absl/base:malloc_internal",
66 "//absl/base:raw_logging_internal",
67 ],
68)
69
70cc_test(
71 name = "symbolize_test",
72 srcs = ["symbolize_test.cc"],
73 copts = ABSL_TEST_COPTS,
74 linkopts = ABSL_DEFAULT_LINKOPTS,
75 deps = [
76 ":stack_consumption",
77 ":symbolize",
78 "//absl/base",
79 "//absl/base:core_headers",
80 "//absl/base:raw_logging_internal",
81 "//absl/memory",
82 "@com_google_googletest//:gtest",
83 ],
84)
85
86cc_library(
87 name = "examine_stack",
88 srcs = [
89 "internal/examine_stack.cc",
90 ],
91 hdrs = [
92 "internal/examine_stack.h",
93 ],
94 copts = ABSL_DEFAULT_COPTS,
95 linkopts = ABSL_DEFAULT_LINKOPTS,
96 visibility = ["//visibility:private"],
97 deps = [
98 ":stacktrace",
99 ":symbolize",
100 "//absl/base:core_headers",
101 "//absl/base:raw_logging_internal",
102 ],
103)
104
105cc_library(
106 name = "failure_signal_handler",
107 srcs = ["failure_signal_handler.cc"],
108 hdrs = ["failure_signal_handler.h"],
109 copts = ABSL_DEFAULT_COPTS,
110 linkopts = ABSL_DEFAULT_LINKOPTS,
111 deps = [
112 ":examine_stack",
113 ":stacktrace",
114 "//absl/base",
115 "//absl/base:config",
116 "//absl/base:core_headers",
117 "//absl/base:raw_logging_internal",
118 ],
119)
120
121cc_test(
122 name = "failure_signal_handler_test",
123 srcs = ["failure_signal_handler_test.cc"],
124 copts = ABSL_TEST_COPTS,
James Kuszmaul872efd22019-12-03 20:59:09 -0800125 linkopts = ABSL_DEFAULT_LINKOPTS,
Austin Schuhd57edc42019-09-21 17:52:38 -0700126 deps = [
127 ":failure_signal_handler",
128 ":stacktrace",
129 ":symbolize",
130 "//absl/base:raw_logging_internal",
131 "//absl/strings",
132 "@com_google_googletest//:gtest",
133 ],
134)
135
136cc_library(
137 name = "debugging_internal",
138 srcs = [
139 "internal/address_is_readable.cc",
140 "internal/elf_mem_image.cc",
141 "internal/vdso_support.cc",
142 ],
143 hdrs = [
144 "internal/address_is_readable.h",
145 "internal/elf_mem_image.h",
146 "internal/stacktrace_aarch64-inl.inc",
147 "internal/stacktrace_arm-inl.inc",
148 "internal/stacktrace_config.h",
149 "internal/stacktrace_generic-inl.inc",
150 "internal/stacktrace_powerpc-inl.inc",
151 "internal/stacktrace_unimplemented-inl.inc",
152 "internal/stacktrace_win32-inl.inc",
153 "internal/stacktrace_x86-inl.inc",
154 "internal/vdso_support.h",
155 ],
156 copts = ABSL_DEFAULT_COPTS,
157 linkopts = ABSL_DEFAULT_LINKOPTS,
158 deps = [
159 "//absl/base:core_headers",
160 "//absl/base:dynamic_annotations",
161 "//absl/base:raw_logging_internal",
162 ],
163)
164
165cc_library(
166 name = "demangle_internal",
167 srcs = ["internal/demangle.cc"],
168 hdrs = ["internal/demangle.h"],
169 copts = ABSL_DEFAULT_COPTS,
170 deps = [
171 "//absl/base",
172 "//absl/base:core_headers",
173 ],
174)
175
176cc_test(
177 name = "demangle_test",
178 srcs = ["internal/demangle_test.cc"],
179 copts = ABSL_TEST_COPTS,
180 linkopts = ABSL_DEFAULT_LINKOPTS,
181 deps = [
182 ":demangle_internal",
183 ":stack_consumption",
184 "//absl/base:core_headers",
185 "//absl/base:raw_logging_internal",
186 "//absl/memory",
187 "@com_google_googletest//:gtest_main",
188 ],
189)
190
191cc_library(
192 name = "leak_check",
193 srcs = ["leak_check.cc"],
194 hdrs = ["leak_check.h"],
195 linkopts = ABSL_DEFAULT_LINKOPTS,
196 deps = ["//absl/base:core_headers"],
197)
198
199# Adding a dependency to leak_check_disable will disable
200# sanitizer leak checking (asan/lsan) in a test without
201# the need to mess around with build features.
202cc_library(
203 name = "leak_check_disable",
204 srcs = ["leak_check_disable.cc"],
205 linkopts = ABSL_DEFAULT_LINKOPTS,
206 linkstatic = 1,
207 alwayslink = 1,
208)
209
210# These targets exists for use in tests only, explicitly configuring the
211# LEAK_SANITIZER macro. It must be linked with -fsanitize=leak for lsan.
212ABSL_LSAN_LINKOPTS = select({
213 "//absl:llvm_compiler": ["-fsanitize=leak"],
214 "//conditions:default": [],
215})
216
217cc_library(
218 name = "leak_check_api_enabled_for_testing",
219 testonly = 1,
220 srcs = ["leak_check.cc"],
221 hdrs = ["leak_check.h"],
222 copts = select({
223 "//absl:llvm_compiler": ["-DLEAK_SANITIZER"],
224 "//conditions:default": [],
225 }),
226 linkopts = ABSL_DEFAULT_LINKOPTS,
227 visibility = ["//visibility:private"],
228)
229
230cc_library(
231 name = "leak_check_api_disabled_for_testing",
232 testonly = 1,
233 srcs = ["leak_check.cc"],
234 hdrs = ["leak_check.h"],
235 copts = ["-ULEAK_SANITIZER"],
236 linkopts = ABSL_DEFAULT_LINKOPTS,
237 visibility = ["//visibility:private"],
238)
239
240cc_test(
241 name = "leak_check_test",
242 srcs = ["leak_check_test.cc"],
243 copts = select({
244 "//absl:llvm_compiler": ["-DABSL_EXPECT_LEAK_SANITIZER"],
245 "//conditions:default": [],
246 }),
247 linkopts = ABSL_LSAN_LINKOPTS + ABSL_DEFAULT_LINKOPTS,
248 tags = ["notsan"],
249 deps = [
250 ":leak_check_api_enabled_for_testing",
251 "//absl/base",
252 "@com_google_googletest//:gtest_main",
253 ],
254)
255
256cc_test(
257 name = "leak_check_no_lsan_test",
258 srcs = ["leak_check_test.cc"],
259 copts = ["-UABSL_EXPECT_LEAK_SANITIZER"],
260 linkopts = ABSL_DEFAULT_LINKOPTS,
261 tags = ["noasan"],
262 deps = [
263 ":leak_check_api_disabled_for_testing",
264 "//absl/base", # for raw_logging
265 "@com_google_googletest//:gtest_main",
266 ],
267)
268
269# Test that leak checking is skipped when lsan is enabled but
270# ":leak_check_disable" is linked in.
271#
272# This test should fail in the absence of a dependency on ":leak_check_disable"
273cc_test(
274 name = "disabled_leak_check_test",
275 srcs = ["leak_check_fail_test.cc"],
276 linkopts = ABSL_LSAN_LINKOPTS + ABSL_DEFAULT_LINKOPTS,
277 tags = ["notsan"],
278 deps = [
279 ":leak_check_api_enabled_for_testing",
280 ":leak_check_disable",
281 "//absl/base",
282 "@com_google_googletest//:gtest_main",
283 ],
284)
285
286cc_library(
287 name = "stack_consumption",
288 testonly = 1,
289 srcs = ["internal/stack_consumption.cc"],
290 hdrs = ["internal/stack_consumption.h"],
291 copts = ABSL_DEFAULT_COPTS,
292 linkopts = ABSL_DEFAULT_LINKOPTS,
293 visibility = ["//visibility:private"],
294 deps = [
295 "//absl/base:core_headers",
296 "//absl/base:raw_logging_internal",
297 ],
298)
299
300cc_test(
301 name = "stack_consumption_test",
302 srcs = ["internal/stack_consumption_test.cc"],
303 copts = ABSL_TEST_COPTS,
304 linkopts = ABSL_DEFAULT_LINKOPTS,
305 deps = [
306 ":stack_consumption",
307 "//absl/base:core_headers",
308 "//absl/base:raw_logging_internal",
309 "@com_google_googletest//:gtest_main",
310 ],
311)