Changeset 113

Show
Ignore:
Timestamp:
01/15/06 06:09:27 (3 years ago)
Author:
larsivi
Message:

Forgot to add this earlier. Just a file of definitions used when handling ELF files.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/ddl/elf/ELFBinary.d

    r111 r113  
    4242    Elf32_Shdr[] sechdrs; 
    4343    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; 
    4850 
    4951    char[] shnames; 
     
    7779    void load(ELFReadCursor cursor){ 
    7880        parseObjectFile(cursor); 
     81        resolveInternals(); 
    7982        // TODO: Finish up, resolve and stuff 
    8083    } 
     
    204207        assert(sechdrs[secnum].sh_entsize > 0); 
    205208        cursor.setPosition(sechdrs[secnum].sh_offset); 
     209        // TODO: Probably NOT put all symbols at the same place 
    206210        symbols.length = sechdrs[secnum].sh_size /  
    207211                                  sechdrs[secnum].sh_entsize; 
     
    211215            symbols[i] = symbol; 
    212216        } 
    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 
    218222        foreach(Elf32_Sym symbol; symbols){ 
    219223            ExportSymbol es; 
     
    223227            exports[es.name] = es; 
    224228        } 
    225     } 
    226  
    227     bit isResolved(){ 
     229        */ 
     230    } 
     231 
     232    public bit isResolved(){ 
    228233        return this.unresolvedSymbols.length == 0; 
    229234    } 
     
    241246 
    242247} 
     248 
     249private ubyte ELF32_ST_BIND(ubyte i){ 
     250    return i >> 4; 
     251} 
     252 
     253private ubyte ELF32_ST_TYPE(ubyte i){ 
     254    return i & 0xf; 
     255} 
     256 
     257private ubyte ELF32_ST_INFO(ubyte b, ubyte t){ 
     258    return (b << 4) + (t & 0xf); 
     259}