if (ps_pglobal_lookup (ps, "libpthread.so.0", "pthread_keys",
if (ps_pglobal_lookup (ps, LIBPTHREAD_SO, "pthread_keys",
td_ta_new (struct ps_prochandle *ps, td_thragent_t **ta){  psaddr_t addr;  LOG (__FUNCTION__);  /* See whether the library contains the necessary symbols.  */  if (ps_pglobal_lookup (ps, "libpthread.so.0", "__pthread_threads_debug",		         &addr) != PS_OK)    return TD_LIBTHREAD;  /* Fill in the appropriate information.  */  *ta = (td_thragent_t *) malloc (sizeof (td_thragent_t));  if (*ta == NULL)    return TD_MALLOC;  /* Store the proc handle which we will pass to the callback functions     back into the debugger.  */  (*ta)->ph = ps;  /* See whether the library contains the necessary symbols.  */  if (ps_pglobal_lookup (ps, "libpthread.so.0", "__pthread_handles",		         &addr) != PS_OK)    {    free_return:      free (*ta);      return TD_ERR;    }  (*ta)->handles = (struct pthread_handle_struct *) addr;  if (ps_pglobal_lookup (ps, "libpthread.so.0", "pthread_keys",		         &addr) != PS_OK)    goto free_return;  /* Cast to the right type.  */  (*ta)->keys = (struct pthread_key_struct *) addr;  /* Find out about the maximum number of threads.  Old implementations     don't provide this information.  In this case we assume that the     debug  library is compiled with the same values.  */  if (ps_pglobal_lookup (ps, "libpthread.so.0",			 "__linuxthreads_pthread_threads_max", &addr) != PS_OK)    (*ta)->pthread_threads_max = PTHREAD_THREADS_MAX;  else    {      if (ps_pdread (ps, addr, &(*ta)->pthread_threads_max, sizeof (int))	  != PS_OK)	goto free_return;    }  /* Similar for the maximum number of thread local data keys.  */  if (ps_pglobal_lookup (ps, "libpthread.so.0",			 "__linuxthreads_pthread_keys_max", &addr) != PS_OK)    (*ta)->pthread_keys_max = PTHREAD_KEYS_MAX;  else    {      if (ps_pdread (ps, addr, &(*ta)->pthread_keys_max, sizeof (int))	  != PS_OK)	goto free_return;    }  /* And for the size of the second level arrays for the keys.  */  if (ps_pglobal_lookup (ps, "libpthread.so.0",			 "__linuxthreads_pthread_sizeof_descr", &addr)      != PS_OK)    (*ta)->sizeof_descr = offsetof (struct _pthread_descr_struct, p_startfct);  else    {      if (ps_pdread (ps, addr, &(*ta)->sizeof_descr, sizeof (int)) != PS_OK)	goto free_return;    }  /* Similar for the maximum number of thread local data keys.  */  if (ps_pglobal_lookup (ps, "libpthread.so.0",			 "__linuxthreads_pthread_keys_max", &addr) != PS_OK)    (*ta)->pthread_keys_max = PTHREAD_KEYS_MAX;  else    {      if (ps_pdread (ps, addr, &(*ta)->pthread_keys_max, sizeof (int))	  != PS_OK)	goto free_return;    }  return TD_OK;}