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        "//absl/base:raw_logging_internal",
53    ],
54)
55
56cc_test(
57    name = "stacktrace_test",
58    srcs = ["stacktrace_test.cc"],
59    copts = ABSL_TEST_COPTS,
60    linkopts = ABSL_DEFAULT_LINKOPTS,
61    deps = [
62        ":stacktrace",
63        "//absl/base:core_headers",
64        "@com_google_googletest//:gtest_main",
65    ],
66)
67
68cc_library(
69    name = "symbolize",
70    srcs = [
71        "symbolize.cc",
72        "symbolize_darwin.inc",
73        "symbolize_elf.inc",
74        "symbolize_emscripten.inc",
75        "symbolize_unimplemented.inc",
76        "symbolize_win32.inc",
77    ],
78    hdrs = [
79        "internal/symbolize.h",
80        "symbolize.h",
81    ],
82    copts = ABSL_DEFAULT_COPTS,
83    linkopts = ABSL_DEFAULT_LINKOPTS + select({
84        "//absl:msvc_compiler": ["-DEFAULTLIB:dbghelp.lib"],
85        "//absl:clang-cl_compiler": ["-DEFAULTLIB:dbghelp.lib"],
86        "//conditions:default": [],
87    }),
88    deps = [
89        ":debugging_internal",
90        ":demangle_internal",
91        "//absl/base",
92        "//absl/base:config",
93        "//absl/base:core_headers",
94        "//absl/base:dynamic_annotations",
95        "//absl/base:malloc_internal",
96        "//absl/base:raw_logging_internal",
97        "//absl/strings",
98    ],
99)
100
101cc_test(
102    name = "symbolize_test",
103    srcs = ["symbolize_test.cc"],
104    copts = ABSL_TEST_COPTS + select({
105        "//absl:msvc_compiler": ["/Z7"],
106        "//absl:clang-cl_compiler": ["/Z7"],
107        "//conditions:default": [],
108    }),
109    linkopts = ABSL_DEFAULT_LINKOPTS + select({
110        "//absl:msvc_compiler": ["/DEBUG"],
111        "//absl:clang-cl_compiler": ["/DEBUG"],
112        "//conditions:default": [],
113    }),
114    deps = [
115        ":stack_consumption",
116        ":symbolize",
117        "//absl/base",
118        "//absl/base:config",
119        "//absl/base:core_headers",
120        "//absl/base:raw_logging_internal",
121        "//absl/memory",
122        "//absl/strings",
123        "@com_google_googletest//:gtest",
124    ],
125)
126
127cc_library(
128    name = "examine_stack",
129    srcs = [
130        "internal/examine_stack.cc",
131    ],
132    hdrs = [
133        "internal/examine_stack.h",
134    ],
135    copts = ABSL_DEFAULT_COPTS,
136    linkopts = ABSL_DEFAULT_LINKOPTS,
137    visibility = ["//absl/log/internal:__pkg__"],
138    deps = [
139        ":stacktrace",
140        ":symbolize",
141        "//absl/base:config",
142        "//absl/base:core_headers",
143        "//absl/base:raw_logging_internal",
144    ],
145)
146
147cc_library(
148    name = "failure_signal_handler",
149    srcs = ["failure_signal_handler.cc"],
150    hdrs = ["failure_signal_handler.h"],
151    copts = ABSL_DEFAULT_COPTS,
152    linkopts = ABSL_DEFAULT_LINKOPTS,
153    deps = [
154        ":examine_stack",
155        ":stacktrace",
156        "//absl/base",
157        "//absl/base:config",
158        "//absl/base:core_headers",
159        "//absl/base:raw_logging_internal",
160    ],
161)
162
163cc_test(
164    name = "failure_signal_handler_test",
165    srcs = ["failure_signal_handler_test.cc"],
166    copts = ABSL_TEST_COPTS,
167    linkopts = select({
168        "//absl:msvc_compiler": [],
169        "//absl:clang-cl_compiler": [],
170        "//absl:wasm": [],
171        "//conditions:default": ["-pthread"],
172    }) + ABSL_DEFAULT_LINKOPTS,
173    deps = [
174        ":failure_signal_handler",
175        ":stacktrace",
176        ":symbolize",
177        "//absl/base:raw_logging_internal",
178        "//absl/strings",
179        "@com_google_googletest//:gtest",
180    ],
181)
182
183cc_library(
184    name = "debugging_internal",
185    srcs = [
186        "internal/address_is_readable.cc",
187        "internal/elf_mem_image.cc",
188        "internal/vdso_support.cc",
189    ],
190    hdrs = [
191        "internal/address_is_readable.h",
192        "internal/elf_mem_image.h",
193        "internal/vdso_support.h",
194    ],
195    copts = ABSL_DEFAULT_COPTS,
196    linkopts = ABSL_DEFAULT_LINKOPTS,
197    visibility = ["//visibility:private"],
198    deps = [
199        "//absl/base:config",
200        "//absl/base:core_headers",
201        "//absl/base:dynamic_annotations",
202        "//absl/base:errno_saver",
203        "//absl/base:raw_logging_internal",
204    ],
205)
206
207cc_library(
208    name = "demangle_internal",
209    srcs = ["internal/demangle.cc"],
210    hdrs = ["internal/demangle.h"],
211    copts = ABSL_DEFAULT_COPTS,
212    linkopts = ABSL_DEFAULT_LINKOPTS,
213    visibility = ["//visibility:private"],
214    deps = [
215        "//absl/base",
216        "//absl/base:config",
217        "//absl/base:core_headers",
218    ],
219)
220
221cc_test(
222    name = "demangle_test",
223    srcs = ["internal/demangle_test.cc"],
224    copts = ABSL_TEST_COPTS,
225    linkopts = ABSL_DEFAULT_LINKOPTS,
226    deps = [
227        ":demangle_internal",
228        ":stack_consumption",
229        "//absl/base:config",
230        "//absl/base:core_headers",
231        "//absl/base:raw_logging_internal",
232        "//absl/memory",
233        "@com_google_googletest//:gtest_main",
234    ],
235)
236
237cc_library(
238    name = "leak_check",
239    srcs = ["leak_check.cc"],
240    hdrs = ["leak_check.h"],
241    copts = ABSL_DEFAULT_COPTS,
242    linkopts = ABSL_DEFAULT_LINKOPTS,
243    deps = [
244        "//absl/base:config",
245        "//absl/base:core_headers",
246    ],
247)
248
249cc_test(
250    name = "leak_check_test",
251    srcs = ["leak_check_test.cc"],
252    copts = ABSL_TEST_COPTS,
253    linkopts = ABSL_DEFAULT_LINKOPTS,
254    tags = ["notsan"],
255    deps = [
256        ":leak_check",
257        "//absl/base:config",
258        "//absl/base:raw_logging_internal",
259        "@com_google_googletest//:gtest_main",
260    ],
261)
262
263# Binary that leaks memory and expects to fail on exit.  This isn't a
264# test that expected to pass on its own; it exists to be called by a
265# script that checks exit status and output.
266# TODO(absl-team): Write a test to run this with a script that
267# verifies that it correctly fails.
268cc_binary(
269    name = "leak_check_fail_test_binary",
270    srcs = ["leak_check_fail_test.cc"],
271    copts = ABSL_TEST_COPTS,
272    linkopts = ABSL_DEFAULT_LINKOPTS,
273    deps = [
274        ":leak_check",
275        "//absl/base:raw_logging_internal",
276        "@com_google_googletest//:gtest_main",
277    ],
278)
279
280cc_library(
281    name = "stack_consumption",
282    testonly = 1,
283    srcs = ["internal/stack_consumption.cc"],
284    hdrs = ["internal/stack_consumption.h"],
285    copts = ABSL_DEFAULT_COPTS,
286    linkopts = ABSL_DEFAULT_LINKOPTS,
287    visibility = ["//visibility:private"],
288    deps = [
289        "//absl/base:config",
290        "//absl/base:core_headers",
291        "//absl/base:raw_logging_internal",
292    ],
293)
294
295cc_test(
296    name = "stack_consumption_test",
297    srcs = ["internal/stack_consumption_test.cc"],
298    copts = ABSL_TEST_COPTS,
299    linkopts = ABSL_DEFAULT_LINKOPTS,
300    tags = ["notsan"],
301    deps = [
302        ":stack_consumption",
303        "//absl/base:core_headers",
304        "//absl/base:raw_logging_internal",
305        "@com_google_googletest//:gtest_main",
306    ],
307)
308
309cc_binary(
310    name = "stacktrace_benchmark",
311    testonly = 1,
312    srcs = ["stacktrace_benchmark.cc"],
313    copts = ABSL_TEST_COPTS,
314    linkopts = ABSL_DEFAULT_LINKOPTS,
315    tags = ["benchmark"],
316    deps = [
317        ":stacktrace",
318        "//absl/base:config",
319        "//absl/base:core_headers",
320        "@com_github_google_benchmark//:benchmark_main",
321    ],
322)
323