// MIT License // // Copyright (c) 2022-2025 Advanced Micro Devices, Inc. All Rights Reserved. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell // copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in all // copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE // SOFTWARE. #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