It doesn't look like my initial attachment was saved, so I'm attaching it again. This is a minimal example program that recreates the issue with the shared library.
** Attachment added: "Minimal example program to recreate issue" https://bugs.launchpad.net/ubuntu/+source/vectorscan/+bug/2064951/+attachment/5775554/+files/vectorscan_segfault.c ** Description changed: I have recreated this on both Ubuntu 22.04 and 24.04 on multiple ARM64 environments. This was initially encountered in a Python application that uses ctypes to interface with the shared vectorscan library. The back trace for the seg fault is below. Program received signal SIGSEGV, Segmentation fault. ue2::shellHasOnePath<boost::iterator_range<ue2::ue2_graph<ue2::NGHolder, ue2::NFAGraphVertexProps, ue2::NFAGraphEdgeProps>::adjacency_iterator> (*)(ue2::graph_detail::vertex_descriptor<ue2::ue2_graph<ue2::NGHolder, ue2::NFAGraphVertexProps, ue2::NFAGraphEdgeProps> > const&, ue2::NGHolder const&)> (adj_range_func=<optimized out>, shell=..., g=...) at ./src/nfagraph/ng_calc_components.cpp:232 Download failed: Invalid argument. Continuing without source file ./obj-aarch64-linux-gnu/./src/nfagraph/ng_calc_components.cpp. 232 ./src/nfagraph/ng_calc_components.cpp: No such file or directory. (gdb) bt #0 ue2::shellHasOnePath<boost::iterator_range<ue2::ue2_graph<ue2::NGHolder, ue2::NFAGraphVertexProps, ue2::NFAGraphEdgeProps>::adjacency_iterator> (*)(ue2::graph_detail::vertex_descriptor<ue2::ue2_graph<ue2::NGHolder, ue2::NFAGraphVertexProps, ue2::NFAGraphEdgeProps> > const&, ue2::NGHolder const&)> (adj_range_func=<optimized out>, shell=..., g=...) at ./src/nfagraph/ng_calc_components.cpp:232 #1 ue2::shellHasOnePath (tail_shell=..., head_shell=..., g=...) at ./src/nfagraph/ng_calc_components.cpp:257 #2 ue2::splitIntoComponents (g=std::unique_ptr<ue2::NGHolder> = {...}, comps=std::deque with 0 elements, max_head_depth=..., - max_tail_depth=..., shell_comp=shell_comp@entry=0xffffffffc6cf) at ./src/nfagraph/ng_calc_components.cpp:306 + max_tail_depth=..., shell_comp=shell_comp@entry=0xffffffffc6cf) at ./src/nfagraph/ng_calc_components.cpp:306 #3 0x0000fffff638c774 in ue2::calcComponents (g=..., grey=...) at ./src/util/depth.h:80 #4 0x0000fffff632cf00 in ue2::NG::addGraph (g_ptr=..., expr=..., this=0xffffffffcc28) at ./src/nfagraph/ng.cpp:470 #5 ue2::addExpression (ng=..., index=index@entry=0, expression=<optimized out>, flags=<optimized out>, ext=ext@entry=0x0, id=<optimized out>) - at ./src/compiler/compiler.cpp:384 + at ./src/compiler/compiler.cpp:384 #6 0x0000fffff632f060 in ue2::hs_compile_multi_int (expressions=0xaaaaab757930, flags=0xaaaaab6fcac0, ids=0xaaaaab658ab0, ext=ext@entry=0x0, - elements=5778, mode=<optimized out>, platform=platform@entry=0x0, db=0xfffff5736410, comp_error=0xfffff5736510, g=...) at ./src/hs.cpp:242 + elements=5778, mode=<optimized out>, platform=platform@entry=0x0, db=0xfffff5736410, comp_error=0xfffff5736510, g=...) at ./src/hs.cpp:242 #7 0x0000fffff632f644 in hs_compile_multi (expressions=<optimized out>, flags=<optimized out>, ids=<optimized out>, elements=<optimized out>, - mode=<optimized out>, platform=0x0, db=<optimized out>, error=<optimized out>) at ./src/hs.cpp:441 + mode=<optimized out>, platform=0x0, db=<optimized out>, error=<optimized out>) at ./src/hs.cpp:441 #8 0x0000fffff6836e10 in ffi_call_SYSV () at ../src/aarch64/sysv.S:127 #9 0x0000fffff6833a94 in ffi_call_int (cif=0xffffffffd588, fn=<optimized out>, orig_rvalue=<optimized out>, avalue=0xffffffffd380, - closure=<optimized out>) at ../src/aarch64/ffi.c:762 + closure=<optimized out>) at ../src/aarch64/ffi.c:762 #10 0x0000fffff68621c8 in ?? () from /usr/lib/python3.10/lib-dynload/_ctypes.cpython-310-aarch64-linux-gnu.so #11 0x0000fffff6860974 in ?? () from /usr/lib/python3.10/lib-dynload/_ctypes.cpython-310-aarch64-linux-gnu.so #12 0x0000aaaaaab9aca0 in _PyObject_MakeTpCall () #13 0x0000aaaaaab91af4 in _PyEval_EvalFrameDefault () #14 0x0000aaaaaaba5348 in _PyFunction_Vectorcall () #15 0x0000aaaaaab8e2ac in _PyEval_EvalFrameDefault () #16 0x0000aaaaaaba5348 in _PyFunction_Vectorcall () #17 0x0000aaaaaab8d3f8 in _PyEval_EvalFrameDefault () #18 0x0000aaaaaaba5348 in _PyFunction_Vectorcall () #19 0x0000aaaaaab8d3f8 in _PyEval_EvalFrameDefault () #20 0x0000aaaaaaba5348 in _PyFunction_Vectorcall () #21 0x0000aaaaaab9177c in _PyEval_EvalFrameDefault () #22 0x0000aaaaaaba5348 in _PyFunction_Vectorcall () #23 0x0000aaaaaab8d3f8 in _PyEval_EvalFrameDefault () #24 0x0000aaaaaaba5348 in _PyFunction_Vectorcall () #25 0x0000aaaaaab8d3f8 in _PyEval_EvalFrameDefault () #26 0x0000aaaaaabb4148 in ?? () #27 0x0000aaaaaab8e2ac in _PyEval_EvalFrameDefault () #28 0x0000aaaaaaba5348 in _PyFunction_Vectorcall () #29 0x0000aaaaaab8d3f8 in _PyEval_EvalFrameDefault () #30 0x0000aaaaaaba5348 in _PyFunction_Vectorcall () #31 0x0000aaaaaab8d3f8 in _PyEval_EvalFrameDefault () #32 0x0000aaaaaaba5348 in _PyFunction_Vectorcall () #33 0x0000aaaaaab8d2bc in _PyEval_EvalFrameDefault () #34 0x0000aaaaaac89760 in ?? () #35 0x0000aaaaaac895e4 in PyEval_EvalCode () #36 0x0000aaaaaac9186c in ?? () #37 0x0000aaaaaaba559c in ?? () #38 0x0000aaaaaab8d2bc in _PyEval_EvalFrameDefault () #39 0x0000aaaaaaba5348 in _PyFunction_Vectorcall () #40 0x0000aaaaaab8d2bc in _PyEval_EvalFrameDefault () #41 0x0000aaaaaaba5348 in _PyFunction_Vectorcall () #42 0x0000aaaaaacad824 in ?? () #43 0x0000aaaaaacabe90 in Py_RunMain () #44 0x0000aaaaaac7a748 in Py_BytesMain () #45 0x0000fffff7d273fc in __libc_start_call_main (main=main@entry=0xaaaaaac7a720, argc=argc@entry=9, argv=argv@entry=0xfffffffff358) - at ../sysdeps/nptl/libc_start_call_main.h:58 + at ../sysdeps/nptl/libc_start_call_main.h:58 #46 0x0000fffff7d274cc in __libc_start_main_impl (main=0xaaaaaac7a720, argc=9, argv=0xfffffffff358, init=<optimized out>, fini=<optimized out>, - rtld_fini=<optimized out>, stack_end=<optimized out>) at ../csu/libc-start.c:392 + rtld_fini=<optimized out>, stack_end=<optimized out>) at ../csu/libc-start.c:392 #47 0x0000aaaaaac7a630 in _start () When manually building/installing the exact same version of vectorscan on the same host (from the original source at https://github.com/VectorCamp/vectorscan), no seg fault occurs and this works as expected. As far as I can tell, this seg fault is an internal issue with the build of the library rather than an issue with the invocation thereof. I've put together a minimal example that recreates it (see attached). To recreate, install libvectorscan5 and libvectorscan5-dev, then build the attached example program (clang -o vectorscan_segfault vectorscan_segfault.c -l hs). Invoking vectorscan_segfault will trigger a seg fault during the invocation of hs_compile_multi. Running this same - code against a manual build of the same version of vectorscan on ARM on - x86 with libhyperscan5 without issue. I also tested against + code against a manual build of the same version of vectorscan on ARM or + x86 with libhyperscan5 works without issue. I also tested against libvectorscan5 on Debian 12 and 13 and everything works as expected there, so it appears to be specific to the Ubuntu variant of the package. -- You received this bug notification because you are a member of Ubuntu Bugs, which is subscribed to Ubuntu. https://bugs.launchpad.net/bugs/2064951 Title: Seg fault in libvectorscan5 hs_compile_multi on ARM64 To manage notifications about this bug go to: https://bugs.launchpad.net/ubuntu/+source/vectorscan/+bug/2064951/+subscriptions -- ubuntu-bugs mailing list ubuntu-bugs@lists.ubuntu.com https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs