mirror of
https://github.com/shadps4-emu/shadPS4.git
synced 2025-12-16 12:09:07 +00:00
Some checks are pending
Build and Release / reuse (push) Waiting to run
Build and Release / clang-format (push) Waiting to run
Build and Release / get-info (push) Waiting to run
Build and Release / windows-sdl (push) Blocked by required conditions
Build and Release / macos-sdl (push) Blocked by required conditions
Build and Release / linux-sdl (push) Blocked by required conditions
Build and Release / linux-sdl-gcc (push) Blocked by required conditions
Build and Release / pre-release (push) Blocked by required conditions
* Swap write access mode for read write Opening with access mode w will erase the opened file. We do not want this. * Create mode Opening with write access was previously the only way to create a file through open, so add a separate FileAccessMode that uses the write access mode to create files. * Update file_system.cpp Remove a hack added to posix_rename to bypass the file clearing behaviors of FileAccessMode::Write * Check access mode in read functions Write-only files cause the EBADF return on the various read functions. Now that we're opening files differently, properly handling this is necessary. * Separate appends into proper modes Fixes a potential regression from one of my prior PRs, and ensures the Write | Append flag combo also behaves properly in read-related functions. * Move IsWriteOnly check after device/socket reads file->f is only valid for files, so checking this before checking for sockets/devices will cause access violations. * Fix issues Now that Write is identical to ReadWrite, internal uses of Write need to be swapped to my new Create mode * Fix remaining uses of FileAccessMode write to create files Missed these before. * Fix rebase * Add stubbed get_authinfo (#3722) * mostly stubbed get_authinfo * Return value observed on console if get_authinfo was called for the current thread, esrch otherwise --------- Co-authored-by: kalaposfos13 <153381648+kalaposfos13@users.noreply.github.com> Co-authored-by: georgemoralis <giorgosmrls@gmail.com>
49 lines
1.7 KiB
C++
49 lines
1.7 KiB
C++
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
|
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
|
|
|
#include <fmt/format.h>
|
|
#include "common/io_file.h"
|
|
#include "common/string_util.h"
|
|
#include "common/types.h"
|
|
#include "core/aerolib/aerolib.h"
|
|
#include "core/loader/symbols_resolver.h"
|
|
|
|
namespace Core::Loader {
|
|
|
|
void SymbolsResolver::AddSymbol(const SymbolResolver& s, u64 virtual_addr) {
|
|
m_symbols.emplace_back(GenerateName(s), s.nidName, virtual_addr);
|
|
}
|
|
|
|
std::string SymbolsResolver::GenerateName(const SymbolResolver& s) {
|
|
return fmt::format("{}#{}#{}#{}#{}", s.name, s.library, s.library_version, s.module,
|
|
SymbolTypeToS(s.type));
|
|
}
|
|
|
|
const SymbolRecord* SymbolsResolver::FindSymbol(const SymbolResolver& s) const {
|
|
const std::string name = GenerateName(s);
|
|
for (u32 i = 0; i < m_symbols.size(); i++) {
|
|
if (m_symbols[i].name == name) {
|
|
return &m_symbols[i];
|
|
}
|
|
}
|
|
|
|
// LOG_INFO(Core_Linker, "Unresolved! {}", name);
|
|
return nullptr;
|
|
}
|
|
|
|
void SymbolsResolver::DebugDump(const std::filesystem::path& file_name) {
|
|
Common::FS::IOFile f{file_name, Common::FS::FileAccessMode::Create,
|
|
Common::FS::FileType::TextFile};
|
|
for (const auto& symbol : m_symbols) {
|
|
const auto ids = Common::SplitString(symbol.name, '#');
|
|
const auto aeronid = AeroLib::FindByNid(ids.at(0).c_str());
|
|
const auto nid_name = aeronid ? aeronid->name : "UNK";
|
|
f.WriteString(
|
|
fmt::format("0x{:<20x} {:<16} {:<60} {:<30} {:<2} {:<30} {:<2} {:<2} {:<10}\n",
|
|
symbol.virtual_address, ids.at(0), nid_name, ids.at(1), ids.at(2),
|
|
ids.at(3), ids.at(4), ids.at(5), ids.at(6)));
|
|
}
|
|
}
|
|
|
|
} // namespace Core::Loader
|