nso: Refactor and allocate .bss section.

This commit is contained in:
bunnei 2017-09-30 14:15:09 -04:00
parent fa1c7c7ee1
commit 8c92435ded
9 changed files with 162 additions and 132 deletions

View file

@ -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;
};