Mercurial > vba-clojure
view src/gba/elf.h @ 135:eb6ba88088d3
Wrote a more efficient input-number-assembly program; 91 oc -> 60 oc.
author | Dylan Holmes <ocsenave@gmail.com> |
---|---|
date | Sun, 18 Mar 2012 05:13:19 -0500 |
parents | f9f4f1b99eed |
children |
line wrap: on
line source
1 #ifndef VBA_ELF_H2 #define VBA_ELF_H4 #if _MSC_VER > 10005 #pragma once6 #endif // _MSC_VER > 10008 enum LocationType9 {10 LOCATION_register,11 LOCATION_memory,12 LOCATION_value13 };15 #define DW_ATE_boolean 0x0216 #define DW_ATE_signed 0x0517 #define DW_ATE_unsigned 0x0718 #define DW_ATE_unsigned_char 0x0820 struct ELFHeader21 {22 u32 magic;23 u8 clazz;24 u8 data;25 u8 version;26 u8 pad[9];27 u16 e_type;28 u16 e_machine;29 u32 e_version;30 u32 e_entry;31 u32 e_phoff;32 u32 e_shoff;33 u32 e_flags;34 u16 e_ehsize;35 u16 e_phentsize;36 u16 e_phnum;37 u16 e_shentsize;38 u16 e_shnum;39 u16 e_shstrndx;40 };42 struct ELFProgramHeader43 {44 u32 type;45 u32 offset;46 u32 vaddr;47 u32 paddr;48 u32 filesz;49 u32 memsz;50 u32 flags;51 u32 align;52 };54 struct ELFSectionHeader55 {56 u32 name;57 u32 type;58 u32 flags;59 u32 addr;60 u32 offset;61 u32 size;62 u32 link;63 u32 info;64 u32 addralign;65 u32 entsize;66 };68 struct ELFSymbol69 {70 u32 name;71 u32 value;72 u32 size;73 u8 info;74 u8 other;75 u16 shndx;76 };78 struct ELFBlock79 {80 int length;81 u8 *data;82 };84 struct ELFAttr85 {86 u32 name;87 u32 form;88 union89 {90 u32 value;91 char * string;92 u8 * data;93 bool flag;94 ELFBlock *block;95 };96 };98 struct ELFAbbrev99 {100 u32 number;101 u32 tag;102 bool hasChildren;103 int numAttrs;104 ELFAttr * attrs;105 ELFAbbrev *next;106 };108 enum TypeEnum109 {110 TYPE_base,111 TYPE_pointer,112 TYPE_function,113 TYPE_void,114 TYPE_array,115 TYPE_struct,116 TYPE_reference,117 TYPE_enum,118 TYPE_union119 };121 struct Type;122 struct Object;124 struct FunctionType125 {126 Type * returnType;127 Object *args;128 };130 struct Member131 {132 char * name;133 Type * type;134 int bitSize;135 int bitOffset;136 int byteSize;137 ELFBlock *location;138 };140 struct Struct141 {142 int memberCount;143 Member *members;144 };146 struct Array147 {148 Type *type;149 int maxBounds;150 int * bounds;151 };153 struct EnumMember154 {155 char *name;156 u32 value;157 };159 struct Enum160 {161 int count;162 EnumMember *members;163 };165 struct Type166 {167 u32 offset;168 TypeEnum type;169 char * name;170 int encoding;171 int size;172 int bitSize;173 union174 {175 Type * pointer;176 FunctionType *function;177 Array * array;178 Struct * structure;179 Enum * enumeration;180 };181 Type *next;182 };184 struct Object185 {186 char * name;187 int file;188 int line;189 bool external;190 Type * type;191 ELFBlock *location;192 u32 startScope;193 u32 endScope;194 Object * next;195 };197 struct Function198 {199 char * name;200 u32 lowPC;201 u32 highPC;202 int file;203 int line;204 bool external;205 Type * returnType;206 Object * parameters;207 Object * variables;208 ELFBlock *frameBase;209 Function *next;210 };212 struct LineInfoItem213 {214 u32 address;215 char *file;216 int line;217 };219 struct LineInfo220 {221 int fileCount;222 char ** files;223 int number;224 LineInfoItem *lines;225 };227 struct ARange228 {229 u32 lowPC;230 u32 highPC;231 };233 struct ARanges234 {235 u32 offset;236 int count;237 ARange *ranges;238 };240 struct CompileUnit241 {242 u32 length;243 u8 * top;244 u32 offset;245 ELFAbbrev ** abbrevs;246 ARanges * ranges;247 char * name;248 char * compdir;249 u32 lowPC;250 u32 highPC;251 bool hasLineInfo;252 u32 lineInfo;253 LineInfo * lineInfoTable;254 Function * functions;255 Function * lastFunction;256 Object * variables;257 Type * types;258 CompileUnit *next;259 };261 struct DebugInfo262 {263 u8 * debugfile;264 u8 * abbrevdata;265 u8 * debugdata;266 u8 * infodata;267 int numRanges;268 ARanges *ranges;269 };271 struct Symbol272 {273 char *name;274 int type;275 int binding;276 u32 address;277 u32 value;278 u32 size;279 };281 extern u32 elfReadLEB128(u8 *, int *);282 extern s32 elfReadSignedLEB128(u8 *, int *);283 extern bool elfRead(const char *, int &, FILE *f);284 extern bool elfGetSymbolAddress(char *, u32 *, u32 *, int *);285 extern char *elfGetAddressSymbol(u32);286 extern char *elfGetSymbol(int, u32 *, u32 *, int *);287 extern void elfCleanUp();288 extern bool elfGetCurrentFunction(u32, Function **, CompileUnit **c);289 extern bool elfGetObject(char *, Function *, CompileUnit *, Object * *);290 extern bool elfFindLineInUnit(u32 *, CompileUnit *, int);291 extern bool elfFindLineInModule(u32 *, char *, int);292 u32 elfDecodeLocation(Function *, ELFBlock *, LocationType *);293 u32 elfDecodeLocation(Function *, ELFBlock *, LocationType *, u32);294 int elfFindLine(CompileUnit *unit, Function *func, u32 addr, char * *);296 #endif // VBA_ELF_H