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

Reply via email to