Changeset 113
- Timestamp:
- 01/15/06 06:09:27 (3 years ago)
- Files:
-
- trunk/ddl/elf/ELFBinary.d (modified) (6 diffs)
- trunk/ddl/elf/ELFHeaders.d (added)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/ddl/elf/ELFBinary.d
r111 r113 42 42 Elf32_Shdr[] sechdrs; 43 43 Elf32_Phdr[] proghdrs; 44 Elf32_Sym[] symbols; 45 46 ExportSymbol [char[]] exports; 47 ExportSymbol [] unresolvedSymbols; 44 Elf32_Sym[] globalSymbols; 45 Elf32_Sym[] localSymbols; 46 Elf32_Sym[] weakSymbols; 47 48 ExportSymbol[char[]] exports; 49 ExportSymbol[] unresolvedSymbols; 48 50 49 51 char[] shnames; … … 77 79 void load(ELFReadCursor cursor){ 78 80 parseObjectFile(cursor); 81 resolveInternals(); 79 82 // TODO: Finish up, resolve and stuff 80 83 } … … 204 207 assert(sechdrs[secnum].sh_entsize > 0); 205 208 cursor.setPosition(sechdrs[secnum].sh_offset); 209 // TODO: Probably NOT put all symbols at the same place 206 210 symbols.length = sechdrs[secnum].sh_size / 207 211 sechdrs[secnum].sh_entsize; … … 211 215 symbols[i] = symbol; 212 216 } 213 214 produceExportSymbols(); 215 }216 217 protected void produceExportSymbols(){217 } 218 219 protected void resolveInternals(){ 220 221 /* All of these aren't exportable symbols, methinks 218 222 foreach(Elf32_Sym symbol; symbols){ 219 223 ExportSymbol es; … … 223 227 exports[es.name] = es; 224 228 } 225 } 226 227 bit isResolved(){ 229 */ 230 } 231 232 public bit isResolved(){ 228 233 return this.unresolvedSymbols.length == 0; 229 234 } … … 241 246 242 247 } 248 249 private ubyte ELF32_ST_BIND(ubyte i){ 250 return i >> 4; 251 } 252 253 private ubyte ELF32_ST_TYPE(ubyte i){ 254 return i & 0xf; 255 } 256 257 private ubyte ELF32_ST_INFO(ubyte b, ubyte t){ 258 return (b << 4) + (t & 0xf); 259 }
