|  | // Copyright 2020 The Fuchsia Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | #ifndef TOOLS_SYMBOLIZER_SYMBOLIZER_H_ | 
|  | #define TOOLS_SYMBOLIZER_SYMBOLIZER_H_ | 
|  |  | 
|  | #include <iostream> | 
|  | #include <string_view> | 
|  |  | 
|  | namespace symbolizer { | 
|  |  | 
|  | // This is the core logic of the symbolizer. The implementation is separated from the interface here | 
|  | // for better testing. | 
|  | class Symbolizer { | 
|  | public: | 
|  | enum class AddressType { | 
|  | kUnknown, | 
|  | kReturnAddress,   // :ra suffix | 
|  | kProgramCounter,  // :pc suffix | 
|  | }; | 
|  | virtual ~Symbolizer() = default; | 
|  |  | 
|  | // The following 4 functions correspond to the 4 markup tags we support right now. | 
|  | // Check //docs/reference/kernel/symbolizer_markup.md for details. | 
|  |  | 
|  | // Resets the internal state and starts processing the stack trace for a new process. | 
|  | virtual void Reset() = 0; | 
|  |  | 
|  | // Adds a module to the current process, indexed by id. | 
|  | virtual void Module(uint64_t id, std::string_view name, std::string_view build_id) = 0; | 
|  |  | 
|  | // Associates a memory region with the module indexed by its id. | 
|  | virtual void MMap(uint64_t address, uint64_t size, uint64_t module_id, | 
|  | uint64_t module_offset) = 0; | 
|  |  | 
|  | // Represents one frame in the backtrace. We'll output the symbolized content for each frame. | 
|  | virtual void Backtrace(int frame_id, uint64_t address, AddressType type, | 
|  | std::string_view message) = 0; | 
|  | }; | 
|  |  | 
|  | }  // namespace symbolizer | 
|  |  | 
|  | #endif  // TOOLS_SYMBOLIZER_SYMBOLIZER_H_ |