public inbox for libc-hacker@sourceware.org
 help / color / mirror / Atom feed
* Re: [PATCH] vfork patch for SH
  2003-01-13  4:59 [PATCH] vfork patch for SH kaz Kojima
@ 2003-01-13  4:59 ` Jakub Jelinek
  2003-01-13  4:59   ` kaz Kojima
  0 siblings, 1 reply; 3+ messages in thread
From: Jakub Jelinek @ 2003-01-13  4:59 UTC (permalink / raw)
  To: kaz Kojima; +Cc: libc-hacker

On Sat, Jan 11, 2003 at 08:30:30PM +0900, kaz Kojima wrote:
> Hi,
> 
> The attached is the vfork fix of SH and adding correct syscall error
> handling for non-PIC case which was forgotten in the previous patch.
> 
> Regards,
> 	kaz
> --
> 2003-01-11  Kaz Kojima  <kkojima@rr.iij4u.or.jp>
> 
> 	* sysdeps/unix/sysv/linux/sh/sysdep.h (SYSCALL_ERROR_HANDLER):
> 	Add non-PIC case.
> 	* sysdeps/unix/sysv/linux/sh/vfork.S (__vfork): Handle
> 	SINGLE_THREAD_P case.

sysdeps/unix/sysv/linux/sh/vfork.S should be unconditional vfork,
only linuxthreads/sysdeps/unix/sysv/linux/sh/vfork.S should call
__fork after pthread_create has been called.
When NPTL will be supported on SH or when compiling without thread support,
you want vfork to be always vfork.

	Jakub

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] vfork patch for SH
  2003-01-13  4:59 ` Jakub Jelinek
@ 2003-01-13  4:59   ` kaz Kojima
  0 siblings, 0 replies; 3+ messages in thread
From: kaz Kojima @ 2003-01-13  4:59 UTC (permalink / raw)
  To: jakub; +Cc: libc-hacker

Jakub Jelinek <jakub@redhat.com> wrote:
>> 2003-01-11  Kaz Kojima  <kkojima@rr.iij4u.or.jp>
>> 
>> 	* sysdeps/unix/sysv/linux/sh/sysdep.h (SYSCALL_ERROR_HANDLER):
>> 	Add non-PIC case.
>> 	* sysdeps/unix/sysv/linux/sh/vfork.S (__vfork): Handle
>> 	SINGLE_THREAD_P case.
> 
> sysdeps/unix/sysv/linux/sh/vfork.S should be unconditional vfork,
> only linuxthreads/sysdeps/unix/sysv/linux/sh/vfork.S should call
> __fork after pthread_create has been called.
> When NPTL will be supported on SH or when compiling without thread support,
> you want vfork to be always vfork.

Oh, I withdraw this patch and will come up with the revised one.
Thanks a lot.

Regards,
	kaz

^ permalink raw reply	[flat|nested] 3+ messages in thread

* [PATCH] vfork patch for SH
@ 2003-01-13  4:59 kaz Kojima
  2003-01-13  4:59 ` Jakub Jelinek
  0 siblings, 1 reply; 3+ messages in thread
From: kaz Kojima @ 2003-01-13  4:59 UTC (permalink / raw)
  To: libc-hacker

Hi,

The attached is the vfork fix of SH and adding correct syscall error
handling for non-PIC case which was forgotten in the previous patch.

Regards,
	kaz
--
2003-01-11  Kaz Kojima  <kkojima@rr.iij4u.or.jp>

	* sysdeps/unix/sysv/linux/sh/sysdep.h (SYSCALL_ERROR_HANDLER):
	Add non-PIC case.
	* sysdeps/unix/sysv/linux/sh/vfork.S (__vfork): Handle
	SINGLE_THREAD_P case.

diff -urN ORIG/libc/sysdeps/unix/sysv/linux/sh/sysdep.h LOCAL/libc/sysdeps/unix/sysv/linux/sh/sysdep.h
--- ORIG/libc/sysdeps/unix/sysv/linux/sh/sysdep.h	Wed Jan  8 08:37:36 2003
+++ LOCAL/libc/sysdeps/unix/sysv/linux/sh/sysdep.h	Sat Jan 11 10:07:19 2003
@@ -66,7 +66,12 @@
   END (name)
 
 #ifndef PIC
-# define SYSCALL_ERROR_HANDLER	/* Nothing here; code in sysdep.S is used.  */
+# define SYSCALL_ERROR_HANDLER	\
+	mov.l 0f,r1; \
+	jmp @r1; \
+	 mov r0,r4; \
+	.align 2; \
+     0: .long __syscall_error
 #else
 # if RTLD_PRIVATE_ERRNO
 #  define SYSCALL_ERROR_HANDLER	\
diff -urN ORIG/libc/sysdeps/unix/sysv/linux/sh/vfork.S LOCAL/libc/sysdeps/unix/sysv/linux/sh/vfork.S
--- ORIG/libc/sysdeps/unix/sysv/linux/sh/vfork.S	Wed Jan  8 08:37:36 2003
+++ LOCAL/libc/sysdeps/unix/sysv/linux/sh/vfork.S	Sat Jan 11 10:43:53 2003
@@ -16,7 +16,7 @@
    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
    02111-1307 USA.  */
 
-#include <sysdep.h>
+#include <sysdep-cancel.h>
 #define _ERRNO_H	1
 #include <bits/errno.h>
 
@@ -26,32 +26,10 @@
    and the process ID of the new process to the old process.  */
 
 ENTRY (__vfork)
+	SINGLE_THREAD_P
+	bf .Lhidden_fork
 
-#ifdef __NR_vfork
-	mov.w	.L3, r3
-	trapa	#0x10
-	mov     r0, r1
-	mov	#-12, r2
-	shad	r2, r1
-	not	r1, r1			// r1=0 means r0 = -1 to -4095
-	tst	r1, r1			// i.e. error in linux
-	bf	1f
-	mov.w	.L1, r1
-	cmp/eq	r1, r0
-	bt	2f
-	bra	.Lsyscall_error
-	 nop
-.L1:
-	.word	-ENOSYS
-.L3:	.word	__NR_vfork
-1:
-	rts
-	 nop
-2:
-#endif
-
-	/* If we don't have vfork, fork is close enough.  */
-	mov	#+__NR_fork, r3
+	mov.w	.L1, r3
 	trapa	#0x10
 	mov     r0, r1
 	mov	#-12, r2
@@ -59,11 +37,19 @@
 	not	r1, r1			// r1=0 means r0 = -1 to -4095
 	tst	r1, r1			// i.e. error in linux
 	bf	.Lpseudo_end
-.Lsyscall_error:	
 	SYSCALL_ERROR_HANDLER
 .Lpseudo_end:
 	rts
 	 nop
+.L1:	.word	__NR_vfork
+
+.Lhidden_fork:	
+	mov.l	.L2, r1
+	braf	r1
+	 nop
+1:
+	.align 2
+.L2:	.long	HIDDEN_JUMPTARGET(__fork)-1b
 
 PSEUDO_END (__vfork)
 libc_hidden_def (__vfork)

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2003-01-11 12:37 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-01-13  4:59 [PATCH] vfork patch for SH kaz Kojima
2003-01-13  4:59 ` Jakub Jelinek
2003-01-13  4:59   ` kaz Kojima

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).