1 #pragma once
2 #include "Core/ELF/ElfFile.h"
3 #include "Core/FileManager.h"
4 #include "Commands/CAssemblerCommand.h"
5 #include "Mips.h"
6 
7 class MipsElfFile: public AssemblerFile
8 {
9 public:
10 	MipsElfFile();
11 	virtual bool open(bool onlyCheck);
12 	virtual void close();
isOpen()13 	virtual bool isOpen() { return opened; };
14 	virtual bool write(void* data, size_t length);
15 	virtual int64_t getVirtualAddress();
16 	virtual int64_t getPhysicalAddress();
17 	virtual int64_t getHeaderSize();
18 	virtual bool seekVirtual(int64_t virtualAddress);
19 	virtual bool seekPhysical(int64_t physicalAddress);
20 	virtual bool getModuleInfo(SymDataModuleInfo& info);
21 	virtual void beginSymData(SymbolData& symData);
22 	virtual void endSymData(SymbolData& symData);
getFileName()23 	virtual const std::wstring& getFileName() { return fileName; };
24 
25 	bool load(const std::wstring& fileName, const std::wstring& outputFileName);
26 	void save();
27 	bool setSection(const std::wstring& name);
28 private:
29 	ElfFile elf;
30 	std::wstring fileName;
31 	std::wstring outputFileName;
32 	bool opened;
33 	int platform;
34 
35 	int segment;
36 	int section;
37 	size_t sectionOffset;
38 };
39 
40 
41 class DirectiveLoadMipsElf: public CAssemblerCommand
42 {
43 public:
44 	DirectiveLoadMipsElf(const std::wstring& fileName);
45 	DirectiveLoadMipsElf(const std::wstring& inputName, const std::wstring& outputName);
46 	virtual bool Validate();
47 	virtual void Encode() const;
48 	virtual void writeTempData(TempData& tempData) const;
49 	virtual void writeSymData(SymbolData& symData) const;
50 private:
51 	std::shared_ptr<MipsElfFile> file;
52 	std::wstring inputName;
53 	std::wstring outputName;
54 };
55