We have a program (c++) that needs c++ SJLJ exceptions. We have built all compilers from 3.3.1 to 3.3.6 and they all have the same bug: In the first throw that the program does, we get an exception in the runtime Program received signal SIGSEGV, Segmentation fault. [Switching to Thread 1166014832 (LWP 24573)] parse_lsda_header (context=0x457f6978, p=0xd5a0400000 <Address 0xd5a0400000 out of bounds>, info=0x457f6900) at ../../../../gcc-3.3.6/libstdc++-v3/libsupc++/eh_personality.cc:62 62 lpstart_encoding = *p++;
The variable p has a wrong address: 0xd5a0400000. This address is NOT completely random however. It is always the address of a function, in this case : .gnu.linkonce.d._ZTV18QueryRowLimitCheck 0x0000000000d5a040 0x330 ../Debug/libdatabaselibrary.a(GenerateWhere.o) 0x0000000000d5a040 _ZTV18QueryRowLimitCheck I gathered that from the map file. In different versions of the compiler the specific function changes, but the overall pattern is the same: The high 32 bits of the address are filled with the low 32 bits of the address of a function. A bug somewhere??????? WHERE???? I have been working already almost a week in this and I get nowhere. Please help. Thanks in advance jacob -- Summary: SJLJ-exceptions broken Product: gcc Version: unknown Status: UNCONFIRMED Severity: normal Priority: P2 Component: c++ AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: jacob dot navia at ants dot com CC: gcc-bugs at gcc dot gnu dot org GCC host triplet: gcc-3.3.3 to gcc-3.3.6 GCC target triplet: amd64 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23278