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 --- 68 unchanged lines hidden (view full) --- 77 { return _gdtStart; } 78 79 Addr gdtSize() 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; 96 syscallDescs = in.syscallDescs; 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 108 class VSyscallPage 109 { 110 public: 111 Addr base; 112 Addr size; 113 Addr vtimeOffset; 114 Addr vgettimeofdayOffset; |
115 116 VSyscallPage & 117 operator=(const VSyscallPage &in) 118 { 119 if (this == &in) 120 return *this; 121 122 base = in.base; 123 size = in.size; 124 vtimeOffset = in.vtimeOffset; 125 vgettimeofdayOffset = in.vgettimeofdayOffset; 126 127 return *this; 128 } |
129 }; 130 VSyscallPage vsyscallPage; 131 132 public: 133 void argsInit(int pageSize); 134 void initState(); 135 136 X86ISA::IntReg getSyscallArg(ThreadContext *tc, int &i); 137 /// Explicitly import the otherwise hidden getSyscallArg 138 using Process::getSyscallArg; 139 void setSyscallArg(ThreadContext *tc, int i, X86ISA::IntReg val); |
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 150 class VSyscallPage 151 { 152 public: 153 Addr base; 154 Addr size; 155 Addr vsyscallOffset; 156 Addr vsysexitOffset; |
157 158 VSyscallPage & 159 operator=(const VSyscallPage &in) 160 { 161 if (this == &in) 162 return *this; 163 164 base = in.base; 165 size = in.size; 166 vsyscallOffset = in.vsyscallOffset; 167 vsysexitOffset = in.vsysexitOffset; 168 169 return *this; 170 } |
171 }; 172 VSyscallPage vsyscallPage; 173 174 public: 175 void argsInit(int pageSize); 176 void initState(); 177 178 void syscall(int64_t callnum, ThreadContext *tc, Fault *fault); 179 X86ISA::IntReg getSyscallArg(ThreadContext *tc, int &i); 180 X86ISA::IntReg getSyscallArg(ThreadContext *tc, int &i, int width); 181 void setSyscallArg(ThreadContext *tc, int i, X86ISA::IntReg val); |
182 void clone(ThreadContext *old_tc, ThreadContext *new_tc, 183 Process *process, TheISA::IntReg flags); |
184 }; 185 186 /** 187 * Declaration of architectural page table for x86. 188 * 189 * These page tables are stored in system memory and respect x86 specification. 190 */ 191 typedef MultiLevelPageTable<PageTableOps> ArchPageTable; 192 193} 194 195#endif // __ARCH_X86_PROCESS_HH__ |