// Copyright (c) Advanced Micro Devices, Inc. // SPDX-License-Identifier: MIT #pragma once #include "core/binary/address_range.hpp" #include "core/binary/fwd.hpp" #include "core/utility.hpp" #include "dwarf_entry.hpp" #include "symbol.hpp" #include #include #include #include #include #include namespace rocprofsys { namespace binary { struct binary_info { std::shared_ptr bfd = {}; std::vector mappings = {}; std::deque symbols = {}; std::deque debug_info = {}; std::vector ranges = {}; std::vector breakpoints = {}; std::unordered_map sections = {}; void sort(); std::string filename() const; template RetT* find_section(uintptr_t) const; }; inline void binary_info::sort() { utility::filter_sort_unique(mappings); utility::filter_sort_unique(symbols); utility::filter_sort_unique(ranges); utility::filter_sort_unique(debug_info); utility::filter_sort_unique(breakpoints); } template inline RetT* binary_info::find_section(uintptr_t _addr) const { for(const auto& sitr : sections) { if(sitr.first.contains(_addr)) return static_cast(sitr.second); } return nullptr; } inline std::string binary_info::filename() const { return (bfd) ? std::string{ bfd->name } : std::string{}; } } // namespace binary } // namespace rocprofsys