Исключения C ++, не обнаруженные в Solaris 10 при компиляции с w / g ++ 5.4 в Solaris 11 - PullRequest
1 голос
/ 14 мая 2019

Я компилирую с g ++ 5.4 на Solaris 11 и работаю на Solaris 10. Кажется, все работает, кроме исключений C ++, которые не перехватываются.

На Solaris 11:

Вотмой компилятор и версии ОС:

$ uname -a
SunOS tf-vdevmcps11-d001 5.11 11.3 i86pc i386 i86pc
$ g++ --version
g++ (GCC) 5.4.0
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Простая тестовая программа.

$ cat foo.cxx

#include <iostream>

int main()
{
        try {
                throw 15; // f();
                std::cout << "after f\n";
        } catch (int i) {
                std::cout << "caught " << i << '\n';
        } catch (...) {
                std::cout << "caught unknown exception\n";
        }
}

Он компилируется и запускаетсяздесь:

$ g++ -fabi-version=2 -Wabi -o foo -g -m32 foo.cxx
$ ./foo
caught 15

Это динамические библиотеки, которые он использует:

$ ldd foo
        libstdc++.so.6 =>        /usr/lib/libstdc++.so.6
        libm.so.2 =>     /lib/libm.so.2
        librt.so.1 =>    /lib/librt.so.1
        libgcc_s.so.1 =>         /usr/lib/libgcc_s.so.1
        libc.so.1 =>     /lib/libc.so.1

В Solaris 10 происходит сбой:

$ ./foo
terminate called after throwing an instance of 'int'
Abort(coredump)

Вот трассировка стекаосновной файл

$ pstack core
core 'core' of 10550:   ./foo
 fecca427 _lwp_kill (1, 6) + 7
 fec720c3 raise    (6) + 1f
 fec51d2d abort    (feffdd68, 9844246, 806ac20, fed40c10, 0, 0) + cd
 fef24565 _ZN9__gnu_cxx27__verbose_terminate_handlerEv (0, feff0488, fef211cb, fef65e28, 8066240, 8047c30) + 175
 fef211d7 _ZN10__cxxabiv111__terminateEPFvvE (fef243f0, 0, fef21235, fef21267, fef21259, fef65e28) + 17
 fef21270 _ZN10__cxxabiv112__unexpectedEPFvvE (8066240, feff0488, fef21235, fef214cf, feffb818, 8047b6c)
 fef214fe ???????? (8066260, 8061740, 0, fed32a40, 8047b80, fefcab34)
 08051239 main     (8051379, feffb818, 8047ba4, 8051053, 1, 8047bb0) + 35
 08051053 _start   (1, 8047c98, 0, 8047c9e, 8047ca6, 8047cad) + 83

Вот динамические библиотеки:

$ ldd foo
        libstdc++.so.6 =>        /opt/csw/lib/libstdc++.so.6
        libm.so.2 =>     /usr/lib/libm.so.2
        librt.so.1 =>    /usr/lib/librt.so.1
        libgcc_s.so.1 =>         /opt/csw/lib/libgcc_s.so.1
        libc.so.1 =>     /usr/lib/libc.so.1
        libaio.so.1 =>   /usr/lib/libaio.so.1
        libmd.so.1 =>    /usr/lib/libmd.so.1

Две библиотеки GNU из версии 5.5 пакета:

>$ pkginfo -l CSWlibgcc-s1 CSWlibstdc++6
   PKGINST:  CSWlibgcc-s1
      NAME:  libgcc_s1 - The GNU Compiler Collection, libgcc_s.so.1
  CATEGORY:  application
      ARCH:  i386
   VERSION:  5.5.0,REV=2017.10.23
   BASEDIR:  /
    VENDOR:  http://gcc.gnu.org packaged for CSW by Dagobert Michelsen
    PSTAMP:  dam@unstable10x-20171023221120
  INSTDATE:  Apr 22 2019 08:14
   HOTLINE:  http://www.opencsw.org/bugtrack/
     EMAIL:  dam@opencsw.org
    STATUS:  completely installed
     FILES:        4 installed pathnames
                   1 directories
                1883 blocks used (approx)

   PKGINST:  CSWlibstdc++6
      NAME:  libstdc++6 - The GNU Compiler Collection, libstdc++.so.6
  CATEGORY:  application
      ARCH:  i386
   VERSION:  5.5.0,REV=2017.10.23
   BASEDIR:  /
    VENDOR:  http://gcc.gnu.org packaged for CSW by Dagobert Michelsen
    PSTAMP:  dam@unstable10x-20171023221408
  INSTDATE:  Apr 22 2019 08:06
   HOTLINE:  http://www.opencsw.org/bugtrack/
     EMAIL:  dam@opencsw.org
    STATUS:  completely installed
     FILES:        6 installed pathnames
                   1 directories
                   2 executables
               43873 blocks used (approx)
...