Skip to content

Solaris 11.4.81.193 detects sigsetjmp/siglongjmp between threads and aborts

Host environment

  • Operating system: Solaris 11
  • OS/kernel version: 11.4.81.193.1
  • Architecture: SPARC
  • QEMU flavor: all
  • QEMU version: 10.1.50 (v10.1.0-924-g81e3121bef-dirty)
  • QEMU command line:
    ./qemu-system-x86_64 -cdrom FreeBSD-14.3-RELEASE-amd64-bootonly.iso nhb.qcow2

Emulated/Virtualized environment

  • Operating system:
  • OS/kernel version:
  • Architecture:

Description of problem

Solaris 11.4 now detects setjmp/longjmp attempting to switch between threads and aborts the process, breaking the QEMU co-routine design. QEMU was compiled on this system with gcc-14.2.0. There does not seem to be an option to disable detection of this error.

Steps to reproduce

  1. Attempt to start any qemu on a current Solaris

Additional information

Starting program: /opt/qemu/build/qemu-system-x86_64 -cdrom /expool/qemuimages/FreeBSD-14.3-RELEASE-amd64-bootonly.iso /var/tmp/nhb.qcow2
[Thread debugging using libthread_db enabled]
warning: could not convert 'mutex_t' from the host encoding (ISO-8859-1) to UTF-32.
This normally should not happen, please file a bug report.
[New LWP    2        ]
[New LWP    3        ]
[New LWP    4        ]
[New Thread 1 (LWP 1)]
[New LWP    5        ]
Authorization required, but no authorization protocol specified

[New LWP    6        ]
[New LWP    7        ]
[New LWP    8        ]
[New LWP    9        ]
[New LWP    10        ]
[New LWP    11        ]
[New LWP    12        ]
[New LWP    13        ]
[New LWP    14        ]
[New LWP    15        ]
[New LWP    16        ]
[New LWP    17        ]
[New LWP    18        ]
[New LWP    19        ]
[New LWP    20        ]
[New LWP    21        ]
[New LWP    22        ]
[New LWP    23        ]
[New LWP    24        ]
[New LWP    25        ]
[New LWP    26        ]
[New LWP    27        ]
[New LWP    28        ]
[New LWP    29        ]
[New LWP    30        ]
[New LWP    31        ]
[New LWP    32        ]
[New LWP    33        ]
[New LWP    34        ]
[New LWP    35        ]
[New LWP    36        ]
[New LWP    37        ]
[New LWP    38        ]
siglongjmp(8407abc8) from thread 1 tries to jump to stack of thread 5
[New Thread 2          ]
[New Thread 3 (LWP 3)]
[New Thread 4          ]
[New Thread 5          ]
[New Thread 6          ]
[New Thread 7          ]
[New Thread 8          ]
[New Thread 9          ]
[New Thread 10          ]
[New Thread 11          ]
[New Thread 12          ]
[New Thread 13          ]
[New Thread 14          ]
[New Thread 15          ]
[New Thread 16          ]
[New Thread 17          ]
[New Thread 18          ]
[New Thread 19          ]
[New Thread 20          ]
[New Thread 21          ]
[New Thread 22          ]
[New Thread 23          ]
[New Thread 24          ]
[New Thread 25          ]
[New Thread 26          ]
[New Thread 27          ]
[New Thread 28          ]
[New Thread 29          ]
[New Thread 30          ]
[New Thread 31          ]
[New Thread 32          ]
[New Thread 33          ]
[New Thread 34          ]
[New Thread 35          ]
[New Thread 36          ]
[New Thread 37          ]
[New Thread 38          ]

Thread 5 received signal SIGABRT, Aborted.
[Switching to Thread 1 (LWP 1)]
0xffffffff7cccb168 in __lwp_sigqueue () from /usr/lib/sparcv9/libc.so.1
(gdb) bt
#0  0xffffffff7cccb168 in __lwp_sigqueue () at /usr/lib/sparcv9/libc.so.1
#1  0xffffffff7cc19054 in raise () at /usr/lib/sparcv9/libc.so.1
#2  0xffffffff7cbe93e4 in abort () at /usr/lib/sparcv9/libc.so.1
#3  0xffffffff7cbea334 in abort_bad_siglongjmp () at /usr/lib/sparcv9/libc.so.1
#4  0xffffffff7cbdab40 in siglongjmp () at /usr/lib/sparcv9/libc.so.1
#5  0xffffffff7e1ec9f0 in qemu_coroutine_switch (from_=0x0, to_=0x8407ab60, action=COROUTINE_ENTER)
    at ../util/coroutine-ucontext.c:329
#6  0xffffffff7e1eb0b4 in qemu_aio_coroutine_enter (ctx=0x8009d100, co=<optimized out>) at ../util/qemu-coroutine.c:293
#7  0xffffffff7e1ecf7c in thread_pool_completion_bh (opaque=0x802cff10) at ../util/thread-pool.c:200
#8  0xffffffff7e1e8edc in aio_bh_call (bh=0x802cffc0) at ../util/async.c:172
#9  0xffffffff7e1e9028 in aio_bh_poll (ctx=0x8009d100) at ../util/async.c:219
#10 0xffffffff7e1ce418 in aio_dispatch (ctx=0x8009d100) at ../util/aio-posix.c:436
#11 0xffffffff7e1e8c84 in aio_ctx_dispatch (source=<optimized out>, callback=0x0, user_data=0x0) at ../util/async.c:361
#12 0xffffffff632e3020 in g_main_context_dispatch () at /usr/lib/sparcv9/libglib-2.0.so.0
#13 0xffffffff7e1ea97c in glib_pollfds_poll () at ../util/main-loop.c:290
#14 os_host_main_loop_wait (timeout=17647148) at ../util/main-loop.c:313
#15 main_loop_wait (nonblocking=<optimized out>) at ../util/main-loop.c:592
#16 0xffffffff7ddf62d0 in qemu_main_loop () at ../system/runstate.c:905
#17 0xffffffff7e107714 in qemu_default_main (opaque=0x0) at ../system/main.c:50
#18 0xffffffff7e1077fc in main (argc=4, argv=0xffffffff7ffff668) at ../system/main.c:93
(gdb) 
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information