process.hh revision 7532:3f6413fc37a2
111012Sandreas.sandberg@arm.com/* 211012Sandreas.sandberg@arm.com * Copyright (c) 2007 The Hewlett-Packard Development Company 311012Sandreas.sandberg@arm.com * All rights reserved. 411012Sandreas.sandberg@arm.com * 511012Sandreas.sandberg@arm.com * The license below extends only to copyright in the software and shall 611012Sandreas.sandberg@arm.com * not be construed as granting a license to any other intellectual 711012Sandreas.sandberg@arm.com * property including but not limited to intellectual property relating 811012Sandreas.sandberg@arm.com * to a hardware implementation of the functionality of the software 911012Sandreas.sandberg@arm.com * licensed hereunder. You may use the software subject to the license 1011012Sandreas.sandberg@arm.com * terms below provided that you ensure that this notice is replicated 1111012Sandreas.sandberg@arm.com * unmodified and in its entirety in all distributions of the software, 1211012Sandreas.sandberg@arm.com * modified or unmodified, in source code or in binary form. 1311012Sandreas.sandberg@arm.com * 1411012Sandreas.sandberg@arm.com * Redistribution and use in source and binary forms, with or without 1511012Sandreas.sandberg@arm.com * modification, are permitted provided that the following conditions are 1611012Sandreas.sandberg@arm.com * met: redistributions of source code must retain the above copyright 1711012Sandreas.sandberg@arm.com * notice, this list of conditions and the following disclaimer; 1811012Sandreas.sandberg@arm.com * redistributions in binary form must reproduce the above copyright 1911012Sandreas.sandberg@arm.com * notice, this list of conditions and the following disclaimer in the 2011012Sandreas.sandberg@arm.com * documentation and/or other materials provided with the distribution; 2111012Sandreas.sandberg@arm.com * neither the name of the copyright holders nor the names of its 2211012Sandreas.sandberg@arm.com * contributors may be used to endorse or promote products derived from 2311012Sandreas.sandberg@arm.com * this software without specific prior written permission. 2411012Sandreas.sandberg@arm.com * 2511012Sandreas.sandberg@arm.com * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 2611012Sandreas.sandberg@arm.com * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 2711012Sandreas.sandberg@arm.com * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 2811012Sandreas.sandberg@arm.com * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2911012Sandreas.sandberg@arm.com * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 3011012Sandreas.sandberg@arm.com * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 3111012Sandreas.sandberg@arm.com * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 3211012Sandreas.sandberg@arm.com * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 3311012Sandreas.sandberg@arm.com * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 3411012Sandreas.sandberg@arm.com * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 3511012Sandreas.sandberg@arm.com * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 3611012Sandreas.sandberg@arm.com * 3711012Sandreas.sandberg@arm.com * Authors: Gabe Black 3811012Sandreas.sandberg@arm.com */ 3911012Sandreas.sandberg@arm.com 4011012Sandreas.sandberg@arm.com#ifndef __ARCH_X86_PROCESS_HH__ 4111012Sandreas.sandberg@arm.com#define __ARCH_X86_PROCESS_HH__ 4211012Sandreas.sandberg@arm.com 4311012Sandreas.sandberg@arm.com#include <string> 4411012Sandreas.sandberg@arm.com#include <vector> 4511012Sandreas.sandberg@arm.com#include "sim/process.hh" 4611012Sandreas.sandberg@arm.com 4711012Sandreas.sandberg@arm.comclass SyscallDesc; 4811012Sandreas.sandberg@arm.com 4911012Sandreas.sandberg@arm.comnamespace X86ISA 5011012Sandreas.sandberg@arm.com{ 5111012Sandreas.sandberg@arm.com enum X86AuxiliaryVectorTypes { 5211012Sandreas.sandberg@arm.com M5_AT_SYSINFO = 32, 5311012Sandreas.sandberg@arm.com M5_AT_SYSINFO_EHDR = 33 5411012Sandreas.sandberg@arm.com }; 5511012Sandreas.sandberg@arm.com 5611012Sandreas.sandberg@arm.com class X86LiveProcess : public LiveProcess 5711012Sandreas.sandberg@arm.com { 5811012Sandreas.sandberg@arm.com protected: 5911012Sandreas.sandberg@arm.com Addr _gdtStart; 6011012Sandreas.sandberg@arm.com Addr _gdtSize; 6111012Sandreas.sandberg@arm.com 6211012Sandreas.sandberg@arm.com SyscallDesc *syscallDescs; 6311012Sandreas.sandberg@arm.com const int numSyscallDescs; 6411012Sandreas.sandberg@arm.com 6511012Sandreas.sandberg@arm.com X86LiveProcess(LiveProcessParams * params, ObjectFile *objFile, 6611012Sandreas.sandberg@arm.com SyscallDesc *_syscallDescs, int _numSyscallDescs); 6711012Sandreas.sandberg@arm.com 6811012Sandreas.sandberg@arm.com template<class IntType> 6911012Sandreas.sandberg@arm.com void argsInit(int pageSize, 7011012Sandreas.sandberg@arm.com std::vector<AuxVector<IntType> > extraAuxvs); 7111012Sandreas.sandberg@arm.com 7211012Sandreas.sandberg@arm.com public: 7311012Sandreas.sandberg@arm.com Addr gdtStart() 7411012Sandreas.sandberg@arm.com { return _gdtStart; } 7511012Sandreas.sandberg@arm.com 7611012Sandreas.sandberg@arm.com Addr gdtSize() 7711012Sandreas.sandberg@arm.com { return _gdtSize; } 7811012Sandreas.sandberg@arm.com 7911012Sandreas.sandberg@arm.com SyscallDesc* getDesc(int callnum); 8011012Sandreas.sandberg@arm.com 8111012Sandreas.sandberg@arm.com void setSyscallReturn(ThreadContext *tc, SyscallReturn return_value); 8211012Sandreas.sandberg@arm.com }; 8311012Sandreas.sandberg@arm.com 8411012Sandreas.sandberg@arm.com class X86_64LiveProcess : public X86LiveProcess 8511012Sandreas.sandberg@arm.com { 8611012Sandreas.sandberg@arm.com protected: 8711012Sandreas.sandberg@arm.com X86_64LiveProcess(LiveProcessParams *params, ObjectFile *objFile, 8811012Sandreas.sandberg@arm.com SyscallDesc *_syscallDescs, int _numSyscallDescs); 8911012Sandreas.sandberg@arm.com 9011012Sandreas.sandberg@arm.com class VSyscallPage 9111012Sandreas.sandberg@arm.com { 9211012Sandreas.sandberg@arm.com public: 9311012Sandreas.sandberg@arm.com Addr base; 9411012Sandreas.sandberg@arm.com Addr size; 9511012Sandreas.sandberg@arm.com Addr vtimeOffset; 9611012Sandreas.sandberg@arm.com Addr vgettimeofdayOffset; 9711012Sandreas.sandberg@arm.com }; 9811012Sandreas.sandberg@arm.com VSyscallPage vsyscallPage; 9911012Sandreas.sandberg@arm.com 10011012Sandreas.sandberg@arm.com public: 10111012Sandreas.sandberg@arm.com void argsInit(int intSize, int pageSize); 10211012Sandreas.sandberg@arm.com void initState(); 10311012Sandreas.sandberg@arm.com 10411012Sandreas.sandberg@arm.com X86ISA::IntReg getSyscallArg(ThreadContext *tc, int &i); 10511012Sandreas.sandberg@arm.com void setSyscallArg(ThreadContext *tc, int i, X86ISA::IntReg val); 10611012Sandreas.sandberg@arm.com }; 10711012Sandreas.sandberg@arm.com 10811012Sandreas.sandberg@arm.com class I386LiveProcess : public X86LiveProcess 10911012Sandreas.sandberg@arm.com { 11011012Sandreas.sandberg@arm.com protected: 11111012Sandreas.sandberg@arm.com I386LiveProcess(LiveProcessParams *params, ObjectFile *objFile, 11211012Sandreas.sandberg@arm.com SyscallDesc *_syscallDescs, int _numSyscallDescs); 11311012Sandreas.sandberg@arm.com 11411012Sandreas.sandberg@arm.com class VSyscallPage 11511012Sandreas.sandberg@arm.com { 11611012Sandreas.sandberg@arm.com public: 11711012Sandreas.sandberg@arm.com Addr base; 11811012Sandreas.sandberg@arm.com Addr size; 11911012Sandreas.sandberg@arm.com Addr vsyscallOffset; 12011012Sandreas.sandberg@arm.com Addr vsysexitOffset; 12111012Sandreas.sandberg@arm.com }; 12211012Sandreas.sandberg@arm.com VSyscallPage vsyscallPage; 12311012Sandreas.sandberg@arm.com 12411012Sandreas.sandberg@arm.com public: 12511012Sandreas.sandberg@arm.com void argsInit(int intSize, int pageSize); 12611012Sandreas.sandberg@arm.com void initState(); 12711012Sandreas.sandberg@arm.com 12811012Sandreas.sandberg@arm.com void syscall(int64_t callnum, ThreadContext *tc); 12911012Sandreas.sandberg@arm.com X86ISA::IntReg getSyscallArg(ThreadContext *tc, int &i); 13011012Sandreas.sandberg@arm.com X86ISA::IntReg getSyscallArg(ThreadContext *tc, int &i, int width); 13111012Sandreas.sandberg@arm.com void setSyscallArg(ThreadContext *tc, int i, X86ISA::IntReg val); 13211012Sandreas.sandberg@arm.com }; 13311012Sandreas.sandberg@arm.com} 13411012Sandreas.sandberg@arm.com 13511012Sandreas.sandberg@arm.com#endif // __ARCH_X86_PROCESS_HH__ 13611012Sandreas.sandberg@arm.com