Hello,
I am working on compiling QEMU 2.10.2 to a static library.
Everything works fine in compiling QEMU to an execution file(qemu-system-aarch64), but after I link all .o and .a file to create a QEMU library and write a c file to call qemu_main() in qemu/util/vl.c(I have changed the name "main()" into "qemu_main()"), then it shows this error message.
$util/qemu-thread-posix.c: 64: qemu_mutex_lock: Assertion 'mutex->initialized' failed.
Abort (core dumped)
The information of gdb's backtrace is shown as bellow
I found out that it aborted before conducted to the main function in QEMU
Also, I use si and n in gdb to see what happened in this QEMU library
it showed that the address and content of rcu_registry_lock would change when it executed qemu_thread_create() in util/rcu.c:315
$qemu_thread_create(&thread, "cal_rcu", call_rcu_thread, NULL, QEMU_THREAD_DETACHED)
This change caused the failure of assert(mutex->initialized) in qemu_mutex_lock (which called by rcu_register_thread() in call_rcu_thread())
The method that compiling the execution file into a library success on QEMU 2.2.1, but failed on QEMU 2.10.2
Will this error message related to the rcu? Or is there anything suggestion to solve this error?
I will be grateful for any help.
Eva