gem5
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
process.hh
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2007 The Hewlett-Packard Development Company
3  * All rights reserved.
4  *
5  * The license below extends only to copyright in the software and shall
6  * not be construed as granting a license to any other intellectual
7  * property including but not limited to intellectual property relating
8  * to a hardware implementation of the functionality of the software
9  * licensed hereunder. You may use the software subject to the license
10  * terms below provided that you ensure that this notice is replicated
11  * unmodified and in its entirety in all distributions of the software,
12  * modified or unmodified, in source code or in binary form.
13  *
14  * Redistribution and use in source and binary forms, with or without
15  * modification, are permitted provided that the following conditions are
16  * met: redistributions of source code must retain the above copyright
17  * notice, this list of conditions and the following disclaimer;
18  * redistributions in binary form must reproduce the above copyright
19  * notice, this list of conditions and the following disclaimer in the
20  * documentation and/or other materials provided with the distribution;
21  * neither the name of the copyright holders nor the names of its
22  * contributors may be used to endorse or promote products derived from
23  * this software without specific prior written permission.
24  *
25  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
29  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
31  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36  *
37  * Authors: Gabe Black
38  */
39 
40 #ifndef __ARCH_X86_PROCESS_HH__
41 #define __ARCH_X86_PROCESS_HH__
42 
43 #include <string>
44 #include <vector>
45 
47 #include "sim/aux_vector.hh"
48 #include "sim/process.hh"
49 
50 class SyscallDesc;
51 
52 namespace X86ISA
53 {
57  };
58 
59  class X86Process : public Process
60  {
61  protected:
64 
66  const int numSyscallDescs;
67 
68  X86Process(ProcessParams * params, ObjectFile *objFile,
69  SyscallDesc *_syscallDescs, int _numSyscallDescs);
70 
71  template<class IntType>
72  void argsInit(int pageSize,
73  std::vector<AuxVector<IntType> > extraAuxvs);
74 
75  public:
77  { return _gdtStart; }
78 
80  { return _gdtSize; }
81 
82  SyscallDesc* getDesc(int callnum);
83 
84  void setSyscallReturn(ThreadContext *tc, SyscallReturn return_value);
85  void clone(ThreadContext *old_tc, ThreadContext *new_tc,
86  Process *process, TheISA::IntReg flags);
87 
88  X86Process &
89  operator=(const X86Process &in)
90  {
91  if (this == &in)
92  return *this;
93 
94  _gdtStart = in._gdtStart;
95  _gdtSize = in._gdtSize;
97 
98  return *this;
99  }
100  };
101 
102  class X86_64Process : public X86Process
103  {
104  protected:
105  X86_64Process(ProcessParams *params, ObjectFile *objFile,
106  SyscallDesc *_syscallDescs, int _numSyscallDescs);
107 
109  {
110  public:
115 
116  VSyscallPage &
118  {
119  if (this == &in)
120  return *this;
121 
122  base = in.base;
123  size = in.size;
126 
127  return *this;
128  }
129  };
131 
132  public:
133  void argsInit(int pageSize);
134  void initState();
135 
140  void clone(ThreadContext *old_tc, ThreadContext *new_tc,
141  Process *process, TheISA::IntReg flags);
142  };
143 
144  class I386Process : public X86Process
145  {
146  protected:
147  I386Process(ProcessParams *params, ObjectFile *objFile,
148  SyscallDesc *_syscallDescs, int _numSyscallDescs);
149 
151  {
152  public:
157 
158  VSyscallPage &
160  {
161  if (this == &in)
162  return *this;
163 
164  base = in.base;
165  size = in.size;
168 
169  return *this;
170  }
171  };
173 
174  public:
175  void argsInit(int pageSize);
176  void initState();
177 
178  void syscall(int64_t callnum, ThreadContext *tc,
179  Fault *fault) override;
183  void clone(ThreadContext *old_tc, ThreadContext *new_tc,
184  Process *process, TheISA::IntReg flags);
185  };
186 
194 
195 }
196 
197 #endif // __ARCH_X86_PROCESS_HH__
VSyscallPage vsyscallPage
Definition: process.hh:172
ObjectFile * objFile
Definition: process.hh:182
MultiLevelPageTable< PageTableOps > ArchPageTable
Declaration of architectural page table for x86.
Definition: process.hh:193
X86Process(ProcessParams *params, ObjectFile *objFile, SyscallDesc *_syscallDescs, int _numSyscallDescs)
Definition: process.cc:98
Bitfield< 7 > i
Definition: miscregs.hh:1378
void setSyscallArg(ThreadContext *tc, int i, X86ISA::IntReg val)
Definition: process.cc:1102
void argsInit(int pageSize)
Definition: process.cc:1044
VSyscallPage & operator=(const VSyscallPage &in)
Definition: process.hh:117
void clone(ThreadContext *old_tc, ThreadContext *new_tc, Process *process, TheISA::IntReg flags)
Definition: process.cc:1076
void syscall(int64_t callnum, ThreadContext *tc, Fault *fault) override
Definition: process.cc:135
void clone(ThreadContext *old_tc, ThreadContext *new_tc, Process *process, TheISA::IntReg flags)
Definition: process.cc:105
void argsInit(int pageSize, std::vector< AuxVector< IntType > > extraAuxvs)
Definition: process.cc:744
const Params * params() const
Definition: sim_object.hh:111
virtual TheISA::IntReg getSyscallArg(ThreadContext *tc, int &i)=0
void setSyscallArg(ThreadContext *tc, int i, X86ISA::IntReg val)
Definition: process.cc:1069
VSyscallPage & operator=(const VSyscallPage &in)
Definition: process.hh:159
Declaration of a multi-level page table.
X86_64Process(ProcessParams *params, ObjectFile *objFile, SyscallDesc *_syscallDescs, int _numSyscallDescs)
Definition: process.cc:113
const int numSyscallDescs
Definition: process.hh:66
X86AuxiliaryVectorTypes
Definition: process.hh:54
ThreadContext is the external interface to all thread state for anything outside of the CPU...
STL vector class.
Definition: stl.hh:40
Bitfield< 63 > val
Definition: misc.hh:770
void argsInit(int pageSize)
Definition: process.cc:1035
X86ISA::IntReg getSyscallArg(ThreadContext *tc, int &i)
Definition: process.cc:1084
void initState()
initState() is called on each SimObject when not restoring from a checkpoint.
Definition: process.cc:624
void setSyscallReturn(ThreadContext *tc, SyscallReturn return_value)
Definition: process.cc:1056
void initState()
initState() is called on each SimObject when not restoring from a checkpoint.
Definition: process.cc:180
void clone(ThreadContext *old_tc, ThreadContext *new_tc, Process *process, TheISA::IntReg flags)
Definition: process.cc:1109
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
Definition: types.hh:142
X86Process & operator=(const X86Process &in)
Definition: process.hh:89
X86ISA::IntReg getSyscallArg(ThreadContext *tc, int &i)
Definition: process.cc:1062
VSyscallPage vsyscallPage
Definition: process.hh:130
uint64_t IntReg
Definition: registers.hh:47
This class provides the wrapper interface for the system call implementations which are defined in th...
Definition: syscall_desc.hh:63
This class implements an in-memory multi-level page table that can be configured to follow ISA specif...
SyscallDesc * syscallDescs
Definition: process.hh:65
Bitfield< 4 > width
Definition: miscregs.hh:1383
SyscallDesc * getDesc(int callnum)
Definition: process.cc:172
I386Process(ProcessParams *params, ObjectFile *objFile, SyscallDesc *_syscallDescs, int _numSyscallDescs)
Definition: process.cc:148
This class represents the return value from an emulated system call, including any errno setting...
uint64_t IntReg
Definition: registers.hh:92
std::shared_ptr< FaultBase > Fault
Definition: types.hh:184

Generated on Fri Jun 9 2017 13:03:35 for gem5 by doxygen 1.8.6