nso: Refactor and allocate .bss section.
This commit is contained in:
parent
fa1c7c7ee1
commit
8c92435ded
9 changed files with 162 additions and 132 deletions
|
@ -4,9 +4,11 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
#include <map>
|
||||
#include <string>
|
||||
#include "common/common_types.h"
|
||||
#include "common/file_util.h"
|
||||
#include "core/hle/kernel/kernel.h"
|
||||
#include "core/loader/loader.h"
|
||||
|
||||
namespace Loader {
|
||||
|
@ -15,7 +17,8 @@ namespace Loader {
|
|||
class AppLoader_NSO final : public AppLoader {
|
||||
public:
|
||||
AppLoader_NSO(FileUtil::IOFile&& file, std::string filename, std::string filepath)
|
||||
: AppLoader(std::move(file)), filename(std::move(filename)), filepath(std::move(filepath)) {}
|
||||
: AppLoader(std::move(file)), filename(std::move(filename)), filepath(std::move(filepath)) {
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the type of the file
|
||||
|
@ -31,6 +34,26 @@ 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() 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