mirror of
https://github.com/wiiu-env/WiiUPluginLoaderBackend.git
synced 2026-09-07 19:38:07 -05:00
Rename PluginInformation to PluginLinkInformation and make it optional in PluginContainer
This commit is contained in:
@@ -1,18 +1,19 @@
|
||||
#include "PluginContainer.h"
|
||||
#include "utils/storage/StorageUtils.h"
|
||||
|
||||
PluginContainer::PluginContainer(PluginMetaInformation metaInformation, PluginInformation pluginInformation, std::shared_ptr<PluginData> pluginData)
|
||||
PluginContainer::PluginContainer(PluginMetaInformation metaInformation, std::optional<PluginLinkInformation> pluginLinkInformation, std::shared_ptr<PluginData> pluginData)
|
||||
: mMetaInformation(std::move(metaInformation)),
|
||||
mPluginInformation(std::move(pluginInformation)),
|
||||
mPluginLinkInformation(std::move(pluginLinkInformation)),
|
||||
mPluginData(std::move(pluginData)) {
|
||||
}
|
||||
|
||||
PluginContainer::PluginContainer(PluginContainer &&src) noexcept : mMetaInformation(std::move(src.mMetaInformation)),
|
||||
mPluginInformation(std::move(src.mPluginInformation)),
|
||||
mPluginData(std::move(src.mPluginData)),
|
||||
mPluginConfigData(std::move(src.mPluginConfigData)),
|
||||
mStorageRootItem(src.mStorageRootItem),
|
||||
mInitDone(src.mInitDone)
|
||||
|
||||
PluginContainer::PluginContainer(PluginContainer &&src) : mMetaInformation(std::move(src.mMetaInformation)),
|
||||
mPluginLinkInformation(std::move(src.mPluginLinkInformation)),
|
||||
mPluginData(std::move(src.mPluginData)),
|
||||
mPluginConfigData(std::move(src.mPluginConfigData)),
|
||||
mStorageRootItem(src.mStorageRootItem),
|
||||
mInitDone(src.mInitDone)
|
||||
|
||||
{
|
||||
src.mStorageRootItem = {};
|
||||
@@ -21,12 +22,12 @@ PluginContainer::PluginContainer(PluginContainer &&src) noexcept : mMetaInformat
|
||||
|
||||
PluginContainer &PluginContainer::operator=(PluginContainer &&src) noexcept {
|
||||
if (this != &src) {
|
||||
this->mMetaInformation = std::move(src.mMetaInformation);
|
||||
this->mPluginInformation = std::move(src.mPluginInformation);
|
||||
this->mPluginData = std::move(src.mPluginData);
|
||||
this->mPluginConfigData = std::move(src.mPluginConfigData);
|
||||
this->mStorageRootItem = src.mStorageRootItem;
|
||||
this->mInitDone = src.mInitDone;
|
||||
this->mMetaInformation = std::move(src.mMetaInformation);
|
||||
this->mPluginLinkInformation = std::move(src.mPluginLinkInformation);
|
||||
this->mPluginData = std::move(src.mPluginData);
|
||||
this->mPluginConfigData = std::move(src.mPluginConfigData);
|
||||
this->mStorageRootItem = src.mStorageRootItem;
|
||||
this->mInitDone = src.mInitDone;
|
||||
|
||||
src.mStorageRootItem = nullptr;
|
||||
src.mInitDone = false;
|
||||
@@ -38,12 +39,22 @@ const PluginMetaInformation &PluginContainer::getMetaInformation() const {
|
||||
return this->mMetaInformation;
|
||||
}
|
||||
|
||||
const PluginInformation &PluginContainer::getPluginInformation() const {
|
||||
return this->mPluginInformation;
|
||||
bool PluginContainer::isPluginLinkedAndLoaded() const {
|
||||
return this->mPluginLinkInformation.has_value();
|
||||
}
|
||||
|
||||
PluginInformation &PluginContainer::getPluginInformation() {
|
||||
return this->mPluginInformation;
|
||||
const PluginLinkInformation *PluginContainer::getPluginLinkInformation() const {
|
||||
if (this->mPluginLinkInformation.has_value()) {
|
||||
return this->mPluginLinkInformation.operator->();
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
PluginLinkInformation *PluginContainer::getPluginLinkInformation() {
|
||||
if (this->mPluginLinkInformation.has_value()) {
|
||||
return this->mPluginLinkInformation.operator->();
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
std::shared_ptr<PluginData> PluginContainer::getPluginDataCopy() const {
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
|
||||
#include "PluginConfigData.h"
|
||||
#include "PluginData.h"
|
||||
#include "PluginInformation.h"
|
||||
#include "PluginLinkInformation.h"
|
||||
#include "PluginMetaInformation.h"
|
||||
|
||||
#include <memory>
|
||||
@@ -28,21 +28,24 @@
|
||||
|
||||
class PluginContainer {
|
||||
public:
|
||||
PluginContainer(PluginMetaInformation metaInformation, PluginInformation pluginInformation, std::shared_ptr<PluginData> pluginData);
|
||||
PluginContainer(PluginMetaInformation metaInformation, std::optional<PluginLinkInformation> pluginLinkInformation, std::shared_ptr<PluginData> pluginData);
|
||||
|
||||
PluginContainer(const PluginContainer &) = delete;
|
||||
|
||||
PluginContainer(PluginContainer &&src) noexcept;
|
||||
PluginContainer(PluginContainer &&src);
|
||||
|
||||
PluginContainer &operator=(PluginContainer &&src) noexcept;
|
||||
PluginContainer &operator=(PluginContainer &&src);
|
||||
|
||||
[[nodiscard]] const PluginMetaInformation &getMetaInformation() const;
|
||||
|
||||
[[nodiscard]] const PluginInformation &getPluginInformation() const;
|
||||
[[nodiscard]] PluginInformation &getPluginInformation();
|
||||
[[nodiscard]] const PluginLinkInformation *getPluginLinkInformation() const;
|
||||
|
||||
[[nodiscard]] PluginLinkInformation *getPluginLinkInformation();
|
||||
|
||||
[[nodiscard]] std::shared_ptr<PluginData> getPluginDataCopy() const;
|
||||
|
||||
[[nodiscard]] bool isPluginLinkedAndLoaded() const;
|
||||
|
||||
[[nodiscard]] uint32_t getHandle() const;
|
||||
|
||||
[[nodiscard]] const std::optional<PluginConfigData> &getConfigData() const;
|
||||
@@ -61,10 +64,10 @@ public:
|
||||
|
||||
private:
|
||||
PluginMetaInformation mMetaInformation;
|
||||
PluginInformation mPluginInformation;
|
||||
std::optional<PluginLinkInformation> mPluginLinkInformation;
|
||||
std::shared_ptr<PluginData> mPluginData;
|
||||
|
||||
std::optional<PluginConfigData> mPluginConfigData;
|
||||
wups_storage_root_item mStorageRootItem = nullptr;
|
||||
bool mInitDone = false;
|
||||
std::optional<PluginConfigData> mPluginConfigData = std::nullopt;
|
||||
wups_storage_root_item mStorageRootItem = nullptr;
|
||||
bool mInitDone = false;
|
||||
};
|
||||
|
||||
@@ -1,19 +1,19 @@
|
||||
#include "PluginInformation.h"
|
||||
#include "PluginLinkInformation.h"
|
||||
|
||||
PluginInformation::PluginInformation(PluginInformation &&src) : mHookDataList(std::move(src.mHookDataList)),
|
||||
mFunctionDataList(std::move(src.mFunctionDataList)),
|
||||
mRelocationDataList(std::move(src.mRelocationDataList)),
|
||||
mSymbolDataList(std::move(src.mSymbolDataList)),
|
||||
mSectionInfoList(std::move(src.mSectionInfoList)),
|
||||
mTrampolineId(src.mTrampolineId),
|
||||
mAllocatedTextMemoryAddress(std::move(src.mAllocatedTextMemoryAddress)),
|
||||
mAllocatedDataMemoryAddress(std::move(src.mAllocatedDataMemoryAddress))
|
||||
PluginLinkInformation::PluginLinkInformation(PluginLinkInformation &&src) : mHookDataList(std::move(src.mHookDataList)),
|
||||
mFunctionDataList(std::move(src.mFunctionDataList)),
|
||||
mRelocationDataList(std::move(src.mRelocationDataList)),
|
||||
mSymbolDataList(std::move(src.mSymbolDataList)),
|
||||
mSectionInfoList(std::move(src.mSectionInfoList)),
|
||||
mTrampolineId(src.mTrampolineId),
|
||||
mAllocatedTextMemoryAddress(std::move(src.mAllocatedTextMemoryAddress)),
|
||||
mAllocatedDataMemoryAddress(std::move(src.mAllocatedDataMemoryAddress))
|
||||
|
||||
{
|
||||
src.mTrampolineId = {};
|
||||
}
|
||||
|
||||
PluginInformation &PluginInformation::operator=(PluginInformation &&src) {
|
||||
PluginLinkInformation &PluginLinkInformation::operator=(PluginLinkInformation &&src) {
|
||||
if (this != &src) {
|
||||
this->mHookDataList = std::move(src.mHookDataList);
|
||||
this->mFunctionDataList = std::move(src.mFunctionDataList);
|
||||
@@ -28,62 +28,63 @@ PluginInformation &PluginInformation::operator=(PluginInformation &&src) {
|
||||
return *this;
|
||||
}
|
||||
|
||||
void PluginInformation::addHookData(const HookData &hook_data) {
|
||||
void PluginLinkInformation::addHookData(const HookData &hook_data) {
|
||||
mHookDataList.push_back(hook_data);
|
||||
}
|
||||
|
||||
const std::vector<HookData> &PluginInformation::getHookDataList() const {
|
||||
const std::vector<HookData> &PluginLinkInformation::getHookDataList() const {
|
||||
return mHookDataList;
|
||||
}
|
||||
|
||||
void PluginInformation::addFunctionData(FunctionData function_data) {
|
||||
void PluginLinkInformation::addFunctionData(FunctionData function_data) {
|
||||
mFunctionDataList.push_back(std::move(function_data));
|
||||
}
|
||||
|
||||
const std::vector<FunctionData> &PluginInformation::getFunctionDataList() const {
|
||||
const std::vector<FunctionData> &PluginLinkInformation::getFunctionDataList() const {
|
||||
return mFunctionDataList;
|
||||
}
|
||||
|
||||
std::vector<FunctionData> &PluginInformation::getFunctionDataList() {
|
||||
std::vector<FunctionData> &PluginLinkInformation::getFunctionDataList() {
|
||||
return mFunctionDataList;
|
||||
}
|
||||
|
||||
void PluginInformation::addRelocationData(RelocationData relocation_data) {
|
||||
void PluginLinkInformation::addRelocationData(RelocationData relocation_data) {
|
||||
mRelocationDataList.push_back(std::move(relocation_data));
|
||||
}
|
||||
|
||||
const std::vector<RelocationData> &PluginInformation::getRelocationDataList() const {
|
||||
const std::vector<RelocationData> &PluginLinkInformation::getRelocationDataList() const {
|
||||
return mRelocationDataList;
|
||||
}
|
||||
|
||||
void PluginInformation::addFunctionSymbolData(const FunctionSymbolData &symbol_data) {
|
||||
void PluginLinkInformation::addFunctionSymbolData(const FunctionSymbolData &symbol_data) {
|
||||
mSymbolDataList.insert(symbol_data);
|
||||
}
|
||||
|
||||
void PluginInformation::addSectionInfo(const SectionInfo §ionInfo) {
|
||||
void PluginLinkInformation::addSectionInfo(const SectionInfo §ionInfo) {
|
||||
mSectionInfoList.insert(std::pair(sectionInfo.getName(), sectionInfo));
|
||||
}
|
||||
|
||||
const std::map<std::string, SectionInfo> &PluginInformation::getSectionInfoList() const {
|
||||
const std::map<std::string, SectionInfo> &PluginLinkInformation::getSectionInfoList() const {
|
||||
return mSectionInfoList;
|
||||
}
|
||||
|
||||
std::optional<SectionInfo> PluginInformation::getSectionInfo(const std::string §ionName) const {
|
||||
std::optional<SectionInfo> PluginLinkInformation::getSectionInfo(const std::string §ionName) const {
|
||||
if (getSectionInfoList().contains(sectionName)) {
|
||||
return mSectionInfoList.at(sectionName);
|
||||
}
|
||||
return std::nullopt;
|
||||
}
|
||||
|
||||
void PluginInformation::setTrampolineId(const uint8_t trampolineId) {
|
||||
|
||||
void PluginLinkInformation::setTrampolineId(const uint8_t trampolineId) {
|
||||
this->mTrampolineId = trampolineId;
|
||||
}
|
||||
|
||||
uint8_t PluginInformation::getTrampolineId() const {
|
||||
uint8_t PluginLinkInformation::getTrampolineId() const {
|
||||
return mTrampolineId;
|
||||
}
|
||||
|
||||
const FunctionSymbolData *PluginInformation::getNearestFunctionSymbolData(const uint32_t address) const {
|
||||
const FunctionSymbolData *PluginLinkInformation::getNearestFunctionSymbolData(uint32_t address) const {
|
||||
const FunctionSymbolData *result = nullptr;
|
||||
|
||||
bool foundHit = false;
|
||||
@@ -103,10 +104,10 @@ const FunctionSymbolData *PluginInformation::getNearestFunctionSymbolData(const
|
||||
return result;
|
||||
}
|
||||
|
||||
const HeapMemoryFixedSize &PluginInformation::getTextMemory() const {
|
||||
const HeapMemoryFixedSize &PluginLinkInformation::getTextMemory() const {
|
||||
return mAllocatedTextMemoryAddress;
|
||||
}
|
||||
|
||||
const HeapMemoryFixedSize &PluginInformation::getDataMemory() const {
|
||||
const HeapMemoryFixedSize &PluginLinkInformation::getDataMemory() const {
|
||||
return mAllocatedDataMemoryAddress;
|
||||
}
|
||||
@@ -37,13 +37,13 @@ struct FunctionSymbolDataComparator {
|
||||
}
|
||||
};
|
||||
|
||||
class PluginInformation {
|
||||
class PluginLinkInformation {
|
||||
public:
|
||||
PluginInformation(const PluginInformation &) = delete;
|
||||
PluginLinkInformation(const PluginLinkInformation &) = delete;
|
||||
|
||||
PluginInformation(PluginInformation &&src);
|
||||
PluginLinkInformation(PluginLinkInformation &&src) noexcept;
|
||||
|
||||
PluginInformation &operator=(PluginInformation &&src);
|
||||
PluginLinkInformation &operator=(PluginLinkInformation &&src);
|
||||
|
||||
[[nodiscard]] const std::vector<HookData> &getHookDataList() const;
|
||||
|
||||
@@ -66,7 +66,7 @@ public:
|
||||
[[nodiscard]] const HeapMemoryFixedSize &getDataMemory() const;
|
||||
|
||||
private:
|
||||
PluginInformation() = default;
|
||||
PluginLinkInformation() = default;
|
||||
|
||||
void addHookData(const HookData &hook_data);
|
||||
|
||||
@@ -91,5 +91,5 @@ private:
|
||||
HeapMemoryFixedSize mAllocatedTextMemoryAddress;
|
||||
HeapMemoryFixedSize mAllocatedDataMemoryAddress;
|
||||
|
||||
friend class PluginInformationFactory;
|
||||
friend class PluginLinkInformationFactory;
|
||||
};
|
||||
@@ -15,7 +15,7 @@
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
****************************************************************************/
|
||||
|
||||
#include "PluginInformationFactory.h"
|
||||
#include "PluginLinkInformationFactory.h"
|
||||
#include "utils/ElfUtils.h"
|
||||
#include "utils/logger.h"
|
||||
#include "utils/utils.h"
|
||||
@@ -26,8 +26,8 @@
|
||||
|
||||
using namespace ELFIO;
|
||||
|
||||
std::optional<PluginInformation>
|
||||
PluginInformationFactory::load(const PluginData &pluginData, std::vector<relocation_trampoline_entry_t> &trampolineData, uint8_t trampolineId) {
|
||||
std::optional<PluginLinkInformation>
|
||||
PluginLinkInformationFactory::load(const PluginData &pluginData, std::vector<relocation_trampoline_entry_t> &trampolineData, uint8_t trampolineId) {
|
||||
auto buffer = pluginData.getBuffer();
|
||||
if (buffer.empty()) {
|
||||
DEBUG_FUNCTION_LINE_ERR("Buffer was empty");
|
||||
@@ -40,7 +40,7 @@ PluginInformationFactory::load(const PluginData &pluginData, std::vector<relocat
|
||||
return std::nullopt;
|
||||
}
|
||||
|
||||
PluginInformation pluginInfo;
|
||||
PluginLinkInformation pluginInfo;
|
||||
|
||||
uint32_t sec_num = reader.sections.size();
|
||||
|
||||
@@ -168,7 +168,7 @@ PluginInformationFactory::load(const PluginData &pluginData, std::vector<relocat
|
||||
}
|
||||
}
|
||||
|
||||
if (!PluginInformationFactory::addImportRelocationData(pluginInfo, reader, destinations)) {
|
||||
if (!PluginLinkInformationFactory::addImportRelocationData(pluginInfo, reader, destinations)) {
|
||||
DEBUG_FUNCTION_LINE_ERR("addImportRelocationData failed");
|
||||
return std::nullopt;
|
||||
}
|
||||
@@ -264,7 +264,7 @@ PluginInformationFactory::load(const PluginData &pluginData, std::vector<relocat
|
||||
return pluginInfo;
|
||||
}
|
||||
|
||||
bool PluginInformationFactory::addImportRelocationData(PluginInformation &pluginInfo, const elfio &reader, const std::span<uint8_t *> destinations) {
|
||||
bool PluginLinkInformationFactory::addImportRelocationData(PluginLinkInformation &pluginInfo, const elfio &reader, const std::span<uint8_t *> destinations) {
|
||||
std::map<uint32_t, std::shared_ptr<ImportRPLInformation>> infoMap;
|
||||
|
||||
uint32_t sec_num = reader.sections.size();
|
||||
@@ -335,8 +335,8 @@ bool PluginInformationFactory::addImportRelocationData(PluginInformation &plugin
|
||||
return true;
|
||||
}
|
||||
|
||||
bool PluginInformationFactory::linkSection(const elfio &reader, uint32_t section_index, uint32_t destination, uint32_t base_text, uint32_t base_data,
|
||||
std::vector<relocation_trampoline_entry_t> &trampolineData, uint8_t trampolineId) {
|
||||
bool PluginLinkInformationFactory::linkSection(const elfio &reader, uint32_t section_index, uint32_t destination, uint32_t base_text, uint32_t base_data,
|
||||
std::vector<relocation_trampoline_entry_t> &trampolineData, uint8_t trampolineId) {
|
||||
uint32_t sec_num = reader.sections.size();
|
||||
|
||||
for (uint32_t i = 0; i < sec_num; ++i) {
|
||||
@@ -17,21 +17,22 @@
|
||||
|
||||
#pragma once
|
||||
#include "PluginData.h"
|
||||
#include "PluginInformation.h"
|
||||
#include "PluginLinkInformation.h"
|
||||
|
||||
#include <elfio/elfio.hpp>
|
||||
#include <optional>
|
||||
#include <wums/defines/relocation_defines.h>
|
||||
|
||||
class PluginInformationFactory {
|
||||
class PluginLinkInformationFactory {
|
||||
public:
|
||||
static std::optional<PluginInformation>
|
||||
static std::optional<PluginLinkInformation>
|
||||
load(const PluginData &pluginData, std::vector<relocation_trampoline_entry_t> &trampolineData, uint8_t trampolineId);
|
||||
|
||||
private:
|
||||
static bool
|
||||
linkSection(const ELFIO::elfio &reader, uint32_t section_index, uint32_t destination, uint32_t base_text, uint32_t base_data,
|
||||
std::vector<relocation_trampoline_entry_t> &trampolineData, uint8_t trampolineId);
|
||||
|
||||
static bool
|
||||
addImportRelocationData(PluginInformation &pluginInfo, const ELFIO::elfio &reader, std::span<uint8_t *> destinations);
|
||||
addImportRelocationData(PluginLinkInformation &pluginInfo, const ELFIO::elfio &reader, std::span<uint8_t *> destinations);
|
||||
};
|
||||
Reference in New Issue
Block a user