util: Implement debug-threads for macOS
macOS provides pthread_setname_np that doesn't have thread id argument. Signed-off-by: Roman Bolshakov <r.bolshakov@yadro.com> Reviewed-by: Daniel P. Berrangé <berrange@redhat.com> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
parent
16bf52346d
commit
479a57475e
32
configure
vendored
32
configure
vendored
@ -3721,8 +3721,8 @@ if test "$mingw32" != yes -a "$pthread" = no; then
|
|||||||
"Make sure to have the pthread libs and headers installed."
|
"Make sure to have the pthread libs and headers installed."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# check for pthread_setname_np
|
# check for pthread_setname_np with thread id
|
||||||
pthread_setname_np=no
|
pthread_setname_np_w_tid=no
|
||||||
cat > $TMPC << EOF
|
cat > $TMPC << EOF
|
||||||
#include <pthread.h>
|
#include <pthread.h>
|
||||||
|
|
||||||
@ -3736,7 +3736,24 @@ int main(void)
|
|||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
if compile_prog "" "$pthread_lib" ; then
|
if compile_prog "" "$pthread_lib" ; then
|
||||||
pthread_setname_np=yes
|
pthread_setname_np_w_tid=yes
|
||||||
|
fi
|
||||||
|
|
||||||
|
# check for pthread_setname_np without thread id
|
||||||
|
pthread_setname_np_wo_tid=no
|
||||||
|
cat > $TMPC << EOF
|
||||||
|
#include <pthread.h>
|
||||||
|
|
||||||
|
static void *f(void *p) { pthread_setname_np("QEMU"); }
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
pthread_t thread;
|
||||||
|
pthread_create(&thread, 0, f, 0);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
if compile_prog "" "$pthread_lib" ; then
|
||||||
|
pthread_setname_np_wo_tid=yes
|
||||||
fi
|
fi
|
||||||
|
|
||||||
##########################################
|
##########################################
|
||||||
@ -6889,11 +6906,14 @@ fi
|
|||||||
# Hold two types of flag:
|
# Hold two types of flag:
|
||||||
# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
|
# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
|
||||||
# a thread we have a handle to
|
# a thread we have a handle to
|
||||||
# CONFIG_PTHREAD_SETNAME_NP - A way of doing it on a particular
|
# CONFIG_PTHREAD_SETNAME_NP_W_TID - A way of doing it on a particular
|
||||||
# platform
|
# platform
|
||||||
if test "$pthread_setname_np" = "yes" ; then
|
if test "$pthread_setname_np_w_tid" = "yes" ; then
|
||||||
echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
|
echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
|
||||||
echo "CONFIG_PTHREAD_SETNAME_NP=y" >> $config_host_mak
|
echo "CONFIG_PTHREAD_SETNAME_NP_W_TID=y" >> $config_host_mak
|
||||||
|
elif test "$pthread_setname_np_wo_tid" = "yes" ; then
|
||||||
|
echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
|
||||||
|
echo "CONFIG_PTHREAD_SETNAME_NP_WO_TID=y" >> $config_host_mak
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test "$vxhs" = "yes" ; then
|
if test "$vxhs" = "yes" ; then
|
||||||
|
@ -538,8 +538,8 @@ ETEXI
|
|||||||
DEF("name", HAS_ARG, QEMU_OPTION_name,
|
DEF("name", HAS_ARG, QEMU_OPTION_name,
|
||||||
"-name string1[,process=string2][,debug-threads=on|off]\n"
|
"-name string1[,process=string2][,debug-threads=on|off]\n"
|
||||||
" set the name of the guest\n"
|
" set the name of the guest\n"
|
||||||
" string1 sets the window title and string2 the process name (on Linux)\n"
|
" string1 sets the window title and string2 the process name\n"
|
||||||
" When debug-threads is enabled, individual threads are given a separate name (on Linux)\n"
|
" When debug-threads is enabled, individual threads are given a separate name\n"
|
||||||
" NOTE: The thread names are for debugging and not a stable API.\n",
|
" NOTE: The thread names are for debugging and not a stable API.\n",
|
||||||
QEMU_ARCH_ALL)
|
QEMU_ARCH_ALL)
|
||||||
STEXI
|
STEXI
|
||||||
|
@ -484,12 +484,16 @@ static void *qemu_thread_start(void *args)
|
|||||||
void *arg = qemu_thread_args->arg;
|
void *arg = qemu_thread_args->arg;
|
||||||
void *r;
|
void *r;
|
||||||
|
|
||||||
#ifdef CONFIG_PTHREAD_SETNAME_NP
|
#ifdef CONFIG_THREAD_SETNAME_BYTHREAD
|
||||||
/* Attempt to set the threads name; note that this is for debug, so
|
/* Attempt to set the threads name; note that this is for debug, so
|
||||||
* we're not going to fail if we can't set it.
|
* we're not going to fail if we can't set it.
|
||||||
*/
|
*/
|
||||||
if (name_threads && qemu_thread_args->name) {
|
if (name_threads && qemu_thread_args->name) {
|
||||||
|
# if defined(CONFIG_PTHREAD_SETNAME_NP_W_TID)
|
||||||
pthread_setname_np(pthread_self(), qemu_thread_args->name);
|
pthread_setname_np(pthread_self(), qemu_thread_args->name);
|
||||||
|
# elif defined(CONFIG_PTHREAD_SETNAME_NP_WO_TID)
|
||||||
|
pthread_setname_np(qemu_thread_args->name);
|
||||||
|
# endif
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
g_free(qemu_thread_args->name);
|
g_free(qemu_thread_args->name);
|
||||||
|
Loading…
Reference in New Issue
Block a user