xref: /aosp_15_r20/external/cronet/base/debug/dwarf_line_no.h (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker // Copyright 2021 The Chromium Authors
2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file.
4*6777b538SAndroid Build Coastguard Worker 
5*6777b538SAndroid Build Coastguard Worker #ifndef BASE_DEBUG_DWARF_LINE_NO_H_
6*6777b538SAndroid Build Coastguard Worker #define BASE_DEBUG_DWARF_LINE_NO_H_
7*6777b538SAndroid Build Coastguard Worker 
8*6777b538SAndroid Build Coastguard Worker #include <cstddef>
9*6777b538SAndroid Build Coastguard Worker #include <cstdint>
10*6777b538SAndroid Build Coastguard Worker 
11*6777b538SAndroid Build Coastguard Worker namespace base {
12*6777b538SAndroid Build Coastguard Worker namespace debug {
13*6777b538SAndroid Build Coastguard Worker 
14*6777b538SAndroid Build Coastguard Worker // Finds the compile unit offset in .debug_info for each frame in `trace`.
15*6777b538SAndroid Build Coastguard Worker //
16*6777b538SAndroid Build Coastguard Worker // Expects `trace` and `cu_offsets` to be `num_frames` in size. If a frame
17*6777b538SAndroid Build Coastguard Worker // cannot be found, the corresponding value stored in `cu_offsets` is 0.
18*6777b538SAndroid Build Coastguard Worker void GetDwarfCompileUnitOffsets(const void* const* trace,
19*6777b538SAndroid Build Coastguard Worker                                 uint64_t* cu_offsets,
20*6777b538SAndroid Build Coastguard Worker                                 size_t num_frames);
21*6777b538SAndroid Build Coastguard Worker 
22*6777b538SAndroid Build Coastguard Worker // Formats the source file, line number and column for `pc` and into `out`.
23*6777b538SAndroid Build Coastguard Worker //
24*6777b538SAndroid Build Coastguard Worker // The `cu_offsets` is the offset in the .debug_info section for the compile
25*6777b538SAndroid Build Coastguard Worker // unit or partial unit DIE corresponding to the `pc`. It can be found using
26*6777b538SAndroid Build Coastguard Worker // GetDwarfCompileUnitOffsets() and must not be 0.
27*6777b538SAndroid Build Coastguard Worker //
28*6777b538SAndroid Build Coastguard Worker // Example:
29*6777b538SAndroid Build Coastguard Worker //   ../../base/debug/stack_trace_unittest.cc:120,16
30*6777b538SAndroid Build Coastguard Worker //
31*6777b538SAndroid Build Coastguard Worker // This means `pc` was from line 120, column 16, of stack_trace_unittest.cc.
32*6777b538SAndroid Build Coastguard Worker bool GetDwarfSourceLineNumber(const void* pc,
33*6777b538SAndroid Build Coastguard Worker                               uint64_t cu_offsets,
34*6777b538SAndroid Build Coastguard Worker                               char* out,
35*6777b538SAndroid Build Coastguard Worker                               size_t out_size);
36*6777b538SAndroid Build Coastguard Worker }  // namespace debug
37*6777b538SAndroid Build Coastguard Worker }  // namespace base
38*6777b538SAndroid Build Coastguard Worker 
39*6777b538SAndroid Build Coastguard Worker #endif  // BASE_DEBUG_DWARF_LINE_NO_H_
40