blob: 44fc5726ed3ecdab683edaf75e3b5995abec80bf [file] [log] [blame]
// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/gwp_asan/common/allocation_info.h"
#include "base/debug/stack_trace.h"
#include "build/build_config.h"
#if BUILDFLAG(IS_APPLE)
#include <pthread.h>
#endif
namespace gwp_asan::internal {
size_t AllocationInfo::GetStackTrace(base::span<const void*> trace) {
// TODO(vtsyrklevich): Investigate using trace_event::CFIBacktraceAndroid
// on 32-bit Android for canary/dev (where we can dynamically load unwind
// data.)
#if BUILDFLAG(IS_ANDROID) && BUILDFLAG(CAN_UNWIND_WITH_FRAME_POINTERS)
// Android release builds ship without unwind tables so the normal method of
// stack trace collection for base::debug::StackTrace doesn't work; however,
// AArch64 builds ship with frame pointers so we can still collect stack
// traces in that case.
return base::debug::TraceStackFramePointers(trace, 0);
#else
return base::debug::CollectStackTrace(trace);
#endif
}
} // namespace gwp_asan::internal