This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

__builtin_longjmp problem


Hello,

I use gcc-2.95 on Cygwin for i960-unknown-coff. The exception handling does not work. As far as I could find it is due
to __builtin_setjmp/longjmp. The following code hangs on VxWorks 5.1:

#include <stdio.h>

int jbuf[1024];

void hello() {
    if(__builtin_setjmp(jbuf) == 0) {
 __builtin_longjmp(jbuf, 1);
    } else {
 printf("jumped\n");
    }
}

In the assembler I can see that the code for longjmp is wrong (the whole output is attached at the end):

code generated for __bulitin_setjmp (seems OK for me):

    ldconst _jbuf,g4
    st fp,(g4)
    ldconst L17,g5
    st g5,4(g4)
    st sp,8(g4)
    mov 0,g4
 
code generated for __buitin_longjmp(seems wrong):

    ldconst _jbuf,g4
    flushreg
    mov 1,fp
    lda -64(fp),pfp
    ld (g4),g5
    st g5,-56(fp)
    ld 8(g4),g4
    st g4,-60(fp)
    ret

How do I fix this?

Is that possible to make compiler to generate calls to a  setjmp/longjmp from the library
for exception handling?
I've seen a macro DONT_USE_BUITIN_SETJMP in the source code. How do I turn it on for
buiding gcc?

Best regards
Artem
 

assembler output:
 

     .file "hello.cpp"
gcc2_compiled.:
___gnu_compiled_cplusplus:
.text
     .align 3
LC0:
     .ascii "jumped\12\0"
     .align 4
     .globl _hello__Fv
     #  Function 'hello__Fv'
     #  Registers used: g0 g4 g5 g8* g9* g10* g11* g12* g14 fp pfp
     #     sp r3* r4* r5* r6* r7* r8* r9* r10* r11* r12* r13* r14* r15* cc
_hello__Fv:
     lda 36(sp),sp
     stq g8,80(fp)
     st g12,96(fp)
     #Prologue stats:
     #  Total Frame Size: 36 bytes
     #  Local Variable Size: 16 bytes
     #  Register Save Size: 5 regs, 20 bytes
     #End Prologue#
     st g14,64(fp)
     ldconst _jbuf,g4
     st fp,(g4)
     ldconst L4,g5
     st g5,4(g4)
     st sp,8(g4)
     mov 0,g4
     b L3
     .align 3
L4:
     ld 64(fp),g5
     mov g5,g14
     lda 1,g4
     b L3
     .align 3
L3:
     cmpi g4,0
     bne L2
     ldconst _jbuf,g4
     flushreg
     mov 1,fp
     lda -64(fp),pfp
     ld (g4),g5
     st g5,-56(fp)
     ld 8(g4),g4
     st g4,-60(fp)
     ret
     b L5
     .align 3
L2:
     ldconst LC0,g0
     callx _printf
L5:
     b LR1
LR1:
     #EPILOGUE#
     ldq 80(fp),g8
     ld 96(fp),g12
     ret
     #End Epilogue#
.globl _jbuf
.bss _jbuf,4096,2
 
 
 

begin:vcard 
n:Alimarine;Artem
tel;home:(+31) 40-2440633
tel;work:(+31) 40-2763078
x-mozilla-html:TRUE
adr:;;;;;;
version:2.1
email;internet:aalimari@best.ms.philips.com
fn:Artem Alimarine
end:vcard

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]