From: Barry S. <ba...@ba...> - 2023-12-13 15:52:24
|
The problem is that eg++ has no working support for C++ exceptions. The following simple C++ program fails to work: #include <stdio.h> #include <stdlib.h> #include <iostream> int main() { std::cout << "Hello" <<std::endl; try { throw 20; } catch (int e) { std::cout << "catch of " << e << std::endl; } return 0; } On Fedora 39 I get this: $ g++ -g -O0 -o a a.cpp $ ./a Hello catch of 20 On OpenBSD 7.4 I get this: $ eg++ -g -O0 -o a a.cpp $ ./a Hello Abort trap (core dumped) And with explicit option: $ eg++ -g -O0 -o a -fexceptions a.cpp; ./a Hello Abort trap (core dumped) Fix the compiler and PyCXX should work. Barry > On 13 Dec 2023, at 11:10, Barry Scott <ba...@ba...> wrote: > > I now have an old laptop with OpenBSD 7.4 installed. > Was way harder then it should be to install this OS... > > I'll try and repro what you are seeing. > > My working guess is that the compile options broke C++ exception handing. > > Barry > > > >> On 11 Dec 2023, at 09:06, Matti Viljamaa <mav...@gm...> wrote: >> >> FYI, I am replicating the issue at po...@op... <mailto:po...@op...> mailing list to get different views: >> >> https://marc.info/?l=openbsd-ports&m=170227787921446&w=2 >> >> On Sat, Dec 9, 2023 at 2:45 PM Matti Viljamaa <mav...@gm... <mailto:mav...@gm...>> wrote: >>> Maybe the following is helpful: >>> >>> (gdb) bt >>> #0 thrkill () at /tmp/-:2 >>> #1 0xf7a555255abd010d in ?? () >>> #2 0x000000d3e7980c52 in _libc_abort () at /usr/src/lib/libc/stdlib/abort.c:51 >>> #3 0x000000d4b9c3ce70 in uw_init_context_1 ( >>> context=<error reading variable: dwarf2_find_location_expression: Corrupted DWARF expression.>, context@entry=0x794f944a9560, >>> outer_cfa=<error reading variable: dwarf2_find_location_expression: Corrupted DWARF expression.>, outer_cfa@entry=0x794f944a9910, >>> outer_ra=<error reading variable: dwarf2_find_location_expression: Corrupted DWARF expression.>) at /usr/obj/ports/gcc-11.2.0/gcc-11.2.0/libgcc/unwind-pe.h:88 >>> #4 0x000000d4b9c3c5d9 in _Unwind_RaiseException (exc=0xd3f70264c0) >>> at /usr/obj/ports/gcc-11.2.0/gcc-11.2.0/libgcc/unwind.inc:93 >>> #5 0x000000d4b9b25414 in __cxxabiv1::__cxa_throw (obj=<optimized out>, >>> tinfo=0xd3f5aaa770 <typeinfo for Py::ValueError>, >>> dest=0xd3f5a9a6e2 <Py::ValueError::~ValueError()>) >>> at /usr/obj/ports/gcc-11.2.0/gcc-11.2.0/libstdc++-v3/libsupc++/eh_throw.cc:90 >>> #6 0x000000d3f5a9a73d in Py::ValueError::throwFunc () >>> at ./CXX/Python3/cxx_standard_exceptions.hxx:74 >>> #7 0x000000d3f5a98426 in Py::ifPyErrorThrowCxxException () >>> at Src/Python3/cxx_exceptions.cxx:41 >>> #8 0x000000d3f5a80e1c in Py::Callable::apply (this=0x794f944a9a40, args=...) >>> at ./CXX/Python3/Objects.hxx:3241 >>> #9 0x000000d3f5a842c8 in simple_module::func_with_callback (this=0xd45b2ef460, >>> args=...) at Demo/Python3/simple.cxx:351 >>> #10 0x000000d3f5a8b513 in Py::ExtensionModule<simple_module>::invoke_method_keyword ( >>> this=0xd45b2ef460, method_def=0xd410e7b420, args=..., keywords=...) >>> at ./CXX/Python3/ExtensionModule.hxx:192 >>> #11 0x000000d3f5a9524d in Py::method_keyword_call_handler (Python Exception <class 'gdb.error'> There is no member named ob_item.: >>> _self_and_name_tuple=, Python Exception <class 'gdb.error'> There is no member named ob_item.: >>> >>> _args=, _keywords=0x0) at Src/Python3/cxx_extensions.cxx:1695 >>> #12 0x000000d41f076d1c in cfunction_call () from /usr/local/lib/libpython3.10.so.0.0 >>> #13 0x000000d41f01cc75 in _PyObject_MakeTpCall () >>> from /usr/local/lib/libpython3.10.so.0.0 >>> #14 0x000000d41f129e60 in call_function () from /usr/local/lib/libpython3.10.so.0.0 >>> #15 0x000000d41f1206c0 in _PyEval_EvalFrameDefault () >>> from /usr/local/lib/libpython3.10.so.0.0 >>> #16 0x000000d41f11d4e4 in _PyEval_Vector () from /usr/local/lib/libpython3.10.so.0.0 >>> #17 0x000000d41f185527 in run_mod () from /usr/local/lib/libpython3.10.so.0.0 >>> #18 0x000000d41f185e0c in PyRun_InteractiveOneObjectEx () >>> from /usr/local/lib/libpython3.10.so.0.0 >>> #19 0x000000d41f1848be in _PyRun_InteractiveLoopObject () >>> from /usr/local/lib/libpython3.10.so.0.0 >>> #20 0x000000d41f183dfb in _PyRun_AnyFileObject () >>> from /usr/local/lib/libpython3.10.so.0.0 >>> #21 0x000000d41f187d2d in PyRun_AnyFileExFlags () >>> from /usr/local/lib/libpython3.10.so.0.0 >>> #22 0x000000d41f1ac960 in Py_RunMain () from /usr/local/lib/libpython3.10.so.0.0 >>> #23 0x000000d41f1adc33 in pymain_main () from /usr/local/lib/libpython3.10.so.0.0 >>> #24 0x000000d41f1ae02c in Py_BytesMain () from /usr/local/lib/libpython3.10.so.0.0 >>> #25 0x000000d1cd9a4971 in _start () >>> >>> On Sat, Dec 9, 2023 at 2:35 PM Matti Viljamaa <mav...@gm... <mailto:mav...@gm...>> wrote: >>>> PYTHONPATH=obj egdb python3 >>>> GNU gdb (GDB) 9.2 >>>> Copyright (C) 2020 Free Software Foundation, Inc. >>>> License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> >>>> This is free software: you are free to change and redistribute it. >>>> There is NO WARRANTY, to the extent permitted by law. >>>> Type "show copying" and "show warranty" for details. >>>> This GDB was configured as "x86_64-unknown-openbsd7.4". >>>> Type "show configuration" for configuration details. >>>> For bug reporting instructions, please see: >>>> <http://www.gnu.org/software/gdb/bugs/>. >>>> Find the GDB manual and other documentation resources online at: >>>> <http://www.gnu.org/software/gdb/documentation/>. >>>> >>>> For help, type "help". >>>> Type "apropos word" to search for commands related to "word"... >>>> Reading symbols from python3... >>>> (No debugging symbols found in python3) >>>> (gdb) import simple >>>> Undefined command: "import". Try "help". >>>> (gdb) run >>>> Starting program: /usr/local/bin/python3 >>>> Python 3.10.13 (main, Dec 5 2023, 18:39:12) [Clang 16.0.6 ] on openbsd7 >>>> Type "help", "copyright", "credits" or "license" for more information. >>>> >>> import simple >>>> warning: File "/usr/local/lib/libestdc++.so.20.0-gdb.py <http://so.20.0-gdb.py/>" auto-loading has been declined by your `auto-load safe-path' set to "/usr/local/share/gdb/auto-load". >>>> To enable execution of this file add >>>> add-auto-load-safe-path /usr/local/lib/libestdc++.so.20.0-gdb.py <http://so.20.0-gdb.py/> >>>> line to your configuration file "/root/.gdbinit". >>>> To completely disable this security protection add >>>> set auto-load safe-path / >>>> line to your configuration file "/root/.gdbinit". >>>> For more information about this security protection see the >>>> "Auto-loading safe path" section in the GDB manual. E.g., run from the shell: >>>> info "(gdb)Auto-loading safe path" >>>> sizeof(int) 4 >>>> sizeof(long) 8 >>>> sizeof(Py_hash_t) 8 >>>> sizeof(Py_ssize_t) 8 >>>> >>> def callback_bad( arg ): >>>> ... raise ValueError( 'callback_bad error' ) >>>> ... >>>> >>> simple.func_with_callback( callback_bad, 'fred' ) >>>> >>>> Program received signal SIGABRT, Aborted. >>>> thrkill () at /tmp/-:2 >>>> 2 /tmp/-: No such file or directory. >>>> (gdb) Quit >>>> (gdb) >>>> >>>> --- >>>> >>>> Now what? >>>> >>>> >>>> On Tue, Dec 5, 2023 at 1:46 PM Barry Scott <ba...@ba... <mailto:ba...@ba...>> wrote: >>>>> >>>>> >>>>> On 29/11/2023 13:02, Matti Viljamaa wrote: >>>>>> On a closer inspection it seems related to the line: >>>>>> >>>>>> simple.func_with_callback( callback_bad, 'fred' ) >>>>>> >>>>>> because replacing that with a direct call: >>>>>> >>>>>> call_back('fred') >>>>>> >>>>>> works as expected: >>>>>> >>>>>> ... >>>>>> TEST: call C++ with Python callback_good >>>>>> callback_good with 'callback_args string' >>>>>> PASS callback_good returned 'good result' >>>>>> TEST: call C++ with Python callback_bad >>>>>> callback_bad with 'fred' >>>>>> PASS callback_bad: error callback_bad error >>>>>> TEST: call C++ with Python callback_raise_simple_error >>>>>> callback_bad with 'callback_args string' >>>>>> Abort trap (core dumped) >>>>>> >>>>>> Is there some problem with raising exceptions with the simple.func_with_callback? >>>>>> >>>>>> However, I also think there might be a problem with: >>>>>> >>>>>> TEST: call C++ with Python callback_good >>>>>> callback_good with 'callback_args string' >>>>>> PASS callback_good returned 'good result' >>>>>> >>>>>> because I think it shouldn't show 'callback_args string' >>>>>> >>>>>> On Wed, Nov 29, 2023 at 1:15 PM Matti Viljamaa <mav...@gm... <mailto:mav...@gm...>> wrote: >>>>>>> I am attempting to build pycxx-7.1.8 for OpenBSD 7.4-current. >>>>>>> >>>>>>> I am following the Unix installation guide at: >>>>>>> >>>>>>> https://cxx.sourceforge.net/ >>>>>>> >>>>>>> The final line: >>>>>>> >>>>>>> make -f linux.mak clean test >>>>>>> >>>>>>> or >>>>>>> >>>>>>> gmake -f linux.mak clean test >>>>>>> >>>>>>> in OpenBSD >>>>>>> >>>>>>> fails to >>>>>>> >>>>>>> ... >>>>>>> TEST: call C++ with Python callback_bad >>>>>>> callback_bad with 'callback_args string' >>>>>>> Abort trap (core dumped) >>>>>>> gmake: *** [linux.mak:86: test] Error 134 >>>>>>> >>>>>>> Upon inspecting test_simple.py I've noticed that it seems to be linked to raising ValueError, because commenting out line 31: >>>>>>> >>>>>>> raise ValueError( 'callback_bad error' ) >>>>>>> >>>>>>> in test_simple.py makes test_simple.py progress to the next test. Now I see: >>>>>>> >>>>>>> ... >>>>>>> TEST: call C++ with Python callback_bad >>>>>>> callback_bad with 'callback_args string' >>>>>>> FAILED callback_bad None >>>>>>> TEST: call C++ with Python callback_raise_simple_error >>>>>>> callback_bad with 'callback_args string' >>>>>>> Abort trap (core dumped) >>>>>>> >>>>>>> However, since the Abort traps continue showing, I speculate that this is about something more. Possible reasons: >>>>>>> >>>>>>> * pycxx-7.1.8 is not compatible with Python 3.10 (or a particular subversion) >>>>>>> * something is different in OpenBSD compared to Linux >>>>>>> >>>>>>> Any ideas? >>>>> This is how to run the failing test on its own to debug it: >>>>> : 11:44:26 worthy ~/Projects/pycxx-trunk >>>>> : [1] barry $ PYTHONPATH=obj gdb python3.10 >>>>> GNU gdb (Fedora Linux) 13.2-11.fc39 >>>>> Copyright (C) 2023 Free Software Foundation, Inc. >>>>> License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> <http://gnu.org/licenses/gpl.html> >>>>> This is free software: you are free to change and redistribute it. >>>>> There is NO WARRANTY, to the extent permitted by law. >>>>> Type "show copying" and "show warranty" for details. >>>>> This GDB was configured as "x86_64-redhat-linux-gnu". >>>>> Type "show configuration" for configuration details. >>>>> For bug reporting instructions, please see: >>>>> <https://www.gnu.org/software/gdb/bugs/> <https://www.gnu.org/software/gdb/bugs/>. >>>>> Find the GDB manual and other documentation resources online at: >>>>> <http://www.gnu.org/software/gdb/documentation/> <http://www.gnu.org/software/gdb/documentation/>. >>>>> >>>>> For help, type "help". >>>>> Type "apropos word" to search for commands related to "word"... >>>>> Reading symbols from python3.10... >>>>> Reading symbols from /home/barry/.cache/debuginfod_client/5ba318aef33a2277a4c3e2fef48addf050553288/debuginfo... >>>>> (gdb) import simple >>>>> Undefined command: "import". Try "help". >>>>> (gdb) run >>>>> Starting program: /usr/bin/python3.10 >>>>> [Thread debugging using libthread_db enabled] >>>>> Using host libthread_db library "/lib64/libthread_db.so.1". >>>>> Python 3.10.13 (main, Aug 28 2023, 00:00:00) [GCC 13.2.1 20230728 (Red Hat 13.2.1-1)] on linux >>>>> Type "help", "copyright", "credits" or "license" for more information. >>>>> >>> import simple >>>>> sizeof(int) 4 >>>>> sizeof(long) 8 >>>>> sizeof(Py_hash_t) 8 >>>>> sizeof(Py_ssize_t) 8 >>>>> >>> def callback_bad( arg ): >>>>> ... raise ValueError( 'callback_bad error' ) >>>>> ... >>>>> >>> simple.func_with_callback( callback_bad, 'fred' ) >>>>> Traceback (most recent call last): >>>>> File "<stdin>", line 1, in <module> >>>>> File "<stdin>", line 2, in callback_bad >>>>> ValueError: callback_bad error >>>>> >>> >>>>> >>>>> >>>>>> >>>>>> >>>>>> _______________________________________________ >>>>>> CXX-Users mailing list >>>>>> CXX...@li... <mailto:CXX...@li...> >>>>>> https://lists.sourceforge.net/lists/listinfo/cxx-users >>>>> _______________________________________________ >>>>> CXX-Users mailing list >>>>> CXX...@li... <mailto:CXX...@li...> >>>>> https://lists.sourceforge.net/lists/listinfo/cxx-users >> _______________________________________________ >> CXX-Users mailing list >> CXX...@li... >> https://lists.sourceforge.net/lists/listinfo/cxx-users > > _______________________________________________ > CXX-Users mailing list > CXX...@li... > https://lists.sourceforge.net/lists/listinfo/cxx-users |