This is the mail archive of the
libstdc++@gcc.gnu.org
mailing list for the libstdc++ project.
"unable to detect exception model"
- To: libstdc++ at gcc dot gnu dot org
- Subject: "unable to detect exception model"
- From: Paolo Carlini <pcarlini at unitus dot it>
- Date: Wed, 18 Apr 2001 15:41:01 +0200
- CC: yasir_home at bigfoot dot com, pme at gcc dot gnu dot org
Hi all again...
today, before delving into the Loki library, I tried to understand
something more of the problems I'm still experiencing with Gcc3.1 and
cin (PR2523) as of 3.1 20010417 (Yasir, can you confirm that, on the
contrary, Gcc3.0 works well for you too?)
Vane hope...
I tried therefore to decouple core language (in particular eh) from
libstdc++ issues: I downloaded libstdc++-92, plugged it into Gcc3.0
20010416, and tried to rebuild everything. Unfortunately the configure
stopped, being unable to detect the exception model... In fact, at
variance with branch's libstdc++, mainline libstdc++ and libstdc++-92
check (by grepping) for 2 possible exception model: the old "sjlj" or
the new "call frame". Neither is found in the testcase assembler
produced by my out-of-the-box Gcc3.0... (see att1 & att2).
So, I reasoned, if I configure Gcc with --enable-sjlj-exceptions...
Indeed, libstdc++-v3 configure found the sjlj-related bits
in testcase assembler. However, it looks like in the actual source code
sjlj exceptions are not supported anymore and the compilation stopped
with an error (att3) :(.
What I'm doing wrong?? It is really impossible to build a working
libstdc++-v3 without the new exception model?? In other terms: it is
presently impossible to test a new incarnation of libstdc++-v3 by using
"only" Gcc3.0 ??
If in the next few hours no one will point out a stupid error in my
strategy ;) I will file a GNATS configure-related PR...
P.
-----------
Att1:
struct S { ~S(); };
void bar();
void foo()
{
S s;
bar();
}
-----------
Att2:
file "exc_test.C"
.globl __rethrow
.text
.align 16
.globl _Z3foov
.type _Z3foov,@function
_Z3foov:
.LFB1:
.LEHB3:
pushl %ebp
.LCFI0:
movl %esp, %ebp
.LCFI1:
subl $8, %esp
.LCFI2:
call _Z3barv
.LEHE3:
subl $12, %esp
leal -1(%ebp), %eax
pushl %eax
.LCFI3:
call _ZN1SD1Ev
addl $16, %esp
jmp .L6
.p2align 4,,7
.L3:
.LEHB5:
subl $12, %esp
leal -1(%ebp), %eax
pushl %eax
call _ZN1SD1Ev
addl $16, %esp
subl $12, %esp
pushl $.LRTH3
call __rethrow
.p2align 4,,7
.L5:
.LEHE5:
.LCFI4:
call _ZSt9terminatev
.p2align 4,,7
.L6:
movl %ebp, %esp
popl %ebp
ret
.LFE1:
.Lfe1:
.size _Z3foov,.Lfe1-_Z3foov
.section .gcc_except_table,"aw",@progbits
.align 4
__EXCEPTION_TABLE__:
.long -2
.value 4
.value 1
.LRTH0:
.LRTH3:
.long .LEHB3
.long .LEHE3
.long .L3
.long 0
.LRTH5:
.long .LEHB5
.long .LEHE5
.long .L5
.long 0
.LRTH1:
.long -1
.section .eh_frame,"aw",@progbits
__FRAME_BEGIN__:
.4byte .LLCIE1
.LSCIE1:
.4byte 0x0
.byte 0x1
.string "eh"
.4byte __EXCEPTION_TABLE__
.byte 0x1
.byte 0x7c
.byte 0x8
.byte 0xc
.byte 0x4
.byte 0x4
.byte 0x88
.byte 0x1
.align 4
.LECIE1:
.set .LLCIE1,.LECIE1-.LSCIE1
.4byte .LLFDE1
.LSFDE1:
.4byte .LSFDE1-__FRAME_BEGIN__
.4byte .LFB1
.4byte .LFE1-.LFB1
.byte 0x4
.4byte .LCFI0-.LFB1
.byte 0xe
.byte 0x8
.byte 0x85
.byte 0x2
.byte 0x4
.4byte .LCFI1-.LCFI0
.byte 0xd
.byte 0x5
.byte 0x4
.4byte .LCFI3-.LCFI1
.byte 0x2e
.byte 0x10
.byte 0x4
.4byte .LCFI4-.LCFI3
.byte 0x2e
.byte 0x0
.align 4
.LEFDE1:
.set .LLFDE1,.LEFDE1-.LSFDE1
.ident "GCC: (GNU) 3.0 20010416 (prerelease)"
-------------
Att3:
In file included from
../../../../gcc-20010416/libstdc++-v3/libsupc++/eh_alloc.cc:37:
../../../../gcc-20010416/libstdc++-v3/libsupc++/unwind-cxx.h:32:20:
unwind.h: No such file or directory
In file included from
../../../../gcc-20010416/libstdc++-v3/libsupc++/eh_alloc.cc:37:
../../../../gcc-20010416/libstdc++-v3/libsupc++/unwind-cxx.h:68:
'_Unwind_Exception'
is used as a type, but is not defined as a type.
../../../../gcc-20010416/libstdc++-v3/libsupc++/unwind-cxx.h:99:
`_Unwind_Exception'
was not declared in this scope
../../../../gcc-20010416/libstdc++-v3/libsupc++/unwind-cxx.h:99: parse
error
before `)' token
../../../../gcc-20010416/libstdc++-v3/libsupc++/unwind-cxx.h:112:
`_Unwind_Exception'
was not declared in this scope
../../../../gcc-20010416/libstdc++-v3/libsupc++/unwind-cxx.h:112: parse
error
before `)' token
../../../../gcc-20010416/libstdc++-v3/libsupc++/unwind-cxx.h:127: syntax
error before `=' token
../../../../gcc-20010416/libstdc++-v3/libsupc++/unwind-cxx.h:139: parse
error
before `,' token
../../../../gcc-20010416/libstdc++-v3/libsupc++/unwind-cxx.h:144: parse
error
before `,' token
../../../../gcc-20010416/libstdc++-v3/libsupc++/unwind-cxx.h:156:
`_Unwind_Exception'
was not declared in this scope
../../../../gcc-20010416/libstdc++-v3/libsupc++/unwind-cxx.h:156: `exc'
was not
declared in this scope
../../../../gcc-20010416/libstdc++-v3/libsupc++/unwind-cxx.h:157:
`__cxxabiv1::__get_exception_header_from_ue'
declared as an `inline' variable
../../../../gcc-20010416/libstdc++-v3/libsupc++/unwind-cxx.h:157: syntax
error before `{' token
In file included from ../../../../gcc-20010416/gcc/gthr.h:102,
from
../../../../gcc-20010416/libstdc++-v3/libsupc++/eh_alloc.cc:38:
../../../../gcc-20010416/gcc/gthr-single.h:211: parse error before `
__attribute__'
../../../../gcc-20010416/gcc/gthr-single.h: In function `int
__gthread_mutex_lock(...)':
../../../../gcc-20010416/gcc/gthr-single.h:217: parse error before `
__attribute__'
../../../../gcc-20010416/gcc/gthr-single.h:217: cannot declare static
function
inside another function
../../../../gcc-20010416/gcc/gthr-single.h: In function `int
__gthread_mutex_trylock(...)':
../../../../gcc-20010416/gcc/gthr-single.h:223: parse error before `
__attribute__'
../../../../gcc-20010416/gcc/gthr-single.h:223: cannot declare static
function
inside another function
../../../../gcc-20010416/libstdc++-v3/libsupc++/eh_alloc.cc: At top
level:
../../../../gcc-20010416/libstdc++-v3/libsupc++/unwind-cxx.h:157:
warning: `
__cxxabiv1::__cxa_exception*__cxxabiv1::__get_exception_header_from_ue'
defined but not used
make[3]: *** [eh_alloc.lo] Error 1
make[3]: Leaving directory
`/home/paolo/Gcc-Test/gcc-build-20010416/i686-pc-linux-gnu/libstdc++-v3/libsupc++'
make[2]: *** [all-recursive] Error 1
make[2]: Leaving directory
`/home/paolo/Gcc-Test/gcc-build-20010416/i686-pc-linux-gnu/libstdc++-v3'
make[1]: *** [all-recursive-am] Error 2
make[1]: Leaving directory
`/home/paolo/Gcc-Test/gcc-build-20010416/i686-pc-linux-gnu/libstdc++-v3'
make: *** [all-target-libstdc++-v3] Error 2