Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 2 Dec 2003 16:55:07 -0800 (PST)
From:      Peter Wemm <peter@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 43327 for review
Message-ID:  <200312030055.hB30t7Uw089665@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=43327

Change 43327 by peter@peter_overcee on 2003/12/02 16:54:26

	grumble.  submit this before I lose it, since I still can't get
	a response from re@ about it.

Affected files ...

.. //depot/projects/hammer/lib/libc_r/uthread/uthread_create.c#5 edit
.. //depot/projects/hammer/lib/libc_r/uthread/uthread_init.c#5 edit
.. //depot/projects/hammer/lib/libc_r/uthread/uthread_sig.c#7 edit

Differences ...

==== //depot/projects/hammer/lib/libc_r/uthread/uthread_create.c#5 (text+ko) ====

@@ -73,6 +73,9 @@
 	pthread_t       new_thread;
 	pthread_attr_t	pattr;
 	void           *stack;
+#if !defined(__ia64__)
+	u_long 		stackp;
+#endif
 
 	if (thread == NULL)
 		return(EINVAL);
@@ -145,10 +148,12 @@
 			SET_RETURN_ADDR_JB(new_thread->ctx.jb, _thread_start);
 
 #if !defined(__ia64__)
+			stackp = (long)new_thread->stack + pattr->stacksize_attr - sizeof(double);
+#if defined(__amd64__)
+			stackp &= ~0xFUL;
+#endif
 			/* The stack starts high and builds down: */
-			SET_STACK_JB(new_thread->ctx.jb,
-			    (long)new_thread->stack + pattr->stacksize_attr
-			    - sizeof(double));
+			SET_STACK_JB(new_thread->ctx.jb, stackp);
 #else
 			SET_STACK_JB(new_thread->ctx.jb,
 			    (long)new_thread->stack, pattr->stacksize_attr);

==== //depot/projects/hammer/lib/libc_r/uthread/uthread_init.c#5 (text+ko) ====

@@ -208,6 +208,9 @@
 	size_t		len;
 	int		mib[2];
 	int		sched_stack_size;	/* Size of scheduler stack. */
+#if !defined(__ia64__)
+	u_long		stackp;
+#endif
 
 	struct clockinfo clockinfo;
 	struct sigaction act;
@@ -374,8 +377,11 @@
 		/* Setup the context for the scheduler: */
 		_setjmp(_thread_kern_sched_jb);
 #if !defined(__ia64__)
-		SET_STACK_JB(_thread_kern_sched_jb, _thread_kern_sched_stack +
-		    sched_stack_size - sizeof(double));
+		stackp = (long)_thread_kern_sched_stack + sched_stack_size - sizeof(double);
+#if defined(__amd64__)
+		stackp &= ~0xFUL;
+#endif
+		SET_STACK_JB(_thread_kern_sched_jb, stackp);
 #else
 		SET_STACK_JB(_thread_kern_sched_jb, _thread_kern_sched_stack,
 		    sched_stack_size);

==== //depot/projects/hammer/lib/libc_r/uthread/uthread_sig.c#7 (text+ko) ====

@@ -1048,13 +1048,20 @@
 	 * Leave a little space on the stack and round down to the
 	 * nearest aligned word:
 	 */
+#if defined(__amd64__)
+	stackp -= 128;		/* Skip over 128 byte red-zone */
+#endif
 	stackp -= sizeof(double);
+#if defined(__amd64__)
+	stackp &= ~0xFUL;
+#else
 	stackp &= ~0x3UL;
 #endif
+#endif
 
 	/* Allocate room on top of the stack for a new signal frame: */
 	stackp -= sizeof(struct pthread_signal_frame);
-#if defined(__ia64__)
+#if defined(__ia64__) || defined(__amd64__)
 	stackp &= ~0xFUL;
 #endif
 
@@ -1087,6 +1094,9 @@
 	 */
 #if !defined(__ia64__)
 	stackp -= sizeof(double);
+#if defined(__amd64__)
+	stackp &= ~0xFUL;
+#endif
 #endif
 	_setjmp(thread->ctx.jb);
 #if !defined(__ia64__)



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200312030055.hB30t7Uw089665>