github.com/afumu/libc@v0.0.6/musl/src/malloc/mallocng/glue.h (about)

     1  #ifndef MALLOC_GLUE_H
     2  #define MALLOC_GLUE_H
     3  
     4  #include <stdint.h>
     5  #include <sys/mman.h>
     6  #include <pthread.h>
     7  #include <unistd.h>
     8  #include <elf.h>
     9  #include <string.h>
    10  #include "atomic.h"
    11  #include "syscall.h"
    12  #include "libc.h"
    13  #include "lock.h"
    14  #include "dynlink.h"
    15  
    16  // use macros to appropriately namespace these.
    17  #define size_classes __malloc_size_classes
    18  #define ctx __malloc_context
    19  #define alloc_meta __malloc_alloc_meta
    20  #define is_allzero __malloc_allzerop
    21  #define dump_heap __dump_heap
    22  
    23  #if USE_REAL_ASSERT
    24  #include <assert.h>
    25  #else
    26  #undef assert
    27  #define assert(x) do { if (!(x)) a_crash(); } while(0)
    28  #endif
    29  
    30  #define brk(p) ((uintptr_t)__syscall(SYS_brk, p))
    31  
    32  #define mmap __mmap
    33  #define madvise __madvise
    34  #define mremap __mremap
    35  
    36  #define DISABLE_ALIGNED_ALLOC (__malloc_replaced && !__aligned_alloc_replaced)
    37  
    38  static inline uint64_t get_random_secret()
    39  {
    40  	uint64_t secret = (uintptr_t)&secret * 1103515245;
    41  	for (size_t i=0; libc.auxv[i]; i+=2)
    42  		if (libc.auxv[i]==AT_RANDOM)
    43  			memcpy(&secret, (char *)libc.auxv[i+1]+8, sizeof secret);
    44  	return secret;
    45  }
    46  
    47  #ifndef PAGESIZE
    48  #define PAGESIZE PAGE_SIZE
    49  #endif
    50  
    51  #define MT (libc.need_locks)
    52  
    53  #define RDLOCK_IS_EXCLUSIVE 1
    54  
    55  __attribute__((__visibility__("hidden")))
    56  extern int __malloc_lock[1];
    57  
    58  #define LOCK_OBJ_DEF \
    59  int __malloc_lock[1];
    60  
    61  static inline void rdlock()
    62  {
    63  	if (MT) LOCK(__malloc_lock);
    64  }
    65  static inline void wrlock()
    66  {
    67  	if (MT) LOCK(__malloc_lock);
    68  }
    69  static inline void unlock()
    70  {
    71  	UNLOCK(__malloc_lock);
    72  }
    73  static inline void upgradelock()
    74  {
    75  }
    76  
    77  #endif