• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#
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
17load(
18    "//absl:copts/configure_copts.bzl",
19    "ABSL_DEFAULT_COPTS",
20    "ABSL_DEFAULT_LINKOPTS",
21    "ABSL_TEST_COPTS",
22)
23
24package(
25    default_visibility = ["//visibility:public"],
26)
27
28licenses(["notice"])
29
30cc_library(
31    name = "stacktrace",
32    srcs = [
33        "internal/stacktrace_aarch64-inl.inc",
34        "internal/stacktrace_arm-inl.inc",
35        "internal/stacktrace_config.h",
36        "internal/stacktrace_emscripten-inl.inc",
37        "internal/stacktrace_generic-inl.inc",
38        "internal/stacktrace_powerpc-inl.inc",
39        "internal/stacktrace_riscv-inl.inc",
40        "internal/stacktrace_unimplemented-inl.inc",
41        "internal/stacktrace_win32-inl.inc",
42        "internal/stacktrace_x86-inl.inc",
43        "stacktrace.cc",
44    ],
45    hdrs = ["stacktrace.h"],
46    copts = ABSL_DEFAULT_COPTS,
47    linkopts = ABSL_DEFAULT_LINKOPTS,
48    deps = [
49        ":debugging_internal",
50        "//absl/base:config",
51        "//absl/base:core_headers",
52    ],
53)
54
55cc_library(
56    name = "symbolize",
57    srcs = [
58        "symbolize.cc",
59        "symbolize_darwin.inc",
60        "symbolize_elf.inc",
61        "symbolize_emscripten.inc",
62        "symbolize_unimplemented.inc",
63        "symbolize_win32.inc",
64    ],
65    hdrs = [
66        "internal/symbolize.h",
67        "symbolize.h",
68    ],
69    copts = ABSL_DEFAULT_COPTS,
70    linkopts = ABSL_DEFAULT_LINKOPTS + select({
71        "//absl:msvc_compiler": ["-DEFAULTLIB:dbghelp.lib"],
72        "//absl:clang-cl_compiler": ["-DEFAULTLIB:dbghelp.lib"],
73        "//conditions:default": [],
74    }),
75    deps = [
76        ":debugging_internal",
77        ":demangle_internal",
78        "//absl/base",
79        "//absl/base:config",
80        "//absl/base:core_headers",
81        "//absl/base:dynamic_annotations",
82        "//absl/base:malloc_internal",
83        "//absl/base:raw_logging_internal",
84        "//absl/strings",
85    ],
86)
87
88cc_test(
89    name = "symbolize_test",
90    srcs = ["symbolize_test.cc"],
91    copts = ABSL_TEST_COPTS + select({
92        "//absl:msvc_compiler": ["/Z7"],
93        "//absl:clang-cl_compiler": ["/Z7"],
94        "//conditions:default": [],
95    }),
96    linkopts = ABSL_DEFAULT_LINKOPTS + select({
97        "//absl:msvc_compiler": ["/DEBUG"],
98        "//absl:clang-cl_compiler": ["/DEBUG"],
99        "//conditions:default": [],
100    }),
101    deps = [
102        ":stack_consumption",
103        ":symbolize",
104        "//absl/base",
105        "//absl/base:config",
106        "//absl/base:core_headers",
107        "//absl/base:raw_logging_internal",
108        "//absl/memory",
109        "//absl/strings",
110        "@com_google_googletest//:gtest",
111    ],
112)
113
114cc_library(
115    name = "examine_stack",
116    srcs = [
117        "internal/examine_stack.cc",
118    ],
119    hdrs = [
120        "internal/examine_stack.h",
121    ],
122    copts = ABSL_DEFAULT_COPTS,
123    linkopts = ABSL_DEFAULT_LINKOPTS,
124    visibility = ["//visibility:private"],
125    deps = [
126        ":stacktrace",
127        ":symbolize",
128        "//absl/base:config",
129        "//absl/base:core_headers",
130        "//absl/base:raw_logging_internal",
131    ],
132)
133
134cc_library(
135    name = "failure_signal_handler",
136    srcs = ["failure_signal_handler.cc"],
137    hdrs = ["failure_signal_handler.h"],
138    copts = ABSL_DEFAULT_COPTS,
139    linkopts = ABSL_DEFAULT_LINKOPTS,
140    deps = [
141        ":examine_stack",
142        ":stacktrace",
143        "//absl/base",
144        "//absl/base:config",
145        "//absl/base:core_headers",
146        "//absl/base:errno_saver",
147        "//absl/base:raw_logging_internal",
148    ],
149)
150
151cc_test(
152    name = "failure_signal_handler_test",
153    srcs = ["failure_signal_handler_test.cc"],
154    copts = ABSL_TEST_COPTS,
155    linkopts = select({
156        "//absl:msvc_compiler": [],
157        "//absl:clang-cl_compiler": [],
158        "//absl:wasm": [],
159        "//conditions:default": ["-pthread"],
160    }) + ABSL_DEFAULT_LINKOPTS,
161    deps = [
162        ":failure_signal_handler",
163        ":stacktrace",
164        ":symbolize",
165        "//absl/base:raw_logging_internal",
166        "//absl/strings",
167        "@com_google_googletest//:gtest",
168    ],
169)
170
171cc_library(
172    name = "debugging_internal",
173    srcs = [
174        "internal/address_is_readable.cc",
175        "internal/elf_mem_image.cc",
176        "internal/vdso_support.cc",
177    ],
178    hdrs = [
179        "internal/address_is_readable.h",
180        "internal/elf_mem_image.h",
181        "internal/vdso_support.h",
182    ],
183    copts = ABSL_DEFAULT_COPTS,
184    linkopts = ABSL_DEFAULT_LINKOPTS,
185    visibility = ["//visibility:private"],
186    deps = [
187        "//absl/base:config",
188        "//absl/base:core_headers",
189        "//absl/base:dynamic_annotations",
190        "//absl/base:errno_saver",
191        "//absl/base:raw_logging_internal",
192    ],
193)
194
195cc_library(
196    name = "demangle_internal",
197    srcs = ["internal/demangle.cc"],
198    hdrs = ["internal/demangle.h"],
199    copts = ABSL_DEFAULT_COPTS,
200    visibility = ["//visibility:private"],
201    deps = [
202        "//absl/base",
203        "//absl/base:config",
204        "//absl/base:core_headers",
205    ],
206)
207
208cc_test(
209    name = "demangle_test",
210    srcs = ["internal/demangle_test.cc"],
211    copts = ABSL_TEST_COPTS,
212    linkopts = ABSL_DEFAULT_LINKOPTS,
213    deps = [
214        ":demangle_internal",
215        ":stack_consumption",
216        "//absl/base:config",
217        "//absl/base:core_headers",
218        "//absl/base:raw_logging_internal",
219        "//absl/memory",
220        "@com_google_googletest//:gtest_main",
221    ],
222)
223
224cc_library(
225    name = "leak_check",
226    srcs = ["leak_check.cc"],
227    hdrs = ["leak_check.h"],
228    linkopts = ABSL_DEFAULT_LINKOPTS,
229    deps = [
230        "//absl/base:config",
231        "//absl/base:core_headers",
232    ],
233)
234
235# Adding a dependency to leak_check_disable will disable
236# sanitizer leak checking (asan/lsan) in a test without
237# the need to mess around with build features.
238cc_library(
239    name = "leak_check_disable",
240    srcs = ["leak_check_disable.cc"],
241    linkopts = ABSL_DEFAULT_LINKOPTS,
242    linkstatic = 1,
243    deps = ["//absl/base:config"],
244    alwayslink = 1,
245)
246
247# These targets exists for use in tests only, explicitly configuring the
248# LEAK_SANITIZER macro. It must be linked with -fsanitize=leak for lsan.
249ABSL_LSAN_LINKOPTS = select({
250    "//absl:clang_compiler": ["-fsanitize=leak"],
251    "//conditions:default": [],
252})
253
254cc_library(
255    name = "leak_check_api_enabled_for_testing",
256    testonly = 1,
257    srcs = ["leak_check.cc"],
258    hdrs = ["leak_check.h"],
259    copts = select({
260        "//absl:clang_compiler": ["-DLEAK_SANITIZER"],
261        "//conditions:default": [],
262    }),
263    linkopts = ABSL_DEFAULT_LINKOPTS,
264    visibility = ["//visibility:private"],
265    deps = [
266        "//absl/base:config",
267        "//absl/base:core_headers",
268    ],
269)
270
271cc_library(
272    name = "leak_check_api_disabled_for_testing",
273    testonly = 1,
274    srcs = ["leak_check.cc"],
275    hdrs = ["leak_check.h"],
276    copts = ["-ULEAK_SANITIZER"],
277    linkopts = ABSL_DEFAULT_LINKOPTS,
278    visibility = ["//visibility:private"],
279    deps = [
280        "//absl/base:config",
281        "//absl/base:core_headers",
282    ],
283)
284
285cc_test(
286    name = "leak_check_test",
287    srcs = ["leak_check_test.cc"],
288    copts = select({
289        "//absl:clang_compiler": ["-DABSL_EXPECT_LEAK_SANITIZER"],
290        "//conditions:default": [],
291    }),
292    linkopts = ABSL_LSAN_LINKOPTS + ABSL_DEFAULT_LINKOPTS,
293    tags = ["notsan"],
294    deps = [
295        ":leak_check_api_enabled_for_testing",
296        "//absl/base",
297        "@com_google_googletest//:gtest_main",
298    ],
299)
300
301cc_test(
302    name = "leak_check_no_lsan_test",
303    srcs = ["leak_check_test.cc"],
304    copts = ["-UABSL_EXPECT_LEAK_SANITIZER"],
305    linkopts = ABSL_DEFAULT_LINKOPTS,
306    tags = ["noasan"],
307    deps = [
308        ":leak_check_api_disabled_for_testing",
309        "//absl/base",  # for raw_logging
310        "@com_google_googletest//:gtest_main",
311    ],
312)
313
314# Test that leak checking is skipped when lsan is enabled but
315# ":leak_check_disable" is linked in.
316#
317# This test should fail in the absence of a dependency on ":leak_check_disable"
318cc_test(
319    name = "disabled_leak_check_test",
320    srcs = ["leak_check_fail_test.cc"],
321    linkopts = ABSL_LSAN_LINKOPTS + ABSL_DEFAULT_LINKOPTS,
322    tags = ["notsan"],
323    deps = [
324        ":leak_check_api_enabled_for_testing",
325        ":leak_check_disable",
326        "//absl/base",
327        "@com_google_googletest//:gtest_main",
328    ],
329)
330
331cc_library(
332    name = "stack_consumption",
333    testonly = 1,
334    srcs = ["internal/stack_consumption.cc"],
335    hdrs = ["internal/stack_consumption.h"],
336    copts = ABSL_DEFAULT_COPTS,
337    linkopts = ABSL_DEFAULT_LINKOPTS,
338    visibility = ["//visibility:private"],
339    deps = [
340        "//absl/base:config",
341        "//absl/base:core_headers",
342        "//absl/base:raw_logging_internal",
343    ],
344)
345
346cc_test(
347    name = "stack_consumption_test",
348    srcs = ["internal/stack_consumption_test.cc"],
349    copts = ABSL_TEST_COPTS,
350    linkopts = ABSL_DEFAULT_LINKOPTS,
351    tags = ["notsan"],
352    deps = [
353        ":stack_consumption",
354        "//absl/base:core_headers",
355        "//absl/base:raw_logging_internal",
356        "@com_google_googletest//:gtest_main",
357    ],
358)
359