Commit 479a5747 authored by Roman Bolshakov's avatar Roman Bolshakov Committed by Peter Maydell
Browse files

util: Implement debug-threads for macOS



macOS provides pthread_setname_np that doesn't have thread id argument.

Signed-off-by: default avatarRoman Bolshakov <r.bolshakov@yadro.com>
Reviewed-by: default avatarDaniel P. Berrangé <berrange@redhat.com>
Signed-off-by: default avatarPeter Maydell <peter.maydell@linaro.org>
parent 16bf5234
Loading
Loading
Loading
Loading
+26 −6
Original line number Diff line number Diff line
@@ -3721,8 +3721,8 @@ if test "$mingw32" != yes -a "$pthread" = no; then
      "Make sure to have the pthread libs and headers installed."
fi

# check for pthread_setname_np
pthread_setname_np=no
# check for pthread_setname_np with thread id
pthread_setname_np_w_tid=no
cat > $TMPC << EOF
#include <pthread.h>

@@ -3736,7 +3736,24 @@ int main(void)
}
EOF
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

##########################################
@@ -6889,11 +6906,14 @@ fi
# Hold two types of flag:
#   CONFIG_THREAD_SETNAME_BYTHREAD  - we've got a way of setting the name on
#                                     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
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_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=y" >> $config_host_mak
  echo "CONFIG_PTHREAD_SETNAME_NP_WO_TID=y" >> $config_host_mak
fi

if test "$vxhs" = "yes" ; then
+2 −2
Original line number Diff line number Diff line
@@ -538,8 +538,8 @@ ETEXI
DEF("name", HAS_ARG, QEMU_OPTION_name,
    "-name string1[,process=string2][,debug-threads=on|off]\n"
    "                set the name of the guest\n"
    "                string1 sets the window title and string2 the process name (on Linux)\n"
    "                When debug-threads is enabled, individual threads are given a separate 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\n"
    "                NOTE: The thread names are for debugging and not a stable API.\n",
    QEMU_ARCH_ALL)
STEXI
+5 −1
Original line number Diff line number Diff line
@@ -484,12 +484,16 @@ static void *qemu_thread_start(void *args)
    void *arg = qemu_thread_args->arg;
    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
     * we're not going to fail if we can't set it.
     */
    if (name_threads && qemu_thread_args->name) {
# if defined(CONFIG_PTHREAD_SETNAME_NP_W_TID)
        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
    g_free(qemu_thread_args->name);