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 = ["internal/demangle.cc"], 223 hdrs = ["internal/demangle.h"], 224 copts = ABSL_DEFAULT_COPTS, 225 linkopts = ABSL_DEFAULT_LINKOPTS, 226 visibility = [ 227 "//absl/container:__pkg__", 228 "//absl/debugging:__pkg__", 229 ], 230 deps = [ 231 "//absl/base", 232 "//absl/base:config", 233 "//absl/base:core_headers", 234 ], 235) 236 237cc_test( 238 name = "demangle_test", 239 srcs = ["internal/demangle_test.cc"], 240 copts = ABSL_TEST_COPTS, 241 linkopts = ABSL_DEFAULT_LINKOPTS, 242 deps = [ 243 ":demangle_internal", 244 ":stack_consumption", 245 "//absl/base:config", 246 "//absl/base:core_headers", 247 "//absl/log", 248 "//absl/memory", 249 "@com_google_googletest//:gtest", 250 "@com_google_googletest//:gtest_main", 251 ], 252) 253 254cc_library( 255 name = "leak_check", 256 srcs = ["leak_check.cc"], 257 hdrs = ["leak_check.h"], 258 copts = ABSL_DEFAULT_COPTS, 259 linkopts = ABSL_DEFAULT_LINKOPTS, 260 deps = [ 261 "//absl/base:config", 262 "//absl/base:core_headers", 263 ], 264) 265 266cc_test( 267 name = "leak_check_test", 268 srcs = ["leak_check_test.cc"], 269 copts = ABSL_TEST_COPTS, 270 linkopts = ABSL_DEFAULT_LINKOPTS, 271 tags = ["notsan"], 272 deps = [ 273 ":leak_check", 274 "//absl/base:config", 275 "//absl/log", 276 "@com_google_googletest//:gtest", 277 "@com_google_googletest//:gtest_main", 278 ], 279) 280 281# Binary that leaks memory and expects to fail on exit. This isn't a 282# test that expected to pass on its own; it exists to be called by a 283# script that checks exit status and output. 284# TODO(absl-team): Write a test to run this with a script that 285# verifies that it correctly fails. 286cc_binary( 287 name = "leak_check_fail_test_binary", 288 srcs = ["leak_check_fail_test.cc"], 289 copts = ABSL_TEST_COPTS, 290 linkopts = ABSL_DEFAULT_LINKOPTS, 291 deps = [ 292 ":leak_check", 293 "//absl/log", 294 "@com_google_googletest//:gtest", 295 "@com_google_googletest//:gtest_main", 296 ], 297) 298 299cc_library( 300 name = "stack_consumption", 301 testonly = 1, 302 srcs = ["internal/stack_consumption.cc"], 303 hdrs = ["internal/stack_consumption.h"], 304 copts = ABSL_DEFAULT_COPTS, 305 linkopts = ABSL_DEFAULT_LINKOPTS, 306 visibility = ["//visibility:private"], 307 deps = [ 308 "//absl/base:config", 309 "//absl/base:core_headers", 310 "//absl/base:raw_logging_internal", 311 ], 312) 313 314cc_test( 315 name = "stack_consumption_test", 316 srcs = ["internal/stack_consumption_test.cc"], 317 copts = ABSL_TEST_COPTS, 318 linkopts = ABSL_DEFAULT_LINKOPTS, 319 tags = ["notsan"], 320 deps = [ 321 ":stack_consumption", 322 "//absl/base:core_headers", 323 "//absl/log", 324 "@com_google_googletest//:gtest", 325 "@com_google_googletest//:gtest_main", 326 ], 327) 328 329cc_binary( 330 name = "stacktrace_benchmark", 331 testonly = 1, 332 srcs = ["stacktrace_benchmark.cc"], 333 copts = ABSL_TEST_COPTS, 334 linkopts = ABSL_DEFAULT_LINKOPTS, 335 tags = ["benchmark"], 336 deps = [ 337 ":stacktrace", 338 "//absl/base:config", 339 "//absl/base:core_headers", 340 "@com_github_google_benchmark//:benchmark_main", 341 ], 342) 343