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