loader: Add support for NRO, as well as various fixes and shared linker.
This commit is contained in:
parent
d454364bca
commit
33ea53094c
9 changed files with 434 additions and 146 deletions
|
@ -9,12 +9,13 @@
|
|||
#include "common/common_types.h"
|
||||
#include "common/file_util.h"
|
||||
#include "core/hle/kernel/kernel.h"
|
||||
#include "core/loader/linker.h"
|
||||
#include "core/loader/loader.h"
|
||||
|
||||
namespace Loader {
|
||||
|
||||
/// Loads an NSO file
|
||||
class AppLoader_NSO final : public AppLoader {
|
||||
class AppLoader_NSO final : public AppLoader, Linker {
|
||||
public:
|
||||
AppLoader_NSO(FileUtil::IOFile&& file, std::string filename, std::string filepath)
|
||||
: AppLoader(std::move(file)), filename(std::move(filename)), filepath(std::move(filepath)) {
|
||||
|
@ -34,25 +35,8 @@ public:
|
|||
ResultStatus Load() override;
|
||||
|
||||
private:
|
||||
struct Symbol {
|
||||
Symbol(std::string&& name, u64 value) : name(std::move(name)), value(value) {}
|
||||
std::string name;
|
||||
u64 value;
|
||||
};
|
||||
|
||||
struct Import {
|
||||
VAddr ea;
|
||||
s64 addend;
|
||||
};
|
||||
|
||||
void WriteRelocations(const std::vector<Symbol>& symbols, VAddr load_base,
|
||||
u64 relocation_offset, u64 size, bool is_jump_relocation);
|
||||
VAddr GetEntryPoint(VAddr load_base) const;
|
||||
bool LoadNso(const std::string& path, VAddr load_base);
|
||||
void Relocate(VAddr load_base, VAddr dynamic_section_addr);
|
||||
|
||||
std::map<std::string, Import> imports;
|
||||
std::map<std::string, VAddr> exports;
|
||||
|
||||
std::string filename;
|
||||
std::string filepath;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue