process.hh revision 11320
17322Sgblack@eecs.umich.edu/* 27322Sgblack@eecs.umich.edu * Copyright (c) 2007 The Hewlett-Packard Development Company 37322Sgblack@eecs.umich.edu * All rights reserved. 47322Sgblack@eecs.umich.edu * 57322Sgblack@eecs.umich.edu * The license below extends only to copyright in the software and shall 67322Sgblack@eecs.umich.edu * not be construed as granting a license to any other intellectual 77322Sgblack@eecs.umich.edu * property including but not limited to intellectual property relating 87322Sgblack@eecs.umich.edu * to a hardware implementation of the functionality of the software 97322Sgblack@eecs.umich.edu * licensed hereunder. You may use the software subject to the license 107322Sgblack@eecs.umich.edu * terms below provided that you ensure that this notice is replicated 117322Sgblack@eecs.umich.edu * unmodified and in its entirety in all distributions of the software, 127322Sgblack@eecs.umich.edu * modified or unmodified, in source code or in binary form. 137322Sgblack@eecs.umich.edu * 147322Sgblack@eecs.umich.edu * Redistribution and use in source and binary forms, with or without 157322Sgblack@eecs.umich.edu * modification, are permitted provided that the following conditions are 167322Sgblack@eecs.umich.edu * met: redistributions of source code must retain the above copyright 177322Sgblack@eecs.umich.edu * notice, this list of conditions and the following disclaimer; 187322Sgblack@eecs.umich.edu * redistributions in binary form must reproduce the above copyright 197322Sgblack@eecs.umich.edu * notice, this list of conditions and the following disclaimer in the 207322Sgblack@eecs.umich.edu * documentation and/or other materials provided with the distribution; 217322Sgblack@eecs.umich.edu * neither the name of the copyright holders nor the names of its 227322Sgblack@eecs.umich.edu * contributors may be used to endorse or promote products derived from 237322Sgblack@eecs.umich.edu * this software without specific prior written permission. 247322Sgblack@eecs.umich.edu * 257322Sgblack@eecs.umich.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 267322Sgblack@eecs.umich.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 277322Sgblack@eecs.umich.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 287322Sgblack@eecs.umich.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 297322Sgblack@eecs.umich.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 307322Sgblack@eecs.umich.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 317322Sgblack@eecs.umich.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 327322Sgblack@eecs.umich.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 337322Sgblack@eecs.umich.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 347322Sgblack@eecs.umich.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 357322Sgblack@eecs.umich.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 367322Sgblack@eecs.umich.edu * 377322Sgblack@eecs.umich.edu * Authors: Gabe Black 387322Sgblack@eecs.umich.edu */ 397322Sgblack@eecs.umich.edu 407322Sgblack@eecs.umich.edu#ifndef __ARCH_X86_PROCESS_HH__ 417322Sgblack@eecs.umich.edu#define __ARCH_X86_PROCESS_HH__ 427322Sgblack@eecs.umich.edu 437322Sgblack@eecs.umich.edu#include <string> 447322Sgblack@eecs.umich.edu#include <vector> 457322Sgblack@eecs.umich.edu 467322Sgblack@eecs.umich.edu#include "sim/process.hh" 477322Sgblack@eecs.umich.edu#include "mem/multi_level_page_table.hh" 487322Sgblack@eecs.umich.edu 497322Sgblack@eecs.umich.educlass SyscallDesc; 507322Sgblack@eecs.umich.edu 517322Sgblack@eecs.umich.edunamespace X86ISA 527324Sgblack@eecs.umich.edu{ 537324Sgblack@eecs.umich.edu enum X86AuxiliaryVectorTypes { 547324Sgblack@eecs.umich.edu M5_AT_SYSINFO = 32, 557324Sgblack@eecs.umich.edu M5_AT_SYSINFO_EHDR = 33 567324Sgblack@eecs.umich.edu }; 577324Sgblack@eecs.umich.edu 587324Sgblack@eecs.umich.edu class X86LiveProcess : public LiveProcess 597333Sgblack@eecs.umich.edu { 607333Sgblack@eecs.umich.edu protected: 617333Sgblack@eecs.umich.edu Addr _gdtStart; 627333Sgblack@eecs.umich.edu Addr _gdtSize; 637333Sgblack@eecs.umich.edu 647333Sgblack@eecs.umich.edu SyscallDesc *syscallDescs; 657333Sgblack@eecs.umich.edu const int numSyscallDescs; 667333Sgblack@eecs.umich.edu 677333Sgblack@eecs.umich.edu X86LiveProcess(LiveProcessParams * params, ObjectFile *objFile, 687333Sgblack@eecs.umich.edu SyscallDesc *_syscallDescs, int _numSyscallDescs); 697333Sgblack@eecs.umich.edu 707333Sgblack@eecs.umich.edu template<class IntType> 717333Sgblack@eecs.umich.edu void argsInit(int pageSize, 727333Sgblack@eecs.umich.edu std::vector<AuxVector<IntType> > extraAuxvs); 737333Sgblack@eecs.umich.edu 747333Sgblack@eecs.umich.edu public: 757333Sgblack@eecs.umich.edu Addr gdtStart() 767333Sgblack@eecs.umich.edu { return _gdtStart; } 777333Sgblack@eecs.umich.edu 787333Sgblack@eecs.umich.edu Addr gdtSize() 797333Sgblack@eecs.umich.edu { return _gdtSize; } 807333Sgblack@eecs.umich.edu 817333Sgblack@eecs.umich.edu SyscallDesc* getDesc(int callnum); 827333Sgblack@eecs.umich.edu 837333Sgblack@eecs.umich.edu void setSyscallReturn(ThreadContext *tc, SyscallReturn return_value); 847333Sgblack@eecs.umich.edu }; 857333Sgblack@eecs.umich.edu 867333Sgblack@eecs.umich.edu class X86_64LiveProcess : public X86LiveProcess 877333Sgblack@eecs.umich.edu { 887333Sgblack@eecs.umich.edu protected: 897333Sgblack@eecs.umich.edu X86_64LiveProcess(LiveProcessParams *params, ObjectFile *objFile, 907333Sgblack@eecs.umich.edu SyscallDesc *_syscallDescs, int _numSyscallDescs); 917333Sgblack@eecs.umich.edu 927333Sgblack@eecs.umich.edu class VSyscallPage 937333Sgblack@eecs.umich.edu { 947333Sgblack@eecs.umich.edu public: 957333Sgblack@eecs.umich.edu Addr base; 967333Sgblack@eecs.umich.edu Addr size; 977333Sgblack@eecs.umich.edu Addr vtimeOffset; 987333Sgblack@eecs.umich.edu Addr vgettimeofdayOffset; 997333Sgblack@eecs.umich.edu }; 1007333Sgblack@eecs.umich.edu VSyscallPage vsyscallPage; 1017333Sgblack@eecs.umich.edu 1027333Sgblack@eecs.umich.edu public: 1037333Sgblack@eecs.umich.edu void argsInit(int intSize, int pageSize); 1047333Sgblack@eecs.umich.edu void initState(); 1057333Sgblack@eecs.umich.edu 1067333Sgblack@eecs.umich.edu X86ISA::IntReg getSyscallArg(ThreadContext *tc, int &i); 1077333Sgblack@eecs.umich.edu /// Explicitly import the otherwise hidden getSyscallArg 1087333Sgblack@eecs.umich.edu using LiveProcess::getSyscallArg; 1097333Sgblack@eecs.umich.edu void setSyscallArg(ThreadContext *tc, int i, X86ISA::IntReg val); 1107333Sgblack@eecs.umich.edu }; 1117333Sgblack@eecs.umich.edu 1127333Sgblack@eecs.umich.edu class I386LiveProcess : public X86LiveProcess 1137333Sgblack@eecs.umich.edu { 1147333Sgblack@eecs.umich.edu protected: 1157333Sgblack@eecs.umich.edu I386LiveProcess(LiveProcessParams *params, ObjectFile *objFile, 1167333Sgblack@eecs.umich.edu SyscallDesc *_syscallDescs, int _numSyscallDescs); 1177333Sgblack@eecs.umich.edu 1187333Sgblack@eecs.umich.edu class VSyscallPage 1197333Sgblack@eecs.umich.edu { 1207333Sgblack@eecs.umich.edu public: 1217333Sgblack@eecs.umich.edu Addr base; 1227333Sgblack@eecs.umich.edu Addr size; 1237333Sgblack@eecs.umich.edu Addr vsyscallOffset; 1247333Sgblack@eecs.umich.edu Addr vsysexitOffset; 1257333Sgblack@eecs.umich.edu }; 1267333Sgblack@eecs.umich.edu VSyscallPage vsyscallPage; 1277333Sgblack@eecs.umich.edu 1287333Sgblack@eecs.umich.edu public: 1297333Sgblack@eecs.umich.edu void argsInit(int intSize, int pageSize); 1307333Sgblack@eecs.umich.edu void initState(); 1317333Sgblack@eecs.umich.edu 1327333Sgblack@eecs.umich.edu void syscall(int64_t callnum, ThreadContext *tc); 1337333Sgblack@eecs.umich.edu X86ISA::IntReg getSyscallArg(ThreadContext *tc, int &i); 1347333Sgblack@eecs.umich.edu X86ISA::IntReg getSyscallArg(ThreadContext *tc, int &i, int width); 1357333Sgblack@eecs.umich.edu void setSyscallArg(ThreadContext *tc, int i, X86ISA::IntReg val); 1367333Sgblack@eecs.umich.edu }; 1377333Sgblack@eecs.umich.edu 1387333Sgblack@eecs.umich.edu /** 1397333Sgblack@eecs.umich.edu * Declaration of architectural page table for x86. 1407333Sgblack@eecs.umich.edu * 1417333Sgblack@eecs.umich.edu * These page tables are stored in system memory and respect x86 specification. 1427333Sgblack@eecs.umich.edu */ 1437333Sgblack@eecs.umich.edu typedef MultiLevelPageTable<PageTableOps> ArchPageTable; 1447333Sgblack@eecs.umich.edu 1457333Sgblack@eecs.umich.edu} 1467333Sgblack@eecs.umich.edu 1477333Sgblack@eecs.umich.edu#endif // __ARCH_X86_PROCESS_HH__ 1487333Sgblack@eecs.umich.edu