Date: Tue, 14 Feb 2006 18:30:13 GMT From: Robert Millan <rmh@aybabtu.com> To: freebsd-bugs@FreeBSD.org Subject: Re: kern/93331: [patch] broken asm in kernel Message-ID: <200602141830.k1EIUDOW009892@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
The following reply was made to PR kern/93331; it has been noted by GNATS. From: Robert Millan <rmh@aybabtu.com> To: bug-followup@FreeBSD.org Cc: aurel32@debian.org Subject: Re: kern/93331: [patch] broken asm in kernel Date: Tue, 14 Feb 2006 14:03:54 +0100 --T4sUOijqQbZv57TR Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Here's a patch for kern/93331, made by Aurelien Jarno. (I verified it applies cleanly in HEAD) -- Robert Millan --T4sUOijqQbZv57TR Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="binutils_movl.diff" --- sys.old/i386/i386/locore.s.orig 2005-09-05 22:35:16.000000000 +0200 +++ sys/i386/i386/locore.s 2005-09-05 22:35:58.000000000 +0200 @@ -358,7 +358,7 @@ pushl %eax testl $PSL_VM,UC_EFLAGS(%eax) jne 1f - movl UC_GS(%eax),%gs /* restore %gs */ + movw UC_GS(%eax),%gs /* restore %gs */ 1: movl $SYS_sigreturn,%eax pushl %eax /* junk to fake return addr. */ @@ -375,7 +375,7 @@ pushl %eax testl $PSL_VM,UC4_EFLAGS(%eax) jne 1f - movl UC4_GS(%eax),%gs /* restore %gs */ + movw UC4_GS(%eax),%gs /* restore %gs */ 1: movl $344,%eax /* 4.x SYS_sigreturn */ pushl %eax /* junk to fake return addr. */ @@ -393,7 +393,7 @@ pushl %eax testl $PSL_VM,SC_PS(%eax) jne 9f - movl SC_GS(%eax),%gs /* restore %gs */ + movw SC_GS(%eax),%gs /* restore %gs */ 9: movl $103,%eax /* 3.x SYS_sigreturn */ pushl %eax /* junk to fake return addr. */ --- sys.old/i386/i386/swtch.s 2005-09-06 14:47:02.000000000 +0200 +++ sys/i386/i386/swtch.s 2005-09-06 14:47:33.000000000 +0200 @@ -111,7 +111,7 @@ movl %ebp,PCB_EBP(%edx) movl %esi,PCB_ESI(%edx) movl %edi,PCB_EDI(%edx) - movl %gs,PCB_GS(%edx) + movw %gs,PCB_GS(%edx) pushfl /* PSL */ popl PCB_PSL(%edx) /* Check to see if we need to call a switchout function. */ @@ -279,7 +279,7 @@ /* This must be done after loading the user LDT. */ .globl cpu_switch_load_gs cpu_switch_load_gs: - movl PCB_GS(%edx),%gs + movw PCB_GS(%edx),%gs /* Test if debug registers should be restored. */ testl $PCB_DBREGS,PCB_FLAGS(%edx) @@ -348,7 +348,7 @@ movl %ebp,PCB_EBP(%ecx) movl %esi,PCB_ESI(%ecx) movl %edi,PCB_EDI(%ecx) - movl %gs,PCB_GS(%ecx) + movw %gs,PCB_GS(%ecx) pushfl popl PCB_PSL(%ecx) --- sys.old/i386/include/cpufunc.h 2005-09-06 17:32:18.000000000 +0200 +++ sys/i386/include/cpufunc.h 2005-09-06 17:32:42.000000000 +0200 @@ -456,7 +456,7 @@ rgs(void) { u_int sel; - __asm __volatile("movl %%gs,%0" : "=rm" (sel)); + __asm __volatile("mov %%gs,%0" : "=rm" (sel)); return (sel); } @@ -477,7 +477,7 @@ static __inline void load_gs(u_int sel) { - __asm __volatile("movl %0,%%gs" : : "rm" (sel)); + __asm __volatile("mov %0,%%gs" : : "rm" (sel)); } static __inline void --- sys.old/i386/linux/linux_locore.s 2005-09-06 20:28:47.000000000 +0200 +++ sys/i386/linux/linux_locore.s 2005-09-06 20:29:05.000000000 +0200 @@ -8,7 +8,7 @@ NON_GPROF_ENTRY(linux_sigcode) call *LINUX_SIGF_HANDLER(%esp) leal LINUX_SIGF_SC(%esp),%ebx /* linux scp */ - movl LINUX_SC_GS(%ebx),%gs + movw LINUX_SC_GS(%ebx),%gs movl %esp, %ebx /* pass sigframe */ push %eax /* fake ret addr */ movl $LINUX_SYS_linux_sigreturn,%eax /* linux_sigreturn() */ @@ -19,7 +19,7 @@ linux_rt_sigcode: call *LINUX_RT_SIGF_HANDLER(%esp) leal LINUX_RT_SIGF_UC(%esp),%ebx /* linux ucp */ - movl LINUX_SC_GS(%ebx),%gs + movw LINUX_SC_GS(%ebx),%gs push %eax /* fake ret addr */ movl $LINUX_SYS_linux_rt_sigreturn,%eax /* linux_rt_sigreturn() */ int $0x80 /* enter kernel with args */ --- sys.old/compat/ndis/winx32_wrap.S 2005-09-06 21:47:21.000000000 +0200 +++ sys/compat/ndis/winx32_wrap.S 2005-09-06 21:47:48.000000000 +0200 @@ -348,7 +348,7 @@ ret ENTRY(x86_setfs) - movl 4(%esp),%fs + movw 4(%esp),%fs ret ENTRY(x86_gettid) --T4sUOijqQbZv57TR--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200602141830.k1EIUDOW009892>