aboutsummaryrefslogtreecommitdiff
path: root/absl/debugging
Commit message (Collapse)AuthorAgeFilesLines
...
* Fix unwinding through nested signal frames on aarch64.Abseil Team2023-06-091-4/+9
| | | | | | | | | | | | | | | This fixes an endless loop in the absl Arm stack unwinder where encountering a second signal return trampoline (as one has in nested signal frames), would restart unwinding at the outermost signal, resulting in an endless loop. This does not change any behavior in the non-nested signal case, so I believe it is safe for any stack that hasn't encountered this bug already. I would love to test this beyond the absl unwinding test cases and the fingerprint_test included here, but I'm at a loss for other test cases. PiperOrigin-RevId: 539113007 Change-Id: I10037f9fa77b45cc4db61f89b9c6380ec3529113
* Add VxWorks supportBin Lan2023-06-081-1/+2
|
* Note that AsyncSignalSafeWriteToStderr preserves errno, and inline one use ↵Andy Getzendanner2023-05-251-5/+5
| | | | | | | of it into a lambda. PiperOrigin-RevId: 535245982 Change-Id: I816f60c8b6476536df6836500f01c9a3ad88ddd4
* Merge pull request #1455 from juergbi:solarisCopybara-Service2023-05-231-1/+1
|\ | | | | | | | | PiperOrigin-RevId: 534619764 Change-Id: Ied99569176766f9708d5504eac9c7024cdcfd64b
| * absl/debugging: Fix build on SolarisJürg Billeter2023-05-231-1/+1
| |
* | Migrate most RAW_LOGs and RAW_CHECKs in tests to regular LOG and CHECK.Andy Getzendanner2023-05-238-42/+49
|/ | | | | | | | | | | The non-RAW_ versions provide better output but weren't available when most of these tests were written. There are just a couple spots where RAW_ is actually needed, e.g. signal handlers and malloc hooks. Also fix a couple warnings in layout_test.cc newly surfaced because the optimizer understands CHECK_XX differently than INTERNAL_CHECK. PiperOrigin-RevId: 534584435 Change-Id: I8d36fa809ffdaae5a3813064bd602cb8611c1613
* Add missing dependency on dynamic_annotations to stacktrace, which is needed ↵Abseil Team2023-05-082-0/+2
| | | | | | | | | in some of the builds. PiperOrigin-RevId: 530308301 Change-Id: I7c885156e14d9c8c444c7c6f8d38e7aaac7c01a7
* Fix spelling mistakesVertexwahn2023-04-274-4/+4
|
* Fix some spelling mistakesVertexwahn2023-04-241-1/+1
|
* Name anonymous memory allocations on Linux.Abseil Team2023-04-121-0/+18
| | | | | | | | | | | | | | | | | | | Use Linux's prctl(PR_SET_VMA) system call to name memory arenas being allocated using mmap(MAP_ANONYMOUS). This change allows Abseil's memory arena(s) to be distinguished from other uses of anonymous memory within a process, which in turn helps investigations into the memory usage of applications. The change adds a new prctl() system call to the code paths that call mmap(). This is not expected to add significant overhead to applications. The call to prctl(PR_SET_VMA, ...) can fail if the Linux kernel in use was not configured with the CONFIG_ANON_VMA_NAME kernel option. This should be OK since the naming memory regions is primarily a debugging aid. PiperOrigin-RevId: 523687348 Change-Id: Ie404e5eeef0a6da53330b3a56149c4f3bc6bf5c7
* Properly calculate frame sizes on Aarch64Abseil Team2023-03-301-12/+15
| | | | | | | | For function N in the stack, the current code reports the size of frame N - 1. Fix that. PiperOrigin-RevId: 520688072 Change-Id: I984729f72f79aebae1b6997cb51d3ddef9199d1e
* Fix //absl/{base,debugging:symbolize} build with MingwAbseil Team2023-02-281-0/+4
| | | | | PiperOrigin-RevId: 512974770 Change-Id: If7a8128996d2a73ac566faaa676ddd3858d51af6
* Merge pull request #1393 from AtariDreams:cppCopybara-Service2023-02-221-1/+1
|\ | | | | | | | | PiperOrigin-RevId: 511696041 Change-Id: I77a87c8721f64e0d9e9a70e08a7127312488ff21
| * Prefer C++ notation over CRose2023-02-161-1/+1
| | | | | | | | nullptr instead of 0 and nothing instead of void for function arguments is preferred.
* | Merge pull request #1394 from AtariDreams:constructorsCopybara-Service2023-02-211-2/+2
|\ \ | | | | | | | | | | | | PiperOrigin-RevId: 511271203 Change-Id: I1ed352e06265b705b62d401a50b4699d01f7f1d7
| * | Convert empty constructors to default onesRose2023-02-171-2/+2
| |/ | | | | | | These make the changed constructors match closer to the other ones that are default.
* / absl: fix potential int overflow in ELF readingAbseil Team2023-02-211-0/+10
|/ | | | | | | | | | | | | | Both e_shentsize and e_shstrndx are uint16, so the product elf_header.e_shentsize * elf_header.e_shstrndx can overflow the promoted type int (MAX_UINT16 * MAX_UINT16 > MAX_INT), which is undefined behavior. Not sure if it can affect any real cases or not, though. Cast e_shentsize to loff_t instead of e_shoff. This makes both multiplication and addition to use loff_t type. PiperOrigin-RevId: 511254775 Change-Id: I39c493bfb539cca6742aae807c50718d31e7c001
* The type of MINSIGSTKSZ is not guaranteed; avoid potential implicit sign ↵Abseil Team2023-01-281-1/+1
| | | | | | | | | conversion. On some glibcs, this is defined as a call to sysconf(), which returns a long. PiperOrigin-RevId: 505380003 Change-Id: I53207846d733d3a529630a6aff9bca425cf90a21
* absl: harden stack bounds checkAbseil Team2023-01-231-6/+14
| | | | | | | | Ensure that we know both real low and high stack bounds when relying on the stack bounds check. PiperOrigin-RevId: 504003431 Change-Id: I8f6e6b75f5edff233d3cf80285f81b53f9080a0f
* absl: add a stack unwinding testAbseil Team2023-01-204-2/+88
| | | | | | | | | | | | | | | END_PUBLIC absl: relax frame size check in x86 stack unwinding Currently the unwinder stops whenever it sees a frame >100000 bytes. There may be such legitimate frames, the default stack size is O(megabytes). Only do this check if we are not within the thread stack bounds. The thread stack is assumed to be readable, so the worst thing that can happen if the large stack frame is actually bogus is that we will add one/few wrong frames and stop. PiperOrigin-RevId: 503374764 Change-Id: Icabb55d6468b12a42bf026c37c98dbe84977e659
* [NFC] fix typo in comment.Abseil Team2022-12-271-1/+1
| | | | | PiperOrigin-RevId: 498048994 Change-Id: Iee969b9171921e3ffdca2610f9b93b53678d0b9d
* Replace std::atomic_flag with std::atomic<bool> to avoid the C++20Derek Mauro2022-11-091-0/+1
| | | | | | | | | | | | | | | | | deprecation of ATOMIC_FLAG_INIT. Another option would have been to use macros to only initialize std::atomic_flag before C++20, but I decided to use one compilation path instead. The major difference between std::atomic_flag and std::atomic<bool> is that the former is guaranteed to be lock-free, but we already assume std::atomic<bool> is lock-free in many places. https://en.cppreference.com/w/cpp/atomic/atomic_flag PiperOrigin-RevId: 487397075 Change-Id: I3f1c539ec8b2ca58547282e69ed73e93243e8efe
* Use the `-l` form for MinGW-specific link dependenciesRussell Johnston2022-10-151-1/+1
| | | | | This corrects the generated .pc files, so these libs match the other libs already included there.
* Fix "unsafe narrowing" warnings in absl, 12/12.Abseil Team2022-10-132-8/+11
| | | | | | | | | | | | | | | Addresses failures with the following, in some files: -Wshorten-64-to-32 -Wimplicit-int-conversion -Wsign-compare -Wsign-conversion -Wtautological-unsigned-zero-compare (This specific CL enables these warnings and fixes the remaining known issues.) Bug: chromium:1292951 PiperOrigin-RevId: 480981210 Change-Id: I92d5023c6833e24d6aa29b10d433116329972f41
* Improve failure message: tell the values we don't like.Abseil Team2022-09-131-2/+3
| | | | | PiperOrigin-RevId: 474043469 Change-Id: I9ea33a8bf026263c9e10d2a183014a5ee8df1306
* Increase the number of per-ObjFile program headers we can expect.Abseil Team2022-09-131-1/+2
| | | | | PiperOrigin-RevId: 474017481 Change-Id: I1be222fa38ad01f6ddbcddd610f9629fd4888777
* Fix format string error with an explicit castDerek Mauro2022-09-081-4/+3
| | | | | PiperOrigin-RevId: 473088472 Change-Id: If4fb8354490821cbaf53743f51bf0b0d2ba85895
* Fix "unsafe narrowing" warnings in absl, 9/n.Abseil Team2022-09-083-92/+108
| | | | | | | | | | | | | | | Addresses failures with the following, in some files: -Wshorten-64-to-32 -Wimplicit-int-conversion -Wsign-compare -Wsign-conversion -Wtautological-unsigned-zero-compare (This specific CL focuses on miscellaneous non-test source files.) Bug: chromium:1292951 PiperOrigin-RevId: 473054605 Change-Id: Ifd7b24966613ca915511a3a607095508068200b8
* Fix stacktrace header includesDerek Mauro2022-09-082-2/+2
| | | | | | | Fixes #1275 PiperOrigin-RevId: 472990940 Change-Id: I1251b01b09e6a9baac52ae4df443714432115e90
* Add a missing dependency on :raw_logging_internalAbseil Team2022-09-072-0/+2
| | | | | | | | | | | | | internal/stacktrace_x86-inl.inc includes internal/raw_logging.h and therefore needs a direct dependency to satisfy Bazel layering_check (Clang -fmodules-strict-decluse). Clang before https://reviews.llvm.org/D132779 does not report the issue becasue: * internal/stacktrace_x86-inl.inc is an .inc file and is not checked as a main file * internal/stacktrace_x86-inl.inc is a textual header and older Clang incorrectly considers there is no requesting module and suppresses the error. PiperOrigin-RevId: 472795469 Change-Id: Ia4ad667ea80b2590cef1adfd22af025c8df826ac
* Fix "unsafe narrowing" warnings in absl, 7/n.Abseil Team2022-08-297-27/+33
| | | | | | | | | | | | | | | Addresses failures with the following, in some files: -Wshorten-64-to-32 -Wimplicit-int-conversion -Wsign-compare -Wsign-conversion -Wtautological-unsigned-zero-compare (This specific CL focuses on .cc files in debugging/internal/.) Bug: chromium:1292951 PiperOrigin-RevId: 470812243 Change-Id: I5578030bb42ba73cb83d4df84f89e431ceac8992
* debugging: handle alternate signal stacks better on RISCVSaleem Abdulrasool2022-08-041-69/+9
| | | | | | | | | | | | | In the case that we are unwinding with context, if the retreived frame pointer matches the signal context, assume that the value is valid and do not perform confidence checks. In any other case, continue to perform some validation to avoid returning an incorrect frame pointer. Given that the VDSO path is currently untested, remove the code to simplify the logic in the frame walking. PiperOrigin-RevId: 465360612 Change-Id: Iac656012182a12814bafecf20225ba68b90b4db1
* Fix "unsafe narrowing" warnings in absl, 2/n.Abseil Team2022-08-013-34/+37
| | | | | | | | | | | | | | | Addresses failures with the following, in some files: -Wshorten-64-to-32 -Wimplicit-int-conversion -Wsign-compare -Wsign-conversion -Wtautological-unsigned-zero-compare (This specific CL focuses on .cc files in dirs a-h.) Bug: chromium:1292951 PiperOrigin-RevId: 464541951 Change-Id: If23b63ccea8e9b730159ff1c7288e9300a40b6bd
* debugging: honour `STRICT_UNWINDING` in RISCV pathSaleem Abdulrasool2022-07-291-20/+20
| | | | | | | | | | | | | The changes in d6f96eda14aca77748a439f05a567a46ce87e462 enabled handling cases where the stack may be non-contiguous or not fully symbolicated (e.g. in cases of alternate signal stacks). However, it did not properly honour the requests from the caller to perform a strict unwinding where such frames are terminated upon the discontinuity. This repairs that condition. Hoist the alignment check since that is safe to perform early. PiperOrigin-RevId: 464160529 Change-Id: Ic65645928ec60c2a3b4844f3abd4fed1b991edab
* Fix "unsafe narrowing" warnings in absl, 1/n.Abseil Team2022-07-282-10/+12
| | | | | | | | | | | | | | | Addresses failures with the following, in some files: -Wshorten-64-to-32 -Wimplicit-int-conversion -Wsign-compare -Wsign-conversion -Wtautological-unsigned-zero-compare (This specific CL focuses on .h and win32 .inc files.) Bug: chromium:1292951 PiperOrigin-RevId: 463835431 Change-Id: If8e5f7f651d5cd96035e23e4623bdb08a7fedabe
* Fix frame pointer alignment check.Abseil Team2022-07-261-2/+2
| | | | | | | The frame pointer sanity check in NextStackFrame() was more restrictive than it is necessary. The frame pointer is used to load the saved link-register and the address for the next stack frame. So it only needs to be 8-byte aligned. The aarch64 ABI does not specify an alignment requirement for the frame point. PiperOrigin-RevId: 463368519 Change-Id: I473e05181603288f14734fe29013900c7505e201
* Do not re-close files on EINTRDavid Majnemer2022-07-221-2/+2
| | | | | | | | | POSIX is unclear what state a file descriptor is in after a signal is delivered in the middle of close. On Linux, the file is closed even if it returns -1 with errno=EINTR. As such, do not use errno at all when closing files. PiperOrigin-RevId: 462638735 Change-Id: Ie73da1f3c83b1099bef146e1ea32e9a4818597cf
* Renamespace absl::raw_logging_internal to absl::raw_log_internal to match ↵Andy Getzendanner2022-07-201-1/+1
| | | | | | | (upcoming) non-raw logging namespace. PiperOrigin-RevId: 462213222 Change-Id: I3b9371097b368d55cc86b6106d6dec24ce122762
* Check for negative return values from ReadFromOffsetDavid Majnemer2022-07-181-0/+8
| | | | | | | | | In some places, we check if the amount we read is a multiple of some amount we are interested in. However, ReadFromOffset returns -1 when it errors. Certain record sizes can cause ReadFromOffset to cause us to think that we succeeded when we did not. It also results in confusing messages in logs. PiperOrigin-RevId: 461798762 Change-Id: I8c9c7f2cea4d1789e95e50833d5405239a47f02e
* Avoid signedness change when casting off_tBenjamin Barenblat2022-07-181-4/+4
| | | | | | | | | | | Some ABSL_RAW_LOG statements print off_t values by casting them to uintmax_t. However, POSIX says off_t is signed [1], so intmax_t is more appropriate. Replace casts and format specifiers as needed. [1] https://pubs.opengroup.org/onlinepubs/009696899/basedefs/sys/types.h.html#:~:text=off_t%20shall,%20types%2e PiperOrigin-RevId: 461684406 Change-Id: I09ec1a3ba49cd688670618797943a84bc48dba3e
* debugging: add hooks for checking stack rangesSaleem Abdulrasool2022-07-141-4/+17
| | | | | | | Add a hook to permit checking whether an address is in bounds for the stack. PiperOrigin-RevId: 460997074 Change-Id: Ib3b4d0cf656e614aa083457abb079c40ef8db0ff
* Support [[gnu::abi_tag("xyz")]] demangling.Abseil Team2022-07-132-9/+59
| | | | | PiperOrigin-RevId: 460752575 Change-Id: I9629504b5c63dbfe367cd55e287a782cd8fa546c
* Merge pull request #1217 from anpol:macos-sigaltstackCopybara-Service2022-07-131-1/+3
|\ | | | | | | | | PiperOrigin-RevId: 460713135 Change-Id: If7ea94f409edc1e4024d7eaa4ae025b0b258fc02
| * Disable sigaltstack() on macOS to make backtrace() work.Andrei Polushin2022-07-131-1/+3
|/ | | | | | | | | | | There are many reports that sigaltstack() on Apple platforms stops backtrace() from tracing an original stack, e.g. * https://github.com/llvm/llvm-project/commit/d39ead41056b00d10b6223543562cd304307ac9b * https://reviews.llvm.org/D28265 If we disable an alternate stack for signal handler, we won't be able to catch stack overflow errors, but backrace() will work again.
* Revert commit f4988f5bd4176345aad2a525e24d5fd11b3c97eaSaleem Abdulrasool2022-07-061-15/+0
| | | | | | | | This seems to have caused some regressions by causing a flaky failure in some cases. Revert the change to enable investigation. PiperOrigin-RevId: 459331687 Change-Id: Iaa4e4bfcb3013a75a2cd72768d980ac5e450f70c
* debugging: account for differences in alternate signal stacksSaleem Abdulrasool2022-06-301-0/+15
| | | | | | | | | | | | | The alternate signal stack may be sufficiently beyond the esimated frame size (100k). If we run into the case that the frame is not in the correct direction assume that the frames may be non-contiguous due to an alternate signal stack layout. In such a case, if we find that there is an alternate stack configured, ignore the discontiuity (assuming that it is a removable point-wise discontinuity) and continue the stack unwinding. This permits us to capture stack traces in more cases. PiperOrigin-RevId: 458327775 Change-Id: Ia8b461847401492f72a23ba26601c72e0109402c
* Extend visibility of :examine_stack to an upcoming Abseil Log.Gennadiy Rozental2022-06-241-1/+1
| | | | | PiperOrigin-RevId: 457005885 Change-Id: I9045ca94a3695303274d7c448b25e32fe02f3383
* Merge contiguous mappings from the same file.Abseil Team2022-06-221-0/+8
| | | | | | | This allows symbolization to work if different parts of a binary's text are mapped differently, e.g. if they're mlock()ed or mapped onto huge pages. PiperOrigin-RevId: 456600880 Change-Id: I069264f94cf834df9201968275a00828f5eb077e
* PR #1200: absl/debugging/CMakeLists.txt: link with libexecinfo if neededFabrice Fontaine2022-06-211-0/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Imported from GitHub PR https://github.com/abseil/abseil-cpp/pull/1200 `backtrace` and `execinfo.h` can be provided by libexecinfo on uclibc and musl resulting in the following build failure with any user of abseil-cpp (such as collectd): ``` /home/buildroot/autobuild/instance-0/output-1/host/lib/gcc/sparc-buildroot-linux-uclibc/10.3.0/../../../../sparc-buildroot-linux-uclibc/bin/ld: /home/buildroot/autobuild/instance-0/output-1/host/bin/../sparc-buildroot-linux-uclibc/sysroot/usr/lib/libabsl_stacktrace.so: undefined reference to `backtrace' ``` [...] ``` libgrpc++ . . . . . . no (libgrpc++ not found) ``` [...] ``` configure: error: "Some plugins are missing dependencies - see the summary above for details" ``` Fixes: - http://autobuild.buildroot.org/results/6a0484412f020e763ce3ad5bda48f09c78645bff Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com> Merge dac52cd20efb672278dc64bcd74920172a599ac0 into 93ad4284ac12077b7bac07a4743df1c564e7c957 Merging this change closes #1200 COPYBARA_INTEGRATE_REVIEW=https://github.com/abseil/abseil-cpp/pull/1200 from ffontaine:master dac52cd20efb672278dc64bcd74920172a599ac0 PiperOrigin-RevId: 456323163 Change-Id: I3d2206761524d36e2b227c571e2e513f6840ff75
* absl: correct the stack trace path on RISCVSaleem Abdulrasool2022-06-081-14/+11
| | | | | | | | | | | | | | | | | | | When we would perform a stacktrace using the frame pointer walking, because we did the adjustment for the return address separately, we were misaligning the stack size and frame. Simplify the logic and correct the offset. The recovered frame pointer provides us with the return address of the current frame and the previous frame's frame pointer. Subsequently, we decide if we want to record this frame or not. The value in `next_frame_pointer` already points to the value from the previous stack frame (that is the next frame pointer to iterate). As such, the value computed by `ComputeStackFrameSize` is the value for the current frame. This was offset by one previously. Take the opportunity to clean up some of the local comments, fixing typos and splitting up the comments to reflect the lines that they are associated with. PiperOrigin-RevId: 453744059 Change-Id: If14813e0ac36f327f4b7594472f2222d05c478aa