Skip site navigation (1)Skip section navigation (2)
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>