Date: Thu, 2 May 2002 05:58:23 -0700 (PDT) From: Doug Rabson <dfr@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 10679 for review Message-ID: <200205021258.g42CwNS83683@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://people.freebsd.org/~peter/p4db/chv.cgi?CH=10679 Change 10679 by dfr@dfr_home on 2002/05/02 05:57:39 Add [sf]uword32 and [sf]uword64 to access explicitly sized values in userland. Return retval[1] in edx, not retval[0]. Affected files ... ... //depot/projects/ia64/sys/ia64/ia64/support.s#4 edit ... //depot/projects/ia64/sys/ia64/ia64/trap.c#24 edit Differences ... ==== //depot/projects/ia64/sys/ia64/ia64/support.s#4 (text+ko) ==== @@ -192,7 +192,8 @@ * fu{byte,word} : fetch a byte (word) from user memory */ -ENTRY(suword, 2) +ENTRY(suword64, 2) +XENTRY(suword) movl r14=VM_MAXUSER_ADDRESS;; // make sure address is ok cmp.geu p6,p0=in0,r14 @@ -218,9 +219,9 @@ mov ret0=r0 br.ret.sptk.few rp -END(suword) +END(suword64) -ENTRY(suhword, 2) +ENTRY(suword32, 2) movl r14=VM_MAXUSER_ADDRESS;; // make sure address is ok cmp.geu p6,p0=in0,r14 @@ -246,7 +247,7 @@ mov ret0=r0 br.ret.sptk.few rp -END(suhword) +END(suword32) ENTRY(subyte, 2) @@ -276,7 +277,8 @@ END(subyte) -ENTRY(fuword, 1) +ENTRY(fuword64, 1) +XENTRY(fuword) movl r14=VM_MAXUSER_ADDRESS;; // make sure address is ok cmp.geu p6,p0=in0,r14 @@ -301,9 +303,9 @@ br.ret.sptk.few rp -END(fuword) +END(fuword64) -ENTRY(fuhword, 1) +ENTRY(fuword32, 1) movl r14=VM_MAXUSER_ADDRESS;; // make sure address is ok cmp.geu p6,p0=in0,r14 @@ -328,7 +330,7 @@ br.ret.sptk.few rp -END(fuhword) +END(fuword32) ENTRY(fubyte, 1) ==== //depot/projects/ia64/sys/ia64/ia64/trap.c#24 (text+ko) ==== @@ -926,7 +926,7 @@ #include <i386/include/psl.h> -extern long fuhword(const void *base); +extern long fuword32(const void *base); static void ia32_syscall(struct trapframe *framep) @@ -973,14 +973,16 @@ /* * Code is first argument, followed by actual args. */ - code = fuhword(params); + code = fuword32(params); params += sizeof(int); } else if (code == SYS___syscall) { /* * Like syscall, but code is a quad, so as to maintain * quad alignment for the rest of the arguments. + * We use a 32-bit fetch in case params is not + * aligned. */ - code = fuword(params); + code = fuword32(params); params += sizeof(quad_t); } } @@ -1036,7 +1038,7 @@ switch (error) { case 0: framep->tf_r[FRAME_R8] = td->td_retval[0]; /* eax */ - framep->tf_r[FRAME_R10] = td->td_retval[0]; /* edx */ + framep->tf_r[FRAME_R10] = td->td_retval[1]; /* edx */ ia64_set_eflag(ia64_get_eflag() & ~PSL_C); break; To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe p4-projects" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200205021258.g42CwNS83683>