+ WORD_WIDTH + 6);
+ WORD_WIDTH + 5);
__backtrace_symbols (array, size)     void *const *array;     int size;{  Dl_info info[size];  int status[size];  int cnt;  size_t total = 0;  char **result;  /* Fill in the information we can get from `dladdr'.  */  for (cnt = 0; cnt < size; ++cnt)    {      status[cnt] = _dl_addr (array[cnt], &info[cnt]);      if (status[cnt] && info[cnt].dli_fname && info[cnt].dli_fname[0] != '\0')	/* We have some info, compute the length of the string which will be	   "<fct-name>(<sym-name>)[+offset].  */	total += (strlen (info[cnt].dli_fname ?: "")		  + (info[cnt].dli_sname		     ? strlen (info[cnt].dli_sname) + 3 + WORD_WIDTH + 3		     : 1)		  + WORD_WIDTH + 6);      else	total += 6 + WORD_WIDTH;    }  /* Allocate memory for the result.  */  result = malloc (size * sizeof (char *) + total);  if (result != NULL)    {      char *last = (char *) (result + size);      for (cnt = 0; cnt < size; ++cnt)	{	  result[cnt] = last;	  if (status[cnt] && info[cnt].dli_fname	      && info[cnt].dli_fname[0] != '\0')	    {	      char buf[20];	      if (array[cnt] >= (void *) info[cnt].dli_saddr)		sprintf (buf, "+0x%x", array[cnt] - info[cnt].dli_saddr);	      else		sprintf (buf, "-0x%x", info[cnt].dli_saddr - array[cnt]);	      last += 1 + sprintf (last, "%s%s%s%s%s[+%p]",				   info[cnt].dli_fname ?: "",				   info[cnt].dli_sname ? "(" : "",				   info[cnt].dli_sname ?: "",				   info[cnt].dli_sname ? buf : "",				   info[cnt].dli_sname ? ") " : " ",				   array[cnt]);	    }	  else	    last += 1 + sprintf (last, "[+%p]", array[cnt]);	}    }  return result;}