diff options
author | Gabe Black <gblack@eecs.umich.edu> | 2009-02-27 09:22:30 -0800 |
---|---|---|
committer | Gabe Black <gblack@eecs.umich.edu> | 2009-02-27 09:22:30 -0800 |
commit | 6ca53f8675ec0cc31de09d0878b4c29d4048a1fa (patch) | |
tree | c5d9cef658f59e5d3acea42246bb758f9224d357 /src/arch | |
parent | 9a000c51736d97c1109be296ea7d1fd41d84debb (diff) | |
download | gem5-6ca53f8675ec0cc31de09d0878b4c29d4048a1fa.tar.xz |
X86: Handle 32 bit system call arguments.
Diffstat (limited to 'src/arch')
-rw-r--r-- | src/arch/x86/process.cc | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/src/arch/x86/process.cc b/src/arch/x86/process.cc index 7d7978a35..232f07934 100644 --- a/src/arch/x86/process.cc +++ b/src/arch/x86/process.cc @@ -116,6 +116,14 @@ static const int ArgumentReg[] = { INTREG_R9W }; static const int NumArgumentRegs = sizeof(ArgumentReg) / sizeof(const int); +static const int ArgumentReg32[] = { + INTREG_EBX, + INTREG_ECX, + INTREG_EDX, + INTREG_ESI, + INTREG_EDI, +}; +static const int NumArgumentRegs32 = sizeof(ArgumentReg) / sizeof(const int); X86LiveProcess::X86LiveProcess(LiveProcessParams * params, ObjectFile *objFile, SyscallDesc *_syscallDescs, int _numSyscallDescs) : @@ -260,6 +268,7 @@ I386LiveProcess::startup() tc->setMiscRegNoEffect(MISCREG_SEG_EFF_BASE(seg), 0); tc->setMiscRegNoEffect(MISCREG_SEG_ATTR(seg), dataAttr); tc->setMiscRegNoEffect(MISCREG_SEG_SEL(seg), 0xB); + tc->setMiscRegNoEffect(MISCREG_SEG_LIMIT(seg), (uint32_t)(-1)); } SegAttr csAttr = 0; @@ -610,11 +619,13 @@ X86_64LiveProcess::setSyscallArg(ThreadContext *tc, int i, X86ISA::IntReg val) X86ISA::IntReg I386LiveProcess::getSyscallArg(ThreadContext *tc, int i) { - panic("32 bit getSyscallArg not implemented.\n"); + assert(i < NumArgumentRegs32); + return tc->readIntReg(ArgumentReg32[i]); } void I386LiveProcess::setSyscallArg(ThreadContext *tc, int i, X86ISA::IntReg val) { - panic("32 bit setSyscallArg not implemented.\n"); + assert(i < NumArgumentRegs); + return tc->setIntReg(ArgumentReg[i], val); } |