// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later

#include "common/logging/log.h"
#include "common/types.h"
#include "core/loader/symbols_resolver.h"

namespace Core::Loader {

void SymbolsResolver::AddSymbol(const SymbolRes& s, u64 virtual_addr) {
    SymbolRecord r{};
    r.name = GenerateName(s);
    r.virtual_address = virtual_addr;
    m_symbols.push_back(r);
}

std::string SymbolsResolver::GenerateName(const SymbolRes& s) {
    return fmt::format("{} lib[{}_v{}]mod[{}_v{}.{}]", s.name, s.library, s.library_version,
                       s.module, s.module_version_major, s.module_version_minor);
}

const SymbolRecord* SymbolsResolver::FindSymbol(const SymbolRes& s) const {
    const std::string name = GenerateName(s);
    for (u32 i = 0; i < m_symbols.size(); i++) {
        if (m_symbols[i].name.compare(name) == 0) {
            return &m_symbols[i];
        }
    }

    LOG_INFO(Core_Linker, "Unresolved! {}", name);
    return nullptr;
}

} // namespace Core::Loader
