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