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