Subject: Re: setjmp/sigsetjmp/longjmp/siglongjmp errors on many ports?
To: Christos Zoulas <christos@zoulas.com>
From: Michael Graff <explorer@flame.org>
List: tech-userlevel
Date: 11/27/1999 11:37:47
christos@zoulas.com (Christos Zoulas) writes:

> You must be confused... the __***14 are the ones used.

Are you certain?

From libc/arch/i386/gen/setjmp.S:

ENTRY(setjmp)

        PIC_PROLOGUE
        pushl   $0
#ifdef PIC
        call    PIC_PLT(_C_LABEL(sigblock))
#else
        call    _C_LABEL(sigblock)
#endif
        addl    $4,%esp
        PIC_EPILOGUE


..


ENTRY(longjmp)
        movl    4(%esp),%edx

        PIC_PROLOGUE
        pushl   24(%edx)
#ifdef PIC
        call    PIC_PLT(_C_LABEL(sigsetmask))
#else
        call    _C_LABEL(sigsetmask)
#endif
        addl    $4,%esp
        PIC_EPILOGUE


From libc/arch/alpha/gen/setjmp.S:

...
        /*
         * get signal information
         */
        mov     a0, s0                          /* squirrel away ptr to sc */

        /* see what's blocked */
        mov     zero, a0
        CALL(sigblock)                          /* see what's blocked */
        stq     v0, (1 * 8)(s0)                 /* and remember it in sc_mask */
...