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