aout_object.cc revision 7676
112326Sar4jc@virginia.edu/* 212326Sar4jc@virginia.edu * Copyright (c) 2003-2005 The Regents of The University of Michigan 312326Sar4jc@virginia.edu * All rights reserved. 412326Sar4jc@virginia.edu * 512326Sar4jc@virginia.edu * Redistribution and use in source and binary forms, with or without 612326Sar4jc@virginia.edu * modification, are permitted provided that the following conditions are 712326Sar4jc@virginia.edu * met: redistributions of source code must retain the above copyright 812326Sar4jc@virginia.edu * notice, this list of conditions and the following disclaimer; 912326Sar4jc@virginia.edu * redistributions in binary form must reproduce the above copyright 1012326Sar4jc@virginia.edu * notice, this list of conditions and the following disclaimer in the 1112326Sar4jc@virginia.edu * documentation and/or other materials provided with the distribution; 1212326Sar4jc@virginia.edu * neither the name of the copyright holders nor the names of its 1312326Sar4jc@virginia.edu * contributors may be used to endorse or promote products derived from 1412326Sar4jc@virginia.edu * this software without specific prior written permission. 1512326Sar4jc@virginia.edu * 1612326Sar4jc@virginia.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1712326Sar4jc@virginia.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 1812326Sar4jc@virginia.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 1912326Sar4jc@virginia.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2012326Sar4jc@virginia.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2112326Sar4jc@virginia.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 2212326Sar4jc@virginia.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2312326Sar4jc@virginia.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2412326Sar4jc@virginia.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2512326Sar4jc@virginia.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 2612326Sar4jc@virginia.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2712326Sar4jc@virginia.edu * 2812326Sar4jc@virginia.edu * Authors: Steve Reinhardt 2912326Sar4jc@virginia.edu */ 3012326Sar4jc@virginia.edu 3112326Sar4jc@virginia.edu#include <string> 3212309Sar4jc@virginia.edu 3312309Sar4jc@virginia.edu#include "base/loader/aout_object.hh" 3412309Sar4jc@virginia.edu#include "base/loader/symtab.hh" 3512309Sar4jc@virginia.edu#include "base/trace.hh" 3612309Sar4jc@virginia.edu#include "base/loader/exec_aout.h" 3712309Sar4jc@virginia.edu 3812309Sar4jc@virginia.eduusing namespace std; 3912309Sar4jc@virginia.edu 4012309Sar4jc@virginia.eduObjectFile * 4112309Sar4jc@virginia.eduAoutObject::tryFile(const string &fname, int fd, size_t len, uint8_t *data) 4212309Sar4jc@virginia.edu{ 4312309Sar4jc@virginia.edu if (!N_BADMAG(*(aout_exechdr *)data)) { 4412309Sar4jc@virginia.edu // right now this is only used for Alpha PAL code 4512309Sar4jc@virginia.edu return new AoutObject(fname, fd, len, data, 4612309Sar4jc@virginia.edu ObjectFile::Alpha, ObjectFile::UnknownOpSys); 4712309Sar4jc@virginia.edu } 4812309Sar4jc@virginia.edu else { 4912309Sar4jc@virginia.edu return NULL; 5012309Sar4jc@virginia.edu } 5112309Sar4jc@virginia.edu} 5212309Sar4jc@virginia.edu 5312309Sar4jc@virginia.edu 5412309Sar4jc@virginia.eduAoutObject::AoutObject(const string &_filename, int _fd, 5512309Sar4jc@virginia.edu size_t _len, uint8_t *_data, 5612309Sar4jc@virginia.edu Arch _arch, OpSys _opSys) 5712309Sar4jc@virginia.edu : ObjectFile(_filename, _fd, _len, _data, _arch, _opSys) 5812309Sar4jc@virginia.edu{ 5912614Sgabeblack@google.com execHdr = (aout_exechdr *)fileData; 6012614Sgabeblack@google.com 6112614Sgabeblack@google.com entry = execHdr->entry; 6212614Sgabeblack@google.com 6312614Sgabeblack@google.com text.baseAddr = N_TXTADDR(*execHdr); 6412614Sgabeblack@google.com text.size = execHdr->tsize; 6512309Sar4jc@virginia.edu text.fileImage = fileData + N_TXTOFF(*execHdr); 6612309Sar4jc@virginia.edu 6712309Sar4jc@virginia.edu data.baseAddr = N_DATADDR(*execHdr); 6812309Sar4jc@virginia.edu data.size = execHdr->dsize; 6912309Sar4jc@virginia.edu data.fileImage = fileData + N_DATOFF(*execHdr); 7012309Sar4jc@virginia.edu 7112309Sar4jc@virginia.edu bss.baseAddr = N_BSSADDR(*execHdr); 7212309Sar4jc@virginia.edu bss.size = execHdr->bsize; 7312309Sar4jc@virginia.edu bss.fileImage = NULL; 7412309Sar4jc@virginia.edu 7512309Sar4jc@virginia.edu DPRINTFR(Loader, "text: 0x%x %d\ndata: 0x%x %d\nbss: 0x%x %d\n", 7612309Sar4jc@virginia.edu text.baseAddr, text.size, data.baseAddr, data.size, 7712309Sar4jc@virginia.edu bss.baseAddr, bss.size); 7812309Sar4jc@virginia.edu} 7912309Sar4jc@virginia.edu 8012309Sar4jc@virginia.edu 8112309Sar4jc@virginia.edubool 8212309Sar4jc@virginia.eduAoutObject::loadGlobalSymbols(SymbolTable *symtab, Addr addrMask) 8312309Sar4jc@virginia.edu{ 8412482Sgabeblack@google.com // a.out symbols not supported yet 8512482Sgabeblack@google.com return false; 8612482Sgabeblack@google.com} 8712482Sgabeblack@google.com 8812482Sgabeblack@google.combool 8912309Sar4jc@virginia.eduAoutObject::loadLocalSymbols(SymbolTable *symtab, Addr addrMask) 9012309Sar4jc@virginia.edu{ 9112482Sgabeblack@google.com // a.out symbols not supported yet 9212309Sar4jc@virginia.edu return false; 9312309Sar4jc@virginia.edu} 9412309Sar4jc@virginia.edu