All of lore.kernel.org
 help / color / mirror / Atom feed
From: Matthew Wilcox <willy@ldl.fc.hp.com>
To: parisc-linux@parisc-linux.org
Subject: [parisc-linux] [PATCH] Fix HPUX fork
Date: Thu, 22 Feb 2001 21:46:13 -0700	[thread overview]
Message-ID: <E14WA7R-0004qy-00@chrysl> (raw)

jsm pointed out I'd broken HPUX fork recently.  This fix is untested
(except that it builds), but if it's wrong it does at least point the
way.  I don't know if we want to enable STICKY_TIMEOUTS or some other
bugs for PER_HPUX, but they weren't enabled for SOM processes before,
so I haven't enabled them now.

Index: arch/parisc/hpux/entry_hpux.S
===================================================================
RCS file: /home/cvs/parisc/linux/arch/parisc/hpux/entry_hpux.S,v
retrieving revision 1.14
diff -u -p -r1.14 entry_hpux.S
--- entry_hpux.S	2000/07/18 03:14:26	1.14
+++ entry_hpux.S	2001/02/23 04:35:17
@@ -1,17 +1,13 @@
-/* -----------------------------------------------------------------------------
+/*
  *
- * Native PARISC/Linux Project (http://www.puffingroup.com/parisc)
+ * PARISC/Linux Project (http://www.parisc-linux.org/)
  *
  * modified by Matthew Wilcox <willy@bofh.ai> 1999-07-26
  */
 
-
-#define ASSEMBLY
-
 #include <linux/sys.h>
 #include <linux/linkage.h>
 #include <asm/unistd.h>
-
 
 	.text
 
Index: arch/parisc/hpux/wrappers.S
===================================================================
RCS file: /home/cvs/parisc/linux/arch/parisc/hpux/wrappers.S,v
retrieving revision 1.12
diff -u -p -r1.12 wrappers.S
--- wrappers.S	2001/01/28 13:39:13	1.12
+++ wrappers.S	2001/02/23 04:35:17
@@ -1,5 +1,5 @@
-/*------------------------------------------------------------------------------
- * Native PARISC/Linux Project (http://www.puffingroup.com/parisc)
+/*
+ * PARISC/Linux Project (http://www.parisc-linux.org/)
  *
  * HP-UX System Call Wrapper routines and System Call Return Path
  *
@@ -80,6 +80,7 @@
 
 
 	.export hpux_fork_wrapper
+	.export hpux_child_return
 	.import sys_fork
 
 hpux_fork_wrapper:
@@ -90,10 +91,7 @@ hpux_fork_wrapper:
 	stw	%r2,-20(%r30)
 	ldo	64(%r30),%r30
 	stw	%r2,PT_GR19(%r1)	;! save for child
-	stw	%r30,PT_GR20(%r1)	;! save for child
-	ldil	L%child_return,%r3
-	ldo	R%child_return(%r3),%r3
-	stw	%r3,PT_GR21(%r1)	;! save for child
+	stw	%r30,PT_GR21(%r1)	;! save for child
 
 	ldw	TASK_PT_GR30(%r1),%r25
 	copy	%r1,%r24
@@ -129,7 +127,7 @@ fork_exit:
 
 	/* Set the return value for the child */
 
-child_return:
+hpux_child_return:
 	ldw TASK_PT_GR19-TASK_SZ_ALGN-128(%r30),%r2
 	b fork_return
 	copy %r0,%r28
Index: arch/parisc/kernel/process.c
===================================================================
RCS file: /home/cvs/parisc/linux/arch/parisc/kernel/process.c,v
retrieving revision 1.32
diff -u -p -r1.32 process.c
--- process.c	2001/02/23 01:08:42	1.32
+++ process.c	2001/02/23 04:35:17
@@ -223,6 +223,7 @@ copy_thread(int nr, unsigned long clone_
 	 * function pointers aren't a pointer to the function on 64-bit */
 	extern void *ret_from_kernel_thread;
 	extern void *child_return;
+	extern void *hpux_child_return;
 
 	*cregs = *pregs;
 
@@ -262,8 +263,12 @@ copy_thread(int nr, unsigned long clone_
 		/* Use same stack depth as parent */
 		cregs->ksp = ((unsigned long)(p))
 			+ (pregs->gr[21] & (INIT_TASK_SIZE - 1));
-		cregs->kpc = &child_return;
 		cregs->gr[30] = usp;
+		if (p->personality == PER_HPUX) {
+			cregs->kpc = &hpux_child_return;
+		} else {
+			cregs->kpc = &child_return;
+		}
 	}
 
 	return 0;
Index: fs/binfmt_som.c
===================================================================
RCS file: /home/cvs/parisc/linux/fs/binfmt_som.c,v
retrieving revision 1.14
diff -u -p -r1.14 binfmt_som.c
--- binfmt_som.c	2000/12/19 23:56:51	1.14
+++ binfmt_som.c	2001/02/23 04:35:17
@@ -228,7 +228,7 @@ do_load_som_binary(struct linux_binprm *
 
 	/* OK, This is the point of no return */
 	current->flags &= ~PF_FORKNOEXEC;
-	current->personality = PER_LINUX; /* I suspect we want a PER_HPUX */
+	current->personality = PER_HPUX;
 
 	retval = map_som_binary(bprm->file, hpuxhdr);
 	if (retval < 0)
Index: include/linux/personality.h
===================================================================
RCS file: /home/cvs/parisc/linux/include/linux/personality.h,v
retrieving revision 1.3
diff -u -p -r1.3 personality.h
--- personality.h	2000/05/26 16:03:05	1.3
+++ personality.h	2001/02/23 04:35:18
@@ -25,11 +25,12 @@
 #define PER_SUNOS		(PER_BSD | STICKY_TIMEOUTS)
 #define PER_XENIX		(0x0007 | STICKY_TIMEOUTS)
 #define PER_LINUX32		(0x0008)
-#define PER_IRIX32              (0x0009 | STICKY_TIMEOUTS) /* IRIX5 32-bit     */
-#define PER_IRIXN32             (0x000a | STICKY_TIMEOUTS) /* IRIX6 new 32-bit */
-#define PER_IRIX64              (0x000b | STICKY_TIMEOUTS) /* IRIX6 64-bit     */
+#define PER_IRIX32		(0x0009 | STICKY_TIMEOUTS) /* IRIX5 32-bit     */
+#define PER_IRIXN32		(0x000a | STICKY_TIMEOUTS) /* IRIX6 new 32-bit */
+#define PER_IRIX64		(0x000b | STICKY_TIMEOUTS) /* IRIX6 64-bit     */
 #define PER_RISCOS		(0x000c)
 #define PER_SOLARIS		(0x000d | STICKY_TIMEOUTS)
+#define PER_HPUX		(0x000e)
 
 /* Prototype for an lcall7 syscall handler. */
 typedef void (*lcall7_func)(int, struct pt_regs *);

             reply	other threads:[~2001-02-23  4:46 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2001-02-23  4:46 Matthew Wilcox [this message]
2001-02-23  6:26 ` [parisc-linux] [PATCH] Fix HPUX fork Grant Grundler

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=E14WA7R-0004qy-00@chrysl \
    --to=willy@ldl.fc.hp.com \
    --cc=parisc-linux@parisc-linux.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.