示例#1
0
/* Output an error message to stderr, and exit.  STR is printed with the
   failure message.  */
static void
__heap_check_failure (struct heap *heap, struct heap_free_area *fa,
		      const char *str, char *fmt, ...)
{
  va_list val;

  if (str)
    fprintf (stderr, "\nHEAP CHECK FAILURE %s: ", str);
  else
    fprintf (stderr, "\nHEAP CHECK FAILURE: ");

  va_start (val, fmt);
  vfprintf (stderr, fmt, val);
  va_end (val);

  putc ('\n', stderr);

#ifdef MALLOC_DEBUGGING
  __malloc_debug_set_indent (0);
  __malloc_debug_printf (1, "heap dump:");
#endif
  __heap_dump_freelist (heap);

  exit (22);
}
示例#2
0
static void
__heap_dump_freelist (struct heap_free_area *heap)
{
  struct heap_free_area *fa;
  for (fa = heap; fa; fa = fa->next)
    __malloc_debug_printf (0,
			   "0x%lx:  0x%lx - 0x%lx  (%d)\tP=0x%lx, N=0x%lx",
			   (long)fa,
			   (long)HEAP_FREE_AREA_START (fa),
			   (long)HEAP_FREE_AREA_END (fa),
			   fa->size,
			   (long)fa->prev,
			   (long)fa->next);
}
示例#3
0
static void
__heap_dump_freelist (struct heap *heap)
{
#ifdef MALLOC_DEBUGGING
  struct heap_free_area *fa;

  for (fa = heap->free_areas; fa; fa = fa->next)
    __malloc_debug_printf (0,
			   "0x%lx:  0x%lx - 0x%lx  (%d)\tP=0x%lx, N=0x%lx",
			   (long)fa,
			   (long)HEAP_FREE_AREA_START (fa),
			   (long)HEAP_FREE_AREA_END (fa),
			   fa->size,
			   (long)fa->prev,
			   (long)fa->next);
#endif
}
示例#4
0
/* Output a text representation of HEAP to stderr, labelling it with STR.  */
void
__heap_dump (struct heap_free_area *heap, const char *str)
{
  static smallint recursed;

  if (! recursed)
    {
      __heap_check (heap, str);

      recursed = 1;

      __malloc_debug_printf (1, "%s: heap @0x%lx:", str, (long)heap);
      __heap_dump_freelist (heap);
      __malloc_debug_indent (-1);

      recursed = 0;
    }
}
示例#5
0
/* Output a text representation of HEAP to stderr, labelling it with STR.  */
void
__heap_dump (struct heap *heap, const char *str)
{
  static int recursed = 0;

  if (! recursed)
    {
      __heap_check (heap, str);

      recursed = 1;

#ifdef MALLOC_DEBUGGING
      __malloc_debug_printf (1, "%s: heap @0x%lx:", str, (long)heap);
#endif
      __heap_dump_freelist (heap);
#ifdef MALLOC_DEBUGGING
      __malloc_debug_indent (-1);
#endif

      recursed = 0;
    }
}
示例#6
0
/* Output an error message to stderr, and exit.  STR is printed with the
   failure message.  */
static void attribute_noreturn
__heap_check_failure (struct heap_free_area *heap, struct heap_free_area *fa,
		      const char *str, char *fmt, ...)
{
  va_list val;

  if (str)
    fprintf (stderr, "\nHEAP CHECK FAILURE %s: ", str);
  else
    fprintf (stderr, "\nHEAP CHECK FAILURE: ");

  va_start (val, fmt);
  vfprintf (stderr, fmt, val);
  va_end (val);

  fprintf (stderr, "\n");

  __malloc_debug_set_indent (0);
  __malloc_debug_printf (1, "heap dump:");
  __heap_dump_freelist (heap);

  _exit (22);
}