mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-05-28 00:02:28 +00:00
Make emacs not croak when editing dlmalloc
This commit is contained in:
parent
3c7ae0fc72
commit
fa1e8a3e65
21 changed files with 3019 additions and 2985 deletions
94
third_party/dlmalloc/system.inc
vendored
Normal file
94
third_party/dlmalloc/system.inc
vendored
Normal file
|
@ -0,0 +1,94 @@
|
|||
// clang-format off
|
||||
|
||||
/* -------------------------- system alloc setup ------------------------- */
|
||||
|
||||
/* Operations on mflags */
|
||||
|
||||
#define use_lock(M) ((M)->mflags & USE_LOCK_BIT)
|
||||
#define enable_lock(M) ((M)->mflags |= USE_LOCK_BIT)
|
||||
#if USE_LOCKS
|
||||
#define disable_lock(M) ((M)->mflags &= ~USE_LOCK_BIT)
|
||||
#else
|
||||
#define disable_lock(M)
|
||||
#endif
|
||||
|
||||
#define use_mmap(M) ((M)->mflags & USE_MMAP_BIT)
|
||||
#define enable_mmap(M) ((M)->mflags |= USE_MMAP_BIT)
|
||||
#if HAVE_MMAP
|
||||
#define disable_mmap(M) ((M)->mflags &= ~USE_MMAP_BIT)
|
||||
#else
|
||||
#define disable_mmap(M)
|
||||
#endif
|
||||
|
||||
#define use_noncontiguous(M) ((M)->mflags & USE_NONCONTIGUOUS_BIT)
|
||||
#define disable_contiguous(M) ((M)->mflags |= USE_NONCONTIGUOUS_BIT)
|
||||
|
||||
#define set_lock(M,L)\
|
||||
((M)->mflags = (L)?\
|
||||
((M)->mflags | USE_LOCK_BIT) :\
|
||||
((M)->mflags & ~USE_LOCK_BIT))
|
||||
|
||||
/* page-align a size */
|
||||
#define page_align(S)\
|
||||
(((S) + (mparams.page_size - SIZE_T_ONE)) & ~(mparams.page_size - SIZE_T_ONE))
|
||||
|
||||
/* granularity-align a size */
|
||||
#define granularity_align(S)\
|
||||
(((S) + (mparams.granularity - SIZE_T_ONE))\
|
||||
& ~(mparams.granularity - SIZE_T_ONE))
|
||||
|
||||
|
||||
/* For mmap, use granularity alignment on windows, else page-align */
|
||||
#if defined(WIN32) || defined(__COSMOPOLITAN__)
|
||||
#define mmap_align(S) granularity_align(S)
|
||||
#else
|
||||
#define mmap_align(S) page_align(S)
|
||||
#endif
|
||||
|
||||
/* For sys_alloc, enough padding to ensure can malloc request on success */
|
||||
#define SYS_ALLOC_PADDING (TOP_FOOT_SIZE + MALLOC_ALIGNMENT)
|
||||
|
||||
#define is_page_aligned(S)\
|
||||
(((size_t)(S) & (mparams.page_size - SIZE_T_ONE)) == 0)
|
||||
#define is_granularity_aligned(S)\
|
||||
(((size_t)(S) & (mparams.granularity - SIZE_T_ONE)) == 0)
|
||||
|
||||
/* True if segment S holds address A */
|
||||
#define segment_holds(S, A)\
|
||||
((char*)(A) >= S->base && (char*)(A) < S->base + S->size)
|
||||
|
||||
/* Return segment holding given address */
|
||||
static msegmentptr segment_holding(mstate m, char* addr) {
|
||||
msegmentptr sp = &m->seg;
|
||||
for (;;) {
|
||||
if (addr >= sp->base && addr < sp->base + sp->size)
|
||||
return sp;
|
||||
if ((sp = sp->next) == 0)
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
/* Return true if segment contains a segment link */
|
||||
static int has_segment_link(mstate m, msegmentptr ss) {
|
||||
msegmentptr sp = &m->seg;
|
||||
for (;;) {
|
||||
if ((char*)sp >= ss->base && (char*)sp < ss->base + ss->size)
|
||||
return 1;
|
||||
if ((sp = sp->next) == 0)
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
#ifndef MORECORE_CANNOT_TRIM
|
||||
#define should_trim(M,s) ((s) > (M)->trim_check)
|
||||
#else /* MORECORE_CANNOT_TRIM */
|
||||
#define should_trim(M,s) (0)
|
||||
#endif /* MORECORE_CANNOT_TRIM */
|
||||
|
||||
/*
|
||||
TOP_FOOT_SIZE is padding at the end of a segment, including space
|
||||
that may be needed to place segment records and fenceposts when new
|
||||
noncontiguous segments are added.
|
||||
*/
|
||||
#define TOP_FOOT_SIZE\
|
||||
(align_offset(chunk2mem(0))+pad_request(sizeof(struct malloc_segment))+MIN_CHUNK_SIZE)
|
Loading…
Add table
Add a link
Reference in a new issue