]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Merge branch 'master' into dj/malloc
authorDJ Delorie <dj@delorie.com>
Fri, 29 Apr 2016 19:07:11 +0000 (15:07 -0400)
committerDJ Delorie <dj@delorie.com>
Fri, 29 Apr 2016 19:07:11 +0000 (15:07 -0400)
Periodic sync

1  2 
malloc/malloc.c

diff --cc malloc/malloc.c
index acd7170f0d1c4c9b990869e431b7d96b68a1fab2,ea97df2cb4b18017bcd0c7278b85b227d6c9f720..c020fa2b9865a7099031bde76bfd46cd964f8df5
@@@ -1089,84 -1074,7 +1090,82 @@@ static void*   realloc_check(void* oldm
                               const void *caller);
  static void*   memalign_check(size_t alignment, size_t bytes,
                                const void *caller);
- static void*   malloc_atfork(size_t sz, const void *caller);
- static void      free_atfork(void* mem, const void *caller);
  
 +/* ------------------ TRACE support ------------------  */
 +#define USE_MTRACE 1
 +#if USE_MTRACE
 +#include "mtrace.h"
 +
 +volatile __malloc_trace_buffer_ptr __malloc_trace_buffer = NULL;
 +volatile size_t __malloc_trace_buffer_size = 0;
 +volatile size_t __malloc_trace_buffer_head = 0;
 +
 +static __thread __malloc_trace_buffer_ptr trace_ptr;
 +
 +static void
 +__mtb_trace_entry (uint32_t type, int64_t size, void *ptr1)
 +{
 +  size_t head1;
 +
 +  head1 = catomic_exchange_and_add (&__malloc_trace_buffer_head, 1);
 +
 +  trace_ptr = __malloc_trace_buffer + (head1 % __malloc_trace_buffer_size);
 +
 +  trace_ptr->thread = syscall(__NR_gettid);
 +  trace_ptr->type = type;
 +  trace_ptr->path_thread_cache = 0;
 +  trace_ptr->path_cpu_cache = 0;
 +  trace_ptr->path_cpu_cache2 = 0;
 +  trace_ptr->path_sbrk = 0;
 +  trace_ptr->path_mmap = 0;
 +  trace_ptr->path_munmap = 0;
 +  trace_ptr->path_m_f_realloc = 0;
 +  trace_ptr->path = 0;
 +  trace_ptr->size = size;
 +  trace_ptr->ptr1 = (uint64_t) ptr1;
 +  trace_ptr->ptr2 = 0;
 +}
 +
 +int
 +__malloc_set_trace_buffer (void *bufptr, size_t bufsize)
 +{
 +  __malloc_trace_buffer = 0;
 +  __malloc_trace_buffer_size = bufsize / sizeof(struct __malloc_trace_buffer_s);
 +  __malloc_trace_buffer_head = 0;
 +  __malloc_trace_buffer = (__malloc_trace_buffer_ptr) bufptr;
 +  return sizeof(struct __malloc_trace_buffer_s);
 +}
 +
 +void *
 +__malloc_get_trace_buffer (size_t *bufcount, size_t *bufhead)
 +{
 +  if (bufcount)
 +    *bufcount = __malloc_trace_buffer_size;
 +  if (bufhead)
 +    *bufhead = __malloc_trace_buffer_head;
 +  return __malloc_trace_buffer;
 +}
 +
 +#define __MTB_TRACE_ENTRY(type,size,ptr1)                \
 +  if (__builtin_expect (__malloc_trace_buffer != NULL, 0)) \
 +    __mtb_trace_entry (__MTB_TYPE_##type,size,ptr1);                     \
 +  else                                                           \
 +    trace_ptr = 0;
 +
 +#define __MTB_TRACE_PATH(mpath)                      \
 +  if (__builtin_expect (trace_ptr != NULL, 1)) \
 +    trace_ptr->path_##mpath = 1;
 +
 +#define __MTB_TRACE_SET(var,value) \
 +  if (__builtin_expect (trace_ptr != NULL, 1)) \
 +    trace_ptr->var = (uint64_t) value;
 +
 +#else
 +#define __MTB_TRACE_ENTRY(type,size,ptr1)
 +#define __MTB_TRACE_PATH(mpath)
 +#define __MTB_TRACE_SET(var,value)
 +#endif
 +
  /* ------------------ MMAP support ------------------  */