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