diff options
author | Gabe Black <gblack@eecs.umich.edu> | 2006-04-18 09:44:45 -0400 |
---|---|---|
committer | Gabe Black <gblack@eecs.umich.edu> | 2006-04-18 09:44:45 -0400 |
commit | cae6b571d63b38c3177f5b47891021ba69386453 (patch) | |
tree | 6039a7ce3381b6c5448fc127bdb7b063ae52115e /arch/sparc/linux | |
parent | 0534e355b77497a1272f6078edae1692d87a15cf (diff) | |
parent | 609c4ecea618c6406e50432e38882925db7b7ede (diff) | |
download | gem5-cae6b571d63b38c3177f5b47891021ba69386453.tar.xz |
Merge m5.eecs.umich.edu:/bk/newmem
into ewok.(none):/home/gblack/m5/newmem
--HG--
extra : convert_revision : 3eb97976caf57e43119a998c31128ca6f163c05b
Diffstat (limited to 'arch/sparc/linux')
-rw-r--r-- | arch/sparc/linux/process.cc | 39 | ||||
-rw-r--r-- | arch/sparc/linux/process.hh | 3 |
2 files changed, 40 insertions, 2 deletions
diff --git a/arch/sparc/linux/process.cc b/arch/sparc/linux/process.cc index c7e5f79ca..ca85a6d2d 100644 --- a/arch/sparc/linux/process.cc +++ b/arch/sparc/linux/process.cc @@ -26,8 +26,9 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#include "arch/sparc/linux/process.hh" #include "arch/sparc/isa_traits.hh" +#include "arch/sparc/linux/process.hh" +#include "arch/sparc/regfile.hh" #include "base/trace.hh" #include "cpu/exec_context.hh" @@ -54,6 +55,40 @@ unameFunc(SyscallDesc *desc, int callnum, Process *process, strcpy(name->machine, "sparc"); name.copyOut(xc->getMemPort()); + + return 0; +} + + +SyscallReturn SparcISA::getresuidFunc(SyscallDesc *desc, int num, + Process *p, ExecContext *xc) +{ + const IntReg id = htog(100); + Addr ruid = xc->getSyscallArg(0); + Addr euid = xc->getSyscallArg(1); + Addr suid = xc->getSyscallArg(2); + //Handle the EFAULT case + //Set the ruid + if(ruid) + { + BufferArg ruidBuff(ruid, sizeof(IntReg)); + memcpy(ruidBuff.bufferPtr(), &id, sizeof(IntReg)); + ruidBuff.copyOut(xc->getMemPort()); + } + //Set the euid + if(euid) + { + BufferArg euidBuff(euid, sizeof(IntReg)); + memcpy(euidBuff.bufferPtr(), &id, sizeof(IntReg)); + euidBuff.copyOut(xc->getMemPort()); + } + //Set the suid + if(suid) + { + BufferArg suidBuff(suid, sizeof(IntReg)); + memcpy(suidBuff.bufferPtr(), &id, sizeof(IntReg)); + suidBuff.copyOut(xc->getMemPort()); + } return 0; } @@ -167,7 +202,7 @@ SyscallDesc SparcLinuxProcess::syscallDescs[] = { /* 106 */ SyscallDesc("rt_sigqueueinfo", unimplementedFunc), /* 107 */ SyscallDesc("rt_sigsuspend", unimplementedFunc), /* 108 */ SyscallDesc("setresuid", unimplementedFunc), - /* 109 */ SyscallDesc("getresuid", unimplementedFunc), + /* 109 */ SyscallDesc("getresuid", getresuidFunc), /* 110 */ SyscallDesc("setresgid", unimplementedFunc), /* 111 */ SyscallDesc("getresgid", unimplementedFunc), /* 112 */ SyscallDesc("setregid32", unimplementedFunc), diff --git a/arch/sparc/linux/process.hh b/arch/sparc/linux/process.hh index 1565ab549..38ddd68b9 100644 --- a/arch/sparc/linux/process.hh +++ b/arch/sparc/linux/process.hh @@ -57,5 +57,8 @@ class SparcLinuxProcess : public SparcLiveProcess const int Num_Syscall_Descs; }; +SyscallReturn getresuidFunc(SyscallDesc *desc, int num, + Process *p, ExecContext *xc); + } // namespace SparcISA #endif // __ALPHA_LINUX_PROCESS_HH__ |