Merge pull request #2951 from lioncash/global
core: Remove Core::CurrentProcess()
This commit is contained in:
		@@ -103,7 +103,7 @@ SharedPtr<Object> HandleTable::GetGeneric(Handle handle) const {
 | 
			
		||||
    if (handle == CurrentThread) {
 | 
			
		||||
        return GetCurrentThread();
 | 
			
		||||
    } else if (handle == CurrentProcess) {
 | 
			
		||||
        return Core::CurrentProcess();
 | 
			
		||||
        return Core::System::GetInstance().CurrentProcess();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (!IsValid(handle)) {
 | 
			
		||||
 
 | 
			
		||||
@@ -1142,12 +1142,12 @@ void IApplicationFunctions::PopLaunchParameter(Kernel::HLERequestContext& ctx) {
 | 
			
		||||
    if (kind == LaunchParameterKind::ApplicationSpecific && !launch_popped_application_specific) {
 | 
			
		||||
        const auto backend = BCAT::CreateBackendFromSettings(
 | 
			
		||||
            [this](u64 tid) { return system.GetFileSystemController().GetBCATDirectory(tid); });
 | 
			
		||||
        const auto build_id_full = Core::System::GetInstance().GetCurrentProcessBuildID();
 | 
			
		||||
        const auto build_id_full = system.GetCurrentProcessBuildID();
 | 
			
		||||
        u64 build_id{};
 | 
			
		||||
        std::memcpy(&build_id, build_id_full.data(), sizeof(u64));
 | 
			
		||||
 | 
			
		||||
        const auto data =
 | 
			
		||||
            backend->GetLaunchParameter({Core::CurrentProcess()->GetTitleID(), build_id});
 | 
			
		||||
            backend->GetLaunchParameter({system.CurrentProcess()->GetTitleID(), build_id});
 | 
			
		||||
 | 
			
		||||
        if (data.has_value()) {
 | 
			
		||||
            IPC::ResponseBuilder rb{ctx, 2, 0, 1};
 | 
			
		||||
@@ -1200,7 +1200,7 @@ void IApplicationFunctions::EnsureSaveData(Kernel::HLERequestContext& ctx) {
 | 
			
		||||
    LOG_DEBUG(Service_AM, "called, uid={:016X}{:016X}", user_id[1], user_id[0]);
 | 
			
		||||
 | 
			
		||||
    FileSys::SaveDataDescriptor descriptor{};
 | 
			
		||||
    descriptor.title_id = Core::CurrentProcess()->GetTitleID();
 | 
			
		||||
    descriptor.title_id = system.CurrentProcess()->GetTitleID();
 | 
			
		||||
    descriptor.user_id = user_id;
 | 
			
		||||
    descriptor.type = FileSys::SaveDataType::SaveData;
 | 
			
		||||
    const auto res = system.GetFileSystemController().CreateSaveData(
 | 
			
		||||
 
 | 
			
		||||
@@ -6,8 +6,9 @@
 | 
			
		||||
 | 
			
		||||
namespace Service::BCAT {
 | 
			
		||||
 | 
			
		||||
BCAT::BCAT(std::shared_ptr<Module> module, FileSystem::FileSystemController& fsc, const char* name)
 | 
			
		||||
    : Module::Interface(std::move(module), fsc, name) {
 | 
			
		||||
BCAT::BCAT(Core::System& system, std::shared_ptr<Module> module,
 | 
			
		||||
           FileSystem::FileSystemController& fsc, const char* name)
 | 
			
		||||
    : Interface(system, std::move(module), fsc, name) {
 | 
			
		||||
    // clang-format off
 | 
			
		||||
    static const FunctionInfo functions[] = {
 | 
			
		||||
        {0, &BCAT::CreateBcatService, "CreateBcatService"},
 | 
			
		||||
 
 | 
			
		||||
@@ -6,12 +6,16 @@
 | 
			
		||||
 | 
			
		||||
#include "core/hle/service/bcat/module.h"
 | 
			
		||||
 | 
			
		||||
namespace Core {
 | 
			
		||||
class System;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
namespace Service::BCAT {
 | 
			
		||||
 | 
			
		||||
class BCAT final : public Module::Interface {
 | 
			
		||||
public:
 | 
			
		||||
    explicit BCAT(std::shared_ptr<Module> module, FileSystem::FileSystemController& fsc,
 | 
			
		||||
                  const char* name);
 | 
			
		||||
    explicit BCAT(Core::System& system, std::shared_ptr<Module> module,
 | 
			
		||||
                  FileSystem::FileSystemController& fsc, const char* name);
 | 
			
		||||
    ~BCAT() override;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -35,8 +35,7 @@ using BCATDigest = std::array<u8, 0x10>;
 | 
			
		||||
 | 
			
		||||
namespace {
 | 
			
		||||
 | 
			
		||||
u64 GetCurrentBuildID() {
 | 
			
		||||
    const auto& id = Core::System::GetInstance().GetCurrentProcessBuildID();
 | 
			
		||||
u64 GetCurrentBuildID(const Core::System::CurrentBuildProcessID& id) {
 | 
			
		||||
    u64 out{};
 | 
			
		||||
    std::memcpy(&out, id.data(), sizeof(u64));
 | 
			
		||||
    return out;
 | 
			
		||||
@@ -125,7 +124,8 @@ private:
 | 
			
		||||
 | 
			
		||||
class IBcatService final : public ServiceFramework<IBcatService> {
 | 
			
		||||
public:
 | 
			
		||||
    IBcatService(Backend& backend) : ServiceFramework("IBcatService"), backend(backend) {
 | 
			
		||||
    explicit IBcatService(Core::System& system_, Backend& backend_)
 | 
			
		||||
        : ServiceFramework("IBcatService"), system{system_}, backend{backend_} {
 | 
			
		||||
        // clang-format off
 | 
			
		||||
        static const FunctionInfo functions[] = {
 | 
			
		||||
            {10100, &IBcatService::RequestSyncDeliveryCache, "RequestSyncDeliveryCache"},
 | 
			
		||||
@@ -163,7 +163,8 @@ private:
 | 
			
		||||
    void RequestSyncDeliveryCache(Kernel::HLERequestContext& ctx) {
 | 
			
		||||
        LOG_DEBUG(Service_BCAT, "called");
 | 
			
		||||
 | 
			
		||||
        backend.Synchronize({Core::CurrentProcess()->GetTitleID(), GetCurrentBuildID()},
 | 
			
		||||
        backend.Synchronize({system.CurrentProcess()->GetTitleID(),
 | 
			
		||||
                             GetCurrentBuildID(system.GetCurrentProcessBuildID())},
 | 
			
		||||
                            progress.at(static_cast<std::size_t>(SyncType::Normal)));
 | 
			
		||||
 | 
			
		||||
        IPC::ResponseBuilder rb{ctx, 2, 0, 1};
 | 
			
		||||
@@ -179,7 +180,8 @@ private:
 | 
			
		||||
 | 
			
		||||
        LOG_DEBUG(Service_BCAT, "called, name={}", name);
 | 
			
		||||
 | 
			
		||||
        backend.SynchronizeDirectory({Core::CurrentProcess()->GetTitleID(), GetCurrentBuildID()},
 | 
			
		||||
        backend.SynchronizeDirectory({system.CurrentProcess()->GetTitleID(),
 | 
			
		||||
                                      GetCurrentBuildID(system.GetCurrentProcessBuildID())},
 | 
			
		||||
                                     name,
 | 
			
		||||
                                     progress.at(static_cast<std::size_t>(SyncType::Directory)));
 | 
			
		||||
 | 
			
		||||
@@ -244,6 +246,7 @@ private:
 | 
			
		||||
        rb.Push(RESULT_SUCCESS);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    Core::System& system;
 | 
			
		||||
    Backend& backend;
 | 
			
		||||
 | 
			
		||||
    std::array<ProgressServiceBackend, static_cast<std::size_t>(SyncType::Count)> progress{
 | 
			
		||||
@@ -257,7 +260,7 @@ void Module::Interface::CreateBcatService(Kernel::HLERequestContext& ctx) {
 | 
			
		||||
 | 
			
		||||
    IPC::ResponseBuilder rb{ctx, 2, 0, 1};
 | 
			
		||||
    rb.Push(RESULT_SUCCESS);
 | 
			
		||||
    rb.PushIpcInterface<IBcatService>(*backend);
 | 
			
		||||
    rb.PushIpcInterface<IBcatService>(system, *backend);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
class IDeliveryCacheFileService final : public ServiceFramework<IDeliveryCacheFileService> {
 | 
			
		||||
@@ -539,7 +542,7 @@ void Module::Interface::CreateDeliveryCacheStorageService(Kernel::HLERequestCont
 | 
			
		||||
    IPC::ResponseBuilder rb{ctx, 2, 0, 1};
 | 
			
		||||
    rb.Push(RESULT_SUCCESS);
 | 
			
		||||
    rb.PushIpcInterface<IDeliveryCacheStorageService>(
 | 
			
		||||
        fsc.GetBCATDirectory(Core::CurrentProcess()->GetTitleID()));
 | 
			
		||||
        fsc.GetBCATDirectory(system.CurrentProcess()->GetTitleID()));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Module::Interface::CreateDeliveryCacheStorageServiceWithApplicationId(
 | 
			
		||||
@@ -565,22 +568,23 @@ std::unique_ptr<Backend> CreateBackendFromSettings(DirectoryGetter getter) {
 | 
			
		||||
    return std::make_unique<NullBackend>(std::move(getter));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Module::Interface::Interface(std::shared_ptr<Module> module, FileSystem::FileSystemController& fsc,
 | 
			
		||||
                             const char* name)
 | 
			
		||||
    : ServiceFramework(name), fsc(fsc), module(std::move(module)),
 | 
			
		||||
      backend(CreateBackendFromSettings([&fsc](u64 tid) { return fsc.GetBCATDirectory(tid); })) {}
 | 
			
		||||
Module::Interface::Interface(Core::System& system_, std::shared_ptr<Module> module_,
 | 
			
		||||
                             FileSystem::FileSystemController& fsc_, const char* name)
 | 
			
		||||
    : ServiceFramework(name), fsc{fsc_}, module{std::move(module_)},
 | 
			
		||||
      backend{CreateBackendFromSettings([&fsc_](u64 tid) { return fsc_.GetBCATDirectory(tid); })},
 | 
			
		||||
      system{system_} {}
 | 
			
		||||
 | 
			
		||||
Module::Interface::~Interface() = default;
 | 
			
		||||
 | 
			
		||||
void InstallInterfaces(Core::System& system) {
 | 
			
		||||
    auto module = std::make_shared<Module>();
 | 
			
		||||
    std::make_shared<BCAT>(module, system.GetFileSystemController(), "bcat:a")
 | 
			
		||||
    std::make_shared<BCAT>(system, module, system.GetFileSystemController(), "bcat:a")
 | 
			
		||||
        ->InstallAsService(system.ServiceManager());
 | 
			
		||||
    std::make_shared<BCAT>(module, system.GetFileSystemController(), "bcat:m")
 | 
			
		||||
    std::make_shared<BCAT>(system, module, system.GetFileSystemController(), "bcat:m")
 | 
			
		||||
        ->InstallAsService(system.ServiceManager());
 | 
			
		||||
    std::make_shared<BCAT>(module, system.GetFileSystemController(), "bcat:u")
 | 
			
		||||
    std::make_shared<BCAT>(system, module, system.GetFileSystemController(), "bcat:u")
 | 
			
		||||
        ->InstallAsService(system.ServiceManager());
 | 
			
		||||
    std::make_shared<BCAT>(module, system.GetFileSystemController(), "bcat:s")
 | 
			
		||||
    std::make_shared<BCAT>(system, module, system.GetFileSystemController(), "bcat:s")
 | 
			
		||||
        ->InstallAsService(system.ServiceManager());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -6,6 +6,10 @@
 | 
			
		||||
 | 
			
		||||
#include "core/hle/service/service.h"
 | 
			
		||||
 | 
			
		||||
namespace Core {
 | 
			
		||||
class System;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
namespace Service {
 | 
			
		||||
 | 
			
		||||
namespace FileSystem {
 | 
			
		||||
@@ -20,8 +24,8 @@ class Module final {
 | 
			
		||||
public:
 | 
			
		||||
    class Interface : public ServiceFramework<Interface> {
 | 
			
		||||
    public:
 | 
			
		||||
        explicit Interface(std::shared_ptr<Module> module, FileSystem::FileSystemController& fsc,
 | 
			
		||||
                           const char* name);
 | 
			
		||||
        explicit Interface(Core::System& system_, std::shared_ptr<Module> module_,
 | 
			
		||||
                           FileSystem::FileSystemController& fsc_, const char* name);
 | 
			
		||||
        ~Interface() override;
 | 
			
		||||
 | 
			
		||||
        void CreateBcatService(Kernel::HLERequestContext& ctx);
 | 
			
		||||
@@ -33,6 +37,9 @@ public:
 | 
			
		||||
 | 
			
		||||
        std::shared_ptr<Module> module;
 | 
			
		||||
        std::unique_ptr<Backend> backend;
 | 
			
		||||
 | 
			
		||||
    private:
 | 
			
		||||
        Core::System& system;
 | 
			
		||||
    };
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -66,7 +66,7 @@ enum class FatalType : u32 {
 | 
			
		||||
 | 
			
		||||
static void GenerateErrorReport(Core::System& system, ResultCode error_code,
 | 
			
		||||
                                const FatalInfo& info) {
 | 
			
		||||
    const auto title_id = Core::CurrentProcess()->GetTitleID();
 | 
			
		||||
    const auto title_id = system.CurrentProcess()->GetTitleID();
 | 
			
		||||
    std::string crash_report = fmt::format(
 | 
			
		||||
        "Yuzu {}-{} crash report\n"
 | 
			
		||||
        "Title ID:                        {:016x}\n"
 | 
			
		||||
 
 | 
			
		||||
@@ -241,7 +241,7 @@ ResultVal<FileSys::EntryType> VfsDirectoryServiceWrapper::GetEntryType(
 | 
			
		||||
    return FileSys::ERROR_PATH_NOT_FOUND;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
FileSystemController::FileSystemController() = default;
 | 
			
		||||
FileSystemController::FileSystemController(Core::System& system_) : system{system_} {}
 | 
			
		||||
 | 
			
		||||
FileSystemController::~FileSystemController() = default;
 | 
			
		||||
 | 
			
		||||
@@ -290,7 +290,7 @@ ResultVal<FileSys::VirtualFile> FileSystemController::OpenRomFSCurrentProcess()
 | 
			
		||||
        return ResultCode(-1);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return romfs_factory->OpenCurrentProcess();
 | 
			
		||||
    return romfs_factory->OpenCurrentProcess(system.CurrentProcess()->GetTitleID());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ResultVal<FileSys::VirtualFile> FileSystemController::OpenRomFS(
 | 
			
		||||
@@ -447,10 +447,10 @@ FileSys::SaveDataSize FileSystemController::ReadSaveDataSize(FileSys::SaveDataTy
 | 
			
		||||
        FileSys::SaveDataSize new_size{SUFFICIENT_SAVE_DATA_SIZE, SUFFICIENT_SAVE_DATA_SIZE};
 | 
			
		||||
 | 
			
		||||
        FileSys::NACP nacp;
 | 
			
		||||
        const auto res = Core::System::GetInstance().GetAppLoader().ReadControlData(nacp);
 | 
			
		||||
        const auto res = system.GetAppLoader().ReadControlData(nacp);
 | 
			
		||||
 | 
			
		||||
        if (res != Loader::ResultStatus::Success) {
 | 
			
		||||
            FileSys::PatchManager pm{Core::CurrentProcess()->GetTitleID()};
 | 
			
		||||
            FileSys::PatchManager pm{system.CurrentProcess()->GetTitleID()};
 | 
			
		||||
            auto [nacp_unique, discard] = pm.GetControlMetadata();
 | 
			
		||||
 | 
			
		||||
            if (nacp_unique != nullptr) {
 | 
			
		||||
@@ -702,10 +702,10 @@ void FileSystemController::CreateFactories(FileSys::VfsFilesystem& vfs, bool ove
 | 
			
		||||
    if (bis_factory == nullptr) {
 | 
			
		||||
        bis_factory =
 | 
			
		||||
            std::make_unique<FileSys::BISFactory>(nand_directory, load_directory, dump_directory);
 | 
			
		||||
        Core::System::GetInstance().RegisterContentProvider(
 | 
			
		||||
            FileSys::ContentProviderUnionSlot::SysNAND, bis_factory->GetSystemNANDContents());
 | 
			
		||||
        Core::System::GetInstance().RegisterContentProvider(
 | 
			
		||||
            FileSys::ContentProviderUnionSlot::UserNAND, bis_factory->GetUserNANDContents());
 | 
			
		||||
        system.RegisterContentProvider(FileSys::ContentProviderUnionSlot::SysNAND,
 | 
			
		||||
                                       bis_factory->GetSystemNANDContents());
 | 
			
		||||
        system.RegisterContentProvider(FileSys::ContentProviderUnionSlot::UserNAND,
 | 
			
		||||
                                       bis_factory->GetUserNANDContents());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (save_data_factory == nullptr) {
 | 
			
		||||
@@ -714,8 +714,8 @@ void FileSystemController::CreateFactories(FileSys::VfsFilesystem& vfs, bool ove
 | 
			
		||||
 | 
			
		||||
    if (sdmc_factory == nullptr) {
 | 
			
		||||
        sdmc_factory = std::make_unique<FileSys::SDMCFactory>(std::move(sd_directory));
 | 
			
		||||
        Core::System::GetInstance().RegisterContentProvider(FileSys::ContentProviderUnionSlot::SDMC,
 | 
			
		||||
                                                            sdmc_factory->GetSDMCContents());
 | 
			
		||||
        system.RegisterContentProvider(FileSys::ContentProviderUnionSlot::SDMC,
 | 
			
		||||
                                       sdmc_factory->GetSDMCContents());
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -10,6 +10,10 @@
 | 
			
		||||
#include "core/file_sys/vfs.h"
 | 
			
		||||
#include "core/hle/result.h"
 | 
			
		||||
 | 
			
		||||
namespace Core {
 | 
			
		||||
class System;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
namespace FileSys {
 | 
			
		||||
class BISFactory;
 | 
			
		||||
class RegisteredCache;
 | 
			
		||||
@@ -52,7 +56,7 @@ enum class ImageDirectoryId : u32 {
 | 
			
		||||
 | 
			
		||||
class FileSystemController {
 | 
			
		||||
public:
 | 
			
		||||
    FileSystemController();
 | 
			
		||||
    explicit FileSystemController(Core::System& system_);
 | 
			
		||||
    ~FileSystemController();
 | 
			
		||||
 | 
			
		||||
    ResultCode RegisterRomFS(std::unique_ptr<FileSys::RomFSFactory>&& factory);
 | 
			
		||||
@@ -125,6 +129,8 @@ private:
 | 
			
		||||
    std::unique_ptr<FileSys::XCI> gamecard;
 | 
			
		||||
    std::unique_ptr<FileSys::RegisteredCache> gamecard_registered;
 | 
			
		||||
    std::unique_ptr<FileSys::PlaceholderCache> gamecard_placeholder;
 | 
			
		||||
 | 
			
		||||
    Core::System& system;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
void InstallInterfaces(Core::System& system);
 | 
			
		||||
 
 | 
			
		||||
@@ -163,7 +163,7 @@ public:
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (Core::CurrentProcess()->GetTitleID() != header.title_id) {
 | 
			
		||||
        if (system.CurrentProcess()->GetTitleID() != header.title_id) {
 | 
			
		||||
            LOG_ERROR(Service_LDR,
 | 
			
		||||
                      "Attempting to load NRR with title ID other than current process. (actual "
 | 
			
		||||
                      "{:016X})!",
 | 
			
		||||
@@ -327,7 +327,7 @@ public:
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Load NRO as new executable module
 | 
			
		||||
        auto* process = Core::CurrentProcess();
 | 
			
		||||
        auto* process = system.CurrentProcess();
 | 
			
		||||
        auto& vm_manager = process->VMManager();
 | 
			
		||||
        auto map_address = vm_manager.FindFreeRegion(nro_size + bss_size);
 | 
			
		||||
 | 
			
		||||
@@ -411,7 +411,7 @@ public:
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        auto& vm_manager = Core::CurrentProcess()->VMManager();
 | 
			
		||||
        auto& vm_manager = system.CurrentProcess()->VMManager();
 | 
			
		||||
        const auto& nro_info = iter->second;
 | 
			
		||||
 | 
			
		||||
        // Unmap the mirrored memory
 | 
			
		||||
 
 | 
			
		||||
@@ -324,14 +324,14 @@ void PL_U::GetSharedMemoryAddressOffset(Kernel::HLERequestContext& ctx) {
 | 
			
		||||
void PL_U::GetSharedMemoryNativeHandle(Kernel::HLERequestContext& ctx) {
 | 
			
		||||
    // Map backing memory for the font data
 | 
			
		||||
    LOG_DEBUG(Service_NS, "called");
 | 
			
		||||
    Core::CurrentProcess()->VMManager().MapMemoryBlock(SHARED_FONT_MEM_VADDR, impl->shared_font, 0,
 | 
			
		||||
                                                       SHARED_FONT_MEM_SIZE,
 | 
			
		||||
                                                       Kernel::MemoryState::Shared);
 | 
			
		||||
    system.CurrentProcess()->VMManager().MapMemoryBlock(SHARED_FONT_MEM_VADDR, impl->shared_font, 0,
 | 
			
		||||
                                                        SHARED_FONT_MEM_SIZE,
 | 
			
		||||
                                                        Kernel::MemoryState::Shared);
 | 
			
		||||
 | 
			
		||||
    // Create shared font memory object
 | 
			
		||||
    auto& kernel = system.Kernel();
 | 
			
		||||
    impl->shared_font_mem = Kernel::SharedMemory::Create(
 | 
			
		||||
        kernel, Core::CurrentProcess(), SHARED_FONT_MEM_SIZE, Kernel::MemoryPermission::ReadWrite,
 | 
			
		||||
        kernel, system.CurrentProcess(), SHARED_FONT_MEM_SIZE, Kernel::MemoryPermission::ReadWrite,
 | 
			
		||||
        Kernel::MemoryPermission::Read, SHARED_FONT_MEM_VADDR, Kernel::MemoryRegion::BASE,
 | 
			
		||||
        "PL_U:shared_font_mem");
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user