For debugging purposes would like to propose the following patch. The
only thing besides from not knowing anything about other architectures
than i386, is that I don't know exactly what happens when compiling with
-fomit-frame-pointer

Could someone tell me ?

Marc
--- /usr/src/lib/libc_r/uthread/pthread_private.h       Tue Jun  3 00:22:52 2003
+++ /usr/src/lib/libc_r/uthread/pthread_private.h       Wed Jan 21 21:44:21 2004
@@ -86,7 +86,8 @@
        fdata = (char *) (ucp)->uc_mcontext.mc_fpstate; \
        __asm__("frstor %0": :"m"(*fdata));             \
 } while (0)
-#define SET_RETURN_ADDR_JB(jb, ra)     (jb)[0]._jb[0] = (int)(ra)
+#define        SET_RETURN_ADDR_JB(jb, ra)      (jb)[0]._jb[0] = (int)(ra)
+#define        SET_FRAME_PTR_JB(jb, fp)        (jb)[0]._jb[3] = (int)(fp)
 #elif  defined(__amd64__)
 #define        GET_STACK_JB(jb)        ((unsigned long)((jb)[0]._jb[2]))
 #define        GET_STACK_SJB(sjb)      ((unsigned long)((sjb)[0]._sjb[2]))
@@ -105,6 +106,7 @@
        __asm__("fxrstor %0": :"m"(*fdata));            \
 } while (0)
 #define SET_RETURN_ADDR_JB(jb, ra)     (jb)[0]._jb[0] = (long)(ra)
+#define        SET_FRAME_PTR_JB(jb, fp)
 #elif  defined(__alpha__)
 #include <machine/reg.h>
 #define        GET_STACK_JB(jb)        ((unsigned long)((jb)[0]._jb[R_SP + 4]))
@@ -120,6 +122,7 @@
        (jb)[0]._jb[R_RA + 4] = (long)(ra);             \
        (jb)[0]._jb[R_T12 + 4] = (long)(ra);            \
 } while (0)
+#define        SET_FRAME_PTR_JB(jb, fp)
 #elif defined(__ia64__)
 #define        GET_BSP_JB(jb)          (*((unsigned long*)JMPBUF_ADDR_OF(jb,J_BSP)))
 #define        GET_STACK_JB(jb)        (*((unsigned long*)JMPBUF_ADDR_OF(jb,J_SP)))
@@ -136,6 +139,7 @@
        GET_BSP_JB(jb) = (long)(stk);                   \
 } while (0)
 #define UPD_STACK_JB(jb, stk)  GET_STACK_JB(jb) = (long)(stk)
+#define        SET_FRAME_PTR_JB(jb, fp)
 #elif  defined(__sparc64__)
 #include <machine/frame.h>
 
@@ -164,6 +168,7 @@
 #define        FP_RESTORE_UC(ucp)      /* XXX */
 #define        SET_RETURN_ADDR_JB(jb, ra)                      \
        (jb)[0]._jb[_JB_PC] = (long)(ra) - 8
+#define        SET_FRAME_PTR_JB(jb, fp)
 #else
 #error "Don't recognize this architecture!"
 #endif
--- /usr/src/lib/libc_r/uthread/uthread_create.c        Wed Dec  3 07:54:40 2003
+++ /usr/src/lib/libc_r/uthread/uthread_create.c        Wed Jan 21 04:01:31 2004
@@ -146,6 +146,7 @@
                         * _thread_start().
                         */
                        SET_RETURN_ADDR_JB(new_thread->ctx.jb, _thread_start);
+                       SET_FRAME_PTR_JB(new_thread->ctx.jb, NULL);
 
 #if !defined(__ia64__)
                        stackp = (long)new_thread->stack + pattr->stacksize_attr - 
sizeof(double);
_______________________________________________
[EMAIL PROTECTED] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to