#ifndef __MIPSOBJ_H__ #define __MIPSOBJ_H__ #include #include #include enum mips_reloc_t { R_MIPS_26, R_MIPS_32, R_MIPS_HI16, R_MIPS_LO16, }; enum symbol_type_t { LOCAL, GLOBAL, EXTERN, }; enum section_type_t { TEXT, DATA, BSS, }; struct reloc_t { String symbol; int type; Uint32 offset; }; struct symbol_t { String name; String section; int type; Uint32 offset; }; class section : public Base { public: section(const String &, int); section(); virtual ~section(); void setname(const String &); void settype(int); void putdatas(const Uint8 *, int); int gettype(); int getsize(); const Uint8 * getdatas(); void putreloc(const String &, int, Uint32); void putreloc(const struct reloc_t &); std::vector relocs; private: String name; int type; Uint8 * datas; int length; }; class mipsobj : public Base { public: mipsobj(); virtual ~mipsobj(); std::map sections; std::map symbols; void loadELF(Handle *) throw (GeneralException); void loadOBJ(Handle *) throw (GeneralException); void loadLIB(Handle *, const String &) throw (GeneralException); private: bool loaded; }; #endif