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