| #include <execinfo.h> | 
 | #include <inttypes.h> | 
 | #include <stdio.h> | 
 | #include <stdlib.h> | 
 | #include <stdint.h> | 
 |  | 
 |  | 
 | static int | 
 | compare (const void *p1, const void *p2) | 
 | { | 
 |   void *ba[20]; | 
 |   int n = backtrace (ba, sizeof (ba) / sizeof (ba[0])); | 
 |   if (n != 0) | 
 |     { | 
 |       char **names = backtrace_symbols (ba, n); | 
 |       if (names != NULL) | 
 | 	{ | 
 | 	  int i; | 
 | 	  printf ("called from %s\n", names[0]); | 
 | 	  for (i = 1; i < n; ++i) | 
 | 	    printf ("            %s\n", names[i]); | 
 | 	  free (names); | 
 | 	} | 
 |     } | 
 |  | 
 |   return *(const uint32_t *) p1 - *(const uint32_t *) p2; | 
 | } | 
 |  | 
 |  | 
 | int | 
 | main (int argc, char *argv[]) | 
 | { | 
 |   uint32_t arr[20]; | 
 |   size_t cnt; | 
 |  | 
 |   for (cnt = 0; cnt < sizeof (arr) / sizeof (arr[0]); ++cnt) | 
 |     arr[cnt] = random (); | 
 |  | 
 |   qsort (arr, sizeof (arr) / sizeof (arr[0]), sizeof (arr[0]), compare); | 
 |  | 
 |   for (cnt = 0; cnt < sizeof (arr) / sizeof (arr[0]); ++cnt) | 
 |     printf ("%" PRIx32 "\n", arr[cnt]); | 
 |  | 
 |   return 0; | 
 | } |