Simplify calloc implementation.
[platform/upstream/glibc.git] / malloc / malloc.c
1 /* Malloc implementation for multiple threads without lock contention.
2    Copyright (C) 1996-2014 Free Software Foundation, Inc.
3    This file is part of the GNU C Library.
4    Contributed by Wolfram Gloger <wg@malloc.de>
5    and Doug Lea <dl@cs.oswego.edu>, 2001.
6
7    The GNU C Library is free software; you can redistribute it and/or
8    modify it under the terms of the GNU Lesser General Public License as
9    published by the Free Software Foundation; either version 2.1 of the
10    License, or (at your option) any later version.
11
12    The GNU C Library is distributed in the hope that it will be useful,
13    but WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15    Lesser General Public License for more details.
16
17    You should have received a copy of the GNU Lesser General Public
18    License along with the GNU C Library; see the file COPYING.LIB.  If
19    not, see <http://www.gnu.org/licenses/>.  */
20
21 /*
22   This is a version (aka ptmalloc2) of malloc/free/realloc written by
23   Doug Lea and adapted to multiple threads/arenas by Wolfram Gloger.
24
25   There have been substantial changesmade after the integration into
26   glibc in all parts of the code.  Do not look for much commonality
27   with the ptmalloc2 version.
28
29 * Version ptmalloc2-20011215
30   based on:
31   VERSION 2.7.0 Sun Mar 11 14:14:06 2001  Doug Lea  (dl at gee)
32
33 * Quickstart
34
35   In order to compile this implementation, a Makefile is provided with
36   the ptmalloc2 distribution, which has pre-defined targets for some
37   popular systems (e.g. "make posix" for Posix threads).  All that is
38   typically required with regard to compiler flags is the selection of
39   the thread package via defining one out of USE_PTHREADS, USE_THR or
40   USE_SPROC.  Check the thread-m.h file for what effects this has.
41   Many/most systems will additionally require USE_TSD_DATA_HACK to be
42   defined, so this is the default for "make posix".
43
44 * Why use this malloc?
45
46   This is not the fastest, most space-conserving, most portable, or
47   most tunable malloc ever written. However it is among the fastest
48   while also being among the most space-conserving, portable and tunable.
49   Consistent balance across these factors results in a good general-purpose
50   allocator for malloc-intensive programs.
51
52   The main properties of the algorithms are:
53   * For large (>= 512 bytes) requests, it is a pure best-fit allocator,
54     with ties normally decided via FIFO (i.e. least recently used).
55   * For small (<= 64 bytes by default) requests, it is a caching
56     allocator, that maintains pools of quickly recycled chunks.
57   * In between, and for combinations of large and small requests, it does
58     the best it can trying to meet both goals at once.
59   * For very large requests (>= 128KB by default), it relies on system
60     memory mapping facilities, if supported.
61
62   For a longer but slightly out of date high-level description, see
63      http://gee.cs.oswego.edu/dl/html/malloc.html
64
65   You may already by default be using a C library containing a malloc
66   that is  based on some version of this malloc (for example in
67   linux). You might still want to use the one in this file in order to
68   customize settings or to avoid overheads associated with library
69   versions.
70
71 * Contents, described in more detail in "description of public routines" below.
72
73   Standard (ANSI/SVID/...)  functions:
74     malloc(size_t n);
75     calloc(size_t n_elements, size_t element_size);
76     free(void* p);
77     realloc(void* p, size_t n);
78     memalign(size_t alignment, size_t n);
79     valloc(size_t n);
80     mallinfo()
81     mallopt(int parameter_number, int parameter_value)
82
83   Additional functions:
84     independent_calloc(size_t n_elements, size_t size, void* chunks[]);
85     independent_comalloc(size_t n_elements, size_t sizes[], void* chunks[]);
86     pvalloc(size_t n);
87     cfree(void* p);
88     malloc_trim(size_t pad);
89     malloc_usable_size(void* p);
90     malloc_stats();
91
92 * Vital statistics:
93
94   Supported pointer representation:       4 or 8 bytes
95   Supported size_t  representation:       4 or 8 bytes
96        Note that size_t is allowed to be 4 bytes even if pointers are 8.
97        You can adjust this by defining INTERNAL_SIZE_T
98
99   Alignment:                              2 * sizeof(size_t) (default)
100        (i.e., 8 byte alignment with 4byte size_t). This suffices for
101        nearly all current machines and C compilers. However, you can
102        define MALLOC_ALIGNMENT to be wider than this if necessary.
103
104   Minimum overhead per allocated chunk:   4 or 8 bytes
105        Each malloced chunk has a hidden word of overhead holding size
106        and status information.
107
108   Minimum allocated size: 4-byte ptrs:  16 bytes    (including 4 overhead)
109                           8-byte ptrs:  24/32 bytes (including, 4/8 overhead)
110
111        When a chunk is freed, 12 (for 4byte ptrs) or 20 (for 8 byte
112        ptrs but 4 byte size) or 24 (for 8/8) additional bytes are
113        needed; 4 (8) for a trailing size field and 8 (16) bytes for
114        free list pointers. Thus, the minimum allocatable size is
115        16/24/32 bytes.
116
117        Even a request for zero bytes (i.e., malloc(0)) returns a
118        pointer to something of the minimum allocatable size.
119
120        The maximum overhead wastage (i.e., number of extra bytes
121        allocated than were requested in malloc) is less than or equal
122        to the minimum size, except for requests >= mmap_threshold that
123        are serviced via mmap(), where the worst case wastage is 2 *
124        sizeof(size_t) bytes plus the remainder from a system page (the
125        minimal mmap unit); typically 4096 or 8192 bytes.
126
127   Maximum allocated size:  4-byte size_t: 2^32 minus about two pages
128                            8-byte size_t: 2^64 minus about two pages
129
130        It is assumed that (possibly signed) size_t values suffice to
131        represent chunk sizes. `Possibly signed' is due to the fact
132        that `size_t' may be defined on a system as either a signed or
133        an unsigned type. The ISO C standard says that it must be
134        unsigned, but a few systems are known not to adhere to this.
135        Additionally, even when size_t is unsigned, sbrk (which is by
136        default used to obtain memory from system) accepts signed
137        arguments, and may not be able to handle size_t-wide arguments
138        with negative sign bit.  Generally, values that would
139        appear as negative after accounting for overhead and alignment
140        are supported only via mmap(), which does not have this
141        limitation.
142
143        Requests for sizes outside the allowed range will perform an optional
144        failure action and then return null. (Requests may also
145        also fail because a system is out of memory.)
146
147   Thread-safety: thread-safe
148
149   Compliance: I believe it is compliant with the 1997 Single Unix Specification
150        Also SVID/XPG, ANSI C, and probably others as well.
151
152 * Synopsis of compile-time options:
153
154     People have reported using previous versions of this malloc on all
155     versions of Unix, sometimes by tweaking some of the defines
156     below. It has been tested most extensively on Solaris and Linux.
157     People also report using it in stand-alone embedded systems.
158
159     The implementation is in straight, hand-tuned ANSI C.  It is not
160     at all modular. (Sorry!)  It uses a lot of macros.  To be at all
161     usable, this code should be compiled using an optimizing compiler
162     (for example gcc -O3) that can simplify expressions and control
163     paths. (FAQ: some macros import variables as arguments rather than
164     declare locals because people reported that some debuggers
165     otherwise get confused.)
166
167     OPTION                     DEFAULT VALUE
168
169     Compilation Environment options:
170
171     HAVE_MREMAP                0
172
173     Changing default word sizes:
174
175     INTERNAL_SIZE_T            size_t
176     MALLOC_ALIGNMENT           MAX (2 * sizeof(INTERNAL_SIZE_T),
177                                     __alignof__ (long double))
178
179     Configuration and functionality options:
180
181     USE_PUBLIC_MALLOC_WRAPPERS NOT defined
182     USE_MALLOC_LOCK            NOT defined
183     MALLOC_DEBUG               NOT defined
184     REALLOC_ZERO_BYTES_FREES   1
185     TRIM_FASTBINS              0
186
187     Options for customizing MORECORE:
188
189     MORECORE                   sbrk
190     MORECORE_FAILURE           -1
191     MORECORE_CONTIGUOUS        1
192     MORECORE_CANNOT_TRIM       NOT defined
193     MORECORE_CLEARS            1
194     MMAP_AS_MORECORE_SIZE      (1024 * 1024)
195
196     Tuning options that are also dynamically changeable via mallopt:
197
198     DEFAULT_MXFAST             64 (for 32bit), 128 (for 64bit)
199     DEFAULT_TRIM_THRESHOLD     128 * 1024
200     DEFAULT_TOP_PAD            0
201     DEFAULT_MMAP_THRESHOLD     128 * 1024
202     DEFAULT_MMAP_MAX           65536
203
204     There are several other #defined constants and macros that you
205     probably don't want to touch unless you are extending or adapting malloc.  */
206
207 /*
208   void* is the pointer type that malloc should say it returns
209 */
210
211 #ifndef void
212 #define void      void
213 #endif /*void*/
214
215 #include <stddef.h>   /* for size_t */
216 #include <stdlib.h>   /* for getenv(), abort() */
217 #include <unistd.h>   /* for __libc_enable_secure */
218
219 #include <malloc-machine.h>
220 #include <malloc-sysdep.h>
221
222 #include <atomic.h>
223 #include <_itoa.h>
224 #include <bits/wordsize.h>
225 #include <sys/sysinfo.h>
226
227 #include <ldsodefs.h>
228
229 #include <unistd.h>
230 #include <stdio.h>    /* needed for malloc_stats */
231 #include <errno.h>
232
233 #include <shlib-compat.h>
234
235 /* For uintptr_t.  */
236 #include <stdint.h>
237
238 /* For va_arg, va_start, va_end.  */
239 #include <stdarg.h>
240
241 /* For MIN, MAX, powerof2.  */
242 #include <sys/param.h>
243
244
245 /*
246   Debugging:
247
248   Because freed chunks may be overwritten with bookkeeping fields, this
249   malloc will often die when freed memory is overwritten by user
250   programs.  This can be very effective (albeit in an annoying way)
251   in helping track down dangling pointers.
252
253   If you compile with -DMALLOC_DEBUG, a number of assertion checks are
254   enabled that will catch more memory errors. You probably won't be
255   able to make much sense of the actual assertion errors, but they
256   should help you locate incorrectly overwritten memory.  The checking
257   is fairly extensive, and will slow down execution
258   noticeably. Calling malloc_stats or mallinfo with MALLOC_DEBUG set
259   will attempt to check every non-mmapped allocated and free chunk in
260   the course of computing the summmaries. (By nature, mmapped regions
261   cannot be checked very much automatically.)
262
263   Setting MALLOC_DEBUG may also be helpful if you are trying to modify
264   this code. The assertions in the check routines spell out in more
265   detail the assumptions and invariants underlying the algorithms.
266
267   Setting MALLOC_DEBUG does NOT provide an automated mechanism for
268   checking that all accesses to malloced memory stay within their
269   bounds. However, there are several add-ons and adaptations of this
270   or other mallocs available that do this.
271 */
272
273 #ifdef NDEBUG
274 # define assert(expr) ((void) 0)
275 #else
276 # define assert(expr) \
277   ((expr)                                                                     \
278    ? ((void) 0)                                                               \
279    : __malloc_assert (__STRING (expr), __FILE__, __LINE__, __func__))
280
281 extern const char *__progname;
282
283 static void
284 __malloc_assert (const char *assertion, const char *file, unsigned int line,
285                  const char *function)
286 {
287   (void) __fxprintf (NULL, "%s%s%s:%u: %s%sAssertion `%s' failed.\n",
288                      __progname, __progname[0] ? ": " : "",
289                      file, line,
290                      function ? function : "", function ? ": " : "",
291                      assertion);
292   fflush (stderr);
293   abort ();
294 }
295 #endif
296
297
298 /*
299   INTERNAL_SIZE_T is the word-size used for internal bookkeeping
300   of chunk sizes.
301
302   The default version is the same as size_t.
303
304   While not strictly necessary, it is best to define this as an
305   unsigned type, even if size_t is a signed type. This may avoid some
306   artificial size limitations on some systems.
307
308   On a 64-bit machine, you may be able to reduce malloc overhead by
309   defining INTERNAL_SIZE_T to be a 32 bit `unsigned int' at the
310   expense of not being able to handle more than 2^32 of malloced
311   space. If this limitation is acceptable, you are encouraged to set
312   this unless you are on a platform requiring 16byte alignments. In
313   this case the alignment requirements turn out to negate any
314   potential advantages of decreasing size_t word size.
315
316   Implementors: Beware of the possible combinations of:
317      - INTERNAL_SIZE_T might be signed or unsigned, might be 32 or 64 bits,
318        and might be the same width as int or as long
319      - size_t might have different width and signedness as INTERNAL_SIZE_T
320      - int and long might be 32 or 64 bits, and might be the same width
321   To deal with this, most comparisons and difference computations
322   among INTERNAL_SIZE_Ts should cast them to unsigned long, being
323   aware of the fact that casting an unsigned int to a wider long does
324   not sign-extend. (This also makes checking for negative numbers
325   awkward.) Some of these casts result in harmless compiler warnings
326   on some systems.
327 */
328
329 #ifndef INTERNAL_SIZE_T
330 #define INTERNAL_SIZE_T size_t
331 #endif
332
333 /* The corresponding word size */
334 #define SIZE_SZ                (sizeof(INTERNAL_SIZE_T))
335
336
337 /*
338   MALLOC_ALIGNMENT is the minimum alignment for malloc'ed chunks.
339   It must be a power of two at least 2 * SIZE_SZ, even on machines
340   for which smaller alignments would suffice. It may be defined as
341   larger than this though. Note however that code and data structures
342   are optimized for the case of 8-byte alignment.
343 */
344
345
346 #ifndef MALLOC_ALIGNMENT
347 # if !SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_16)
348 /* This is the correct definition when there is no past ABI to constrain it.
349
350    Among configurations with a past ABI constraint, it differs from
351    2*SIZE_SZ only on powerpc32.  For the time being, changing this is
352    causing more compatibility problems due to malloc_get_state and
353    malloc_set_state than will returning blocks not adequately aligned for
354    long double objects under -mlong-double-128.  */
355
356 #  define MALLOC_ALIGNMENT       (2 *SIZE_SZ < __alignof__ (long double)      \
357                                   ? __alignof__ (long double) : 2 *SIZE_SZ)
358 # else
359 #  define MALLOC_ALIGNMENT       (2 *SIZE_SZ)
360 # endif
361 #endif
362
363 /* The corresponding bit mask value */
364 #define MALLOC_ALIGN_MASK      (MALLOC_ALIGNMENT - 1)
365
366
367
368 /*
369   REALLOC_ZERO_BYTES_FREES should be set if a call to
370   realloc with zero bytes should be the same as a call to free.
371   This is required by the C standard. Otherwise, since this malloc
372   returns a unique pointer for malloc(0), so does realloc(p, 0).
373 */
374
375 #ifndef REALLOC_ZERO_BYTES_FREES
376 #define REALLOC_ZERO_BYTES_FREES 1
377 #endif
378
379 /*
380   TRIM_FASTBINS controls whether free() of a very small chunk can
381   immediately lead to trimming. Setting to true (1) can reduce memory
382   footprint, but will almost always slow down programs that use a lot
383   of small chunks.
384
385   Define this only if you are willing to give up some speed to more
386   aggressively reduce system-level memory footprint when releasing
387   memory in programs that use many small chunks.  You can get
388   essentially the same effect by setting MXFAST to 0, but this can
389   lead to even greater slowdowns in programs using many small chunks.
390   TRIM_FASTBINS is an in-between compile-time option, that disables
391   only those chunks bordering topmost memory from being placed in
392   fastbins.
393 */
394
395 #ifndef TRIM_FASTBINS
396 #define TRIM_FASTBINS  0
397 #endif
398
399
400 /* Definition for getting more memory from the OS.  */
401 #define MORECORE         (*__morecore)
402 #define MORECORE_FAILURE 0
403 void * __default_morecore (ptrdiff_t);
404 void *(*__morecore)(ptrdiff_t) = __default_morecore;
405
406
407 #include <string.h>
408
409 /*
410   MORECORE-related declarations. By default, rely on sbrk
411 */
412
413
414 /*
415   MORECORE is the name of the routine to call to obtain more memory
416   from the system.  See below for general guidance on writing
417   alternative MORECORE functions, as well as a version for WIN32 and a
418   sample version for pre-OSX macos.
419 */
420
421 #ifndef MORECORE
422 #define MORECORE sbrk
423 #endif
424
425 /*
426   MORECORE_FAILURE is the value returned upon failure of MORECORE
427   as well as mmap. Since it cannot be an otherwise valid memory address,
428   and must reflect values of standard sys calls, you probably ought not
429   try to redefine it.
430 */
431
432 #ifndef MORECORE_FAILURE
433 #define MORECORE_FAILURE (-1)
434 #endif
435
436 /*
437   If MORECORE_CONTIGUOUS is true, take advantage of fact that
438   consecutive calls to MORECORE with positive arguments always return
439   contiguous increasing addresses.  This is true of unix sbrk.  Even
440   if not defined, when regions happen to be contiguous, malloc will
441   permit allocations spanning regions obtained from different
442   calls. But defining this when applicable enables some stronger
443   consistency checks and space efficiencies.
444 */
445
446 #ifndef MORECORE_CONTIGUOUS
447 #define MORECORE_CONTIGUOUS 1
448 #endif
449
450 /*
451   Define MORECORE_CANNOT_TRIM if your version of MORECORE
452   cannot release space back to the system when given negative
453   arguments. This is generally necessary only if you are using
454   a hand-crafted MORECORE function that cannot handle negative arguments.
455 */
456
457 /* #define MORECORE_CANNOT_TRIM */
458
459 /*  MORECORE_CLEARS           (default 1)
460      The degree to which the routine mapped to MORECORE zeroes out
461      memory: never (0), only for newly allocated space (1) or always
462      (2).  The distinction between (1) and (2) is necessary because on
463      some systems, if the application first decrements and then
464      increments the break value, the contents of the reallocated space
465      are unspecified.
466  */
467
468 #ifndef MORECORE_CLEARS
469 # define MORECORE_CLEARS 1
470 #endif
471
472
473 /*
474    MMAP_AS_MORECORE_SIZE is the minimum mmap size argument to use if
475    sbrk fails, and mmap is used as a backup.  The value must be a
476    multiple of page size.  This backup strategy generally applies only
477    when systems have "holes" in address space, so sbrk cannot perform
478    contiguous expansion, but there is still space available on system.
479    On systems for which this is known to be useful (i.e. most linux
480    kernels), this occurs only when programs allocate huge amounts of
481    memory.  Between this, and the fact that mmap regions tend to be
482    limited, the size should be large, to avoid too many mmap calls and
483    thus avoid running out of kernel resources.  */
484
485 #ifndef MMAP_AS_MORECORE_SIZE
486 #define MMAP_AS_MORECORE_SIZE (1024 * 1024)
487 #endif
488
489 /*
490   Define HAVE_MREMAP to make realloc() use mremap() to re-allocate
491   large blocks.
492 */
493
494 #ifndef HAVE_MREMAP
495 #define HAVE_MREMAP 0
496 #endif
497
498
499 /*
500   This version of malloc supports the standard SVID/XPG mallinfo
501   routine that returns a struct containing usage properties and
502   statistics. It should work on any SVID/XPG compliant system that has
503   a /usr/include/malloc.h defining struct mallinfo. (If you'd like to
504   install such a thing yourself, cut out the preliminary declarations
505   as described above and below and save them in a malloc.h file. But
506   there's no compelling reason to bother to do this.)
507
508   The main declaration needed is the mallinfo struct that is returned
509   (by-copy) by mallinfo().  The SVID/XPG malloinfo struct contains a
510   bunch of fields that are not even meaningful in this version of
511   malloc.  These fields are are instead filled by mallinfo() with
512   other numbers that might be of interest.
513 */
514
515
516 /* ---------- description of public routines ------------ */
517
518 /*
519   malloc(size_t n)
520   Returns a pointer to a newly allocated chunk of at least n bytes, or null
521   if no space is available. Additionally, on failure, errno is
522   set to ENOMEM on ANSI C systems.
523
524   If n is zero, malloc returns a minumum-sized chunk. (The minimum
525   size is 16 bytes on most 32bit systems, and 24 or 32 bytes on 64bit
526   systems.)  On most systems, size_t is an unsigned type, so calls
527   with negative arguments are interpreted as requests for huge amounts
528   of space, which will often fail. The maximum supported value of n
529   differs across systems, but is in all cases less than the maximum
530   representable value of a size_t.
531 */
532 void*  __libc_malloc(size_t);
533 libc_hidden_proto (__libc_malloc)
534
535 /*
536   free(void* p)
537   Releases the chunk of memory pointed to by p, that had been previously
538   allocated using malloc or a related routine such as realloc.
539   It has no effect if p is null. It can have arbitrary (i.e., bad!)
540   effects if p has already been freed.
541
542   Unless disabled (using mallopt), freeing very large spaces will
543   when possible, automatically trigger operations that give
544   back unused memory to the system, thus reducing program footprint.
545 */
546 void     __libc_free(void*);
547 libc_hidden_proto (__libc_free)
548
549 /*
550   calloc(size_t n_elements, size_t element_size);
551   Returns a pointer to n_elements * element_size bytes, with all locations
552   set to zero.
553 */
554 void*  __libc_calloc(size_t, size_t);
555
556 /*
557   realloc(void* p, size_t n)
558   Returns a pointer to a chunk of size n that contains the same data
559   as does chunk p up to the minimum of (n, p's size) bytes, or null
560   if no space is available.
561
562   The returned pointer may or may not be the same as p. The algorithm
563   prefers extending p when possible, otherwise it employs the
564   equivalent of a malloc-copy-free sequence.
565
566   If p is null, realloc is equivalent to malloc.
567
568   If space is not available, realloc returns null, errno is set (if on
569   ANSI) and p is NOT freed.
570
571   if n is for fewer bytes than already held by p, the newly unused
572   space is lopped off and freed if possible.  Unless the #define
573   REALLOC_ZERO_BYTES_FREES is set, realloc with a size argument of
574   zero (re)allocates a minimum-sized chunk.
575
576   Large chunks that were internally obtained via mmap will always
577   be reallocated using malloc-copy-free sequences unless
578   the system supports MREMAP (currently only linux).
579
580   The old unix realloc convention of allowing the last-free'd chunk
581   to be used as an argument to realloc is not supported.
582 */
583 void*  __libc_realloc(void*, size_t);
584 libc_hidden_proto (__libc_realloc)
585
586 /*
587   memalign(size_t alignment, size_t n);
588   Returns a pointer to a newly allocated chunk of n bytes, aligned
589   in accord with the alignment argument.
590
591   The alignment argument should be a power of two. If the argument is
592   not a power of two, the nearest greater power is used.
593   8-byte alignment is guaranteed by normal malloc calls, so don't
594   bother calling memalign with an argument of 8 or less.
595
596   Overreliance on memalign is a sure way to fragment space.
597 */
598 void*  __libc_memalign(size_t, size_t);
599 libc_hidden_proto (__libc_memalign)
600
601 /*
602   valloc(size_t n);
603   Equivalent to memalign(pagesize, n), where pagesize is the page
604   size of the system. If the pagesize is unknown, 4096 is used.
605 */
606 void*  __libc_valloc(size_t);
607
608
609
610 /*
611   mallopt(int parameter_number, int parameter_value)
612   Sets tunable parameters The format is to provide a
613   (parameter-number, parameter-value) pair.  mallopt then sets the
614   corresponding parameter to the argument value if it can (i.e., so
615   long as the value is meaningful), and returns 1 if successful else
616   0.  SVID/XPG/ANSI defines four standard param numbers for mallopt,
617   normally defined in malloc.h.  Only one of these (M_MXFAST) is used
618   in this malloc. The others (M_NLBLKS, M_GRAIN, M_KEEP) don't apply,
619   so setting them has no effect. But this malloc also supports four
620   other options in mallopt. See below for details.  Briefly, supported
621   parameters are as follows (listed defaults are for "typical"
622   configurations).
623
624   Symbol            param #   default    allowed param values
625   M_MXFAST          1         64         0-80  (0 disables fastbins)
626   M_TRIM_THRESHOLD -1         128*1024   any   (-1U disables trimming)
627   M_TOP_PAD        -2         0          any
628   M_MMAP_THRESHOLD -3         128*1024   any   (or 0 if no MMAP support)
629   M_MMAP_MAX       -4         65536      any   (0 disables use of mmap)
630 */
631 int      __libc_mallopt(int, int);
632 libc_hidden_proto (__libc_mallopt)
633
634
635 /*
636   mallinfo()
637   Returns (by copy) a struct containing various summary statistics:
638
639   arena:     current total non-mmapped bytes allocated from system
640   ordblks:   the number of free chunks
641   smblks:    the number of fastbin blocks (i.e., small chunks that
642                have been freed but not use resused or consolidated)
643   hblks:     current number of mmapped regions
644   hblkhd:    total bytes held in mmapped regions
645   usmblks:   the maximum total allocated space. This will be greater
646                 than current total if trimming has occurred.
647   fsmblks:   total bytes held in fastbin blocks
648   uordblks:  current total allocated space (normal or mmapped)
649   fordblks:  total free space
650   keepcost:  the maximum number of bytes that could ideally be released
651                back to system via malloc_trim. ("ideally" means that
652                it ignores page restrictions etc.)
653
654   Because these fields are ints, but internal bookkeeping may
655   be kept as longs, the reported values may wrap around zero and
656   thus be inaccurate.
657 */
658 struct mallinfo __libc_mallinfo(void);
659
660
661 /*
662   pvalloc(size_t n);
663   Equivalent to valloc(minimum-page-that-holds(n)), that is,
664   round up n to nearest pagesize.
665  */
666 void*  __libc_pvalloc(size_t);
667
668 /*
669   malloc_trim(size_t pad);
670
671   If possible, gives memory back to the system (via negative
672   arguments to sbrk) if there is unused memory at the `high' end of
673   the malloc pool. You can call this after freeing large blocks of
674   memory to potentially reduce the system-level memory requirements
675   of a program. However, it cannot guarantee to reduce memory. Under
676   some allocation patterns, some large free blocks of memory will be
677   locked between two used chunks, so they cannot be given back to
678   the system.
679
680   The `pad' argument to malloc_trim represents the amount of free
681   trailing space to leave untrimmed. If this argument is zero,
682   only the minimum amount of memory to maintain internal data
683   structures will be left (one page or less). Non-zero arguments
684   can be supplied to maintain enough trailing space to service
685   future expected allocations without having to re-obtain memory
686   from the system.
687
688   Malloc_trim returns 1 if it actually released any memory, else 0.
689   On systems that do not support "negative sbrks", it will always
690   return 0.
691 */
692 int      __malloc_trim(size_t);
693
694 /*
695   malloc_usable_size(void* p);
696
697   Returns the number of bytes you can actually use in
698   an allocated chunk, which may be more than you requested (although
699   often not) due to alignment and minimum size constraints.
700   You can use this many bytes without worrying about
701   overwriting other allocated objects. This is not a particularly great
702   programming practice. malloc_usable_size can be more useful in
703   debugging and assertions, for example:
704
705   p = malloc(n);
706   assert(malloc_usable_size(p) >= 256);
707
708 */
709 size_t   __malloc_usable_size(void*);
710
711 /*
712   malloc_stats();
713   Prints on stderr the amount of space obtained from the system (both
714   via sbrk and mmap), the maximum amount (which may be more than
715   current if malloc_trim and/or munmap got called), and the current
716   number of bytes allocated via malloc (or realloc, etc) but not yet
717   freed. Note that this is the number of bytes allocated, not the
718   number requested. It will be larger than the number requested
719   because of alignment and bookkeeping overhead. Because it includes
720   alignment wastage as being in use, this figure may be greater than
721   zero even when no user-level chunks are allocated.
722
723   The reported current and maximum system memory can be inaccurate if
724   a program makes other calls to system memory allocation functions
725   (normally sbrk) outside of malloc.
726
727   malloc_stats prints only the most commonly interesting statistics.
728   More information can be obtained by calling mallinfo.
729
730 */
731 void     __malloc_stats(void);
732
733 /*
734   malloc_get_state(void);
735
736   Returns the state of all malloc variables in an opaque data
737   structure.
738 */
739 void*  __malloc_get_state(void);
740
741 /*
742   malloc_set_state(void* state);
743
744   Restore the state of all malloc variables from data obtained with
745   malloc_get_state().
746 */
747 int      __malloc_set_state(void*);
748
749 /*
750   posix_memalign(void **memptr, size_t alignment, size_t size);
751
752   POSIX wrapper like memalign(), checking for validity of size.
753 */
754 int      __posix_memalign(void **, size_t, size_t);
755
756 /* mallopt tuning options */
757
758 /*
759   M_MXFAST is the maximum request size used for "fastbins", special bins
760   that hold returned chunks without consolidating their spaces. This
761   enables future requests for chunks of the same size to be handled
762   very quickly, but can increase fragmentation, and thus increase the
763   overall memory footprint of a program.
764
765   This malloc manages fastbins very conservatively yet still
766   efficiently, so fragmentation is rarely a problem for values less
767   than or equal to the default.  The maximum supported value of MXFAST
768   is 80. You wouldn't want it any higher than this anyway.  Fastbins
769   are designed especially for use with many small structs, objects or
770   strings -- the default handles structs/objects/arrays with sizes up
771   to 8 4byte fields, or small strings representing words, tokens,
772   etc. Using fastbins for larger objects normally worsens
773   fragmentation without improving speed.
774
775   M_MXFAST is set in REQUEST size units. It is internally used in
776   chunksize units, which adds padding and alignment.  You can reduce
777   M_MXFAST to 0 to disable all use of fastbins.  This causes the malloc
778   algorithm to be a closer approximation of fifo-best-fit in all cases,
779   not just for larger requests, but will generally cause it to be
780   slower.
781 */
782
783
784 /* M_MXFAST is a standard SVID/XPG tuning option, usually listed in malloc.h */
785 #ifndef M_MXFAST
786 #define M_MXFAST            1
787 #endif
788
789 #ifndef DEFAULT_MXFAST
790 #define DEFAULT_MXFAST     (64 * SIZE_SZ / 4)
791 #endif
792
793
794 /*
795   M_TRIM_THRESHOLD is the maximum amount of unused top-most memory
796   to keep before releasing via malloc_trim in free().
797
798   Automatic trimming is mainly useful in long-lived programs.
799   Because trimming via sbrk can be slow on some systems, and can
800   sometimes be wasteful (in cases where programs immediately
801   afterward allocate more large chunks) the value should be high
802   enough so that your overall system performance would improve by
803   releasing this much memory.
804
805   The trim threshold and the mmap control parameters (see below)
806   can be traded off with one another. Trimming and mmapping are
807   two different ways of releasing unused memory back to the
808   system. Between these two, it is often possible to keep
809   system-level demands of a long-lived program down to a bare
810   minimum. For example, in one test suite of sessions measuring
811   the XF86 X server on Linux, using a trim threshold of 128K and a
812   mmap threshold of 192K led to near-minimal long term resource
813   consumption.
814
815   If you are using this malloc in a long-lived program, it should
816   pay to experiment with these values.  As a rough guide, you
817   might set to a value close to the average size of a process
818   (program) running on your system.  Releasing this much memory
819   would allow such a process to run in memory.  Generally, it's
820   worth it to tune for trimming rather tham memory mapping when a
821   program undergoes phases where several large chunks are
822   allocated and released in ways that can reuse each other's
823   storage, perhaps mixed with phases where there are no such
824   chunks at all.  And in well-behaved long-lived programs,
825   controlling release of large blocks via trimming versus mapping
826   is usually faster.
827
828   However, in most programs, these parameters serve mainly as
829   protection against the system-level effects of carrying around
830   massive amounts of unneeded memory. Since frequent calls to
831   sbrk, mmap, and munmap otherwise degrade performance, the default
832   parameters are set to relatively high values that serve only as
833   safeguards.
834
835   The trim value It must be greater than page size to have any useful
836   effect.  To disable trimming completely, you can set to
837   (unsigned long)(-1)
838
839   Trim settings interact with fastbin (MXFAST) settings: Unless
840   TRIM_FASTBINS is defined, automatic trimming never takes place upon
841   freeing a chunk with size less than or equal to MXFAST. Trimming is
842   instead delayed until subsequent freeing of larger chunks. However,
843   you can still force an attempted trim by calling malloc_trim.
844
845   Also, trimming is not generally possible in cases where
846   the main arena is obtained via mmap.
847
848   Note that the trick some people use of mallocing a huge space and
849   then freeing it at program startup, in an attempt to reserve system
850   memory, doesn't have the intended effect under automatic trimming,
851   since that memory will immediately be returned to the system.
852 */
853
854 #define M_TRIM_THRESHOLD       -1
855
856 #ifndef DEFAULT_TRIM_THRESHOLD
857 #define DEFAULT_TRIM_THRESHOLD (128 * 1024)
858 #endif
859
860 /*
861   M_TOP_PAD is the amount of extra `padding' space to allocate or
862   retain whenever sbrk is called. It is used in two ways internally:
863
864   * When sbrk is called to extend the top of the arena to satisfy
865   a new malloc request, this much padding is added to the sbrk
866   request.
867
868   * When malloc_trim is called automatically from free(),
869   it is used as the `pad' argument.
870
871   In both cases, the actual amount of padding is rounded
872   so that the end of the arena is always a system page boundary.
873
874   The main reason for using padding is to avoid calling sbrk so
875   often. Having even a small pad greatly reduces the likelihood
876   that nearly every malloc request during program start-up (or
877   after trimming) will invoke sbrk, which needlessly wastes
878   time.
879
880   Automatic rounding-up to page-size units is normally sufficient
881   to avoid measurable overhead, so the default is 0.  However, in
882   systems where sbrk is relatively slow, it can pay to increase
883   this value, at the expense of carrying around more memory than
884   the program needs.
885 */
886
887 #define M_TOP_PAD              -2
888
889 #ifndef DEFAULT_TOP_PAD
890 #define DEFAULT_TOP_PAD        (0)
891 #endif
892
893 /*
894   MMAP_THRESHOLD_MAX and _MIN are the bounds on the dynamically
895   adjusted MMAP_THRESHOLD.
896 */
897
898 #ifndef DEFAULT_MMAP_THRESHOLD_MIN
899 #define DEFAULT_MMAP_THRESHOLD_MIN (128 * 1024)
900 #endif
901
902 #ifndef DEFAULT_MMAP_THRESHOLD_MAX
903   /* For 32-bit platforms we cannot increase the maximum mmap
904      threshold much because it is also the minimum value for the
905      maximum heap size and its alignment.  Going above 512k (i.e., 1M
906      for new heaps) wastes too much address space.  */
907 # if __WORDSIZE == 32
908 #  define DEFAULT_MMAP_THRESHOLD_MAX (512 * 1024)
909 # else
910 #  define DEFAULT_MMAP_THRESHOLD_MAX (4 * 1024 * 1024 * sizeof(long))
911 # endif
912 #endif
913
914 /*
915   M_MMAP_THRESHOLD is the request size threshold for using mmap()
916   to service a request. Requests of at least this size that cannot
917   be allocated using already-existing space will be serviced via mmap.
918   (If enough normal freed space already exists it is used instead.)
919
920   Using mmap segregates relatively large chunks of memory so that
921   they can be individually obtained and released from the host
922   system. A request serviced through mmap is never reused by any
923   other request (at least not directly; the system may just so
924   happen to remap successive requests to the same locations).
925
926   Segregating space in this way has the benefits that:
927
928    1. Mmapped space can ALWAYS be individually released back
929       to the system, which helps keep the system level memory
930       demands of a long-lived program low.
931    2. Mapped memory can never become `locked' between
932       other chunks, as can happen with normally allocated chunks, which
933       means that even trimming via malloc_trim would not release them.
934    3. On some systems with "holes" in address spaces, mmap can obtain
935       memory that sbrk cannot.
936
937   However, it has the disadvantages that:
938
939    1. The space cannot be reclaimed, consolidated, and then
940       used to service later requests, as happens with normal chunks.
941    2. It can lead to more wastage because of mmap page alignment
942       requirements
943    3. It causes malloc performance to be more dependent on host
944       system memory management support routines which may vary in
945       implementation quality and may impose arbitrary
946       limitations. Generally, servicing a request via normal
947       malloc steps is faster than going through a system's mmap.
948
949   The advantages of mmap nearly always outweigh disadvantages for
950   "large" chunks, but the value of "large" varies across systems.  The
951   default is an empirically derived value that works well in most
952   systems.
953
954
955   Update in 2006:
956   The above was written in 2001. Since then the world has changed a lot.
957   Memory got bigger. Applications got bigger. The virtual address space
958   layout in 32 bit linux changed.
959
960   In the new situation, brk() and mmap space is shared and there are no
961   artificial limits on brk size imposed by the kernel. What is more,
962   applications have started using transient allocations larger than the
963   128Kb as was imagined in 2001.
964
965   The price for mmap is also high now; each time glibc mmaps from the
966   kernel, the kernel is forced to zero out the memory it gives to the
967   application. Zeroing memory is expensive and eats a lot of cache and
968   memory bandwidth. This has nothing to do with the efficiency of the
969   virtual memory system, by doing mmap the kernel just has no choice but
970   to zero.
971
972   In 2001, the kernel had a maximum size for brk() which was about 800
973   megabytes on 32 bit x86, at that point brk() would hit the first
974   mmaped shared libaries and couldn't expand anymore. With current 2.6
975   kernels, the VA space layout is different and brk() and mmap
976   both can span the entire heap at will.
977
978   Rather than using a static threshold for the brk/mmap tradeoff,
979   we are now using a simple dynamic one. The goal is still to avoid
980   fragmentation. The old goals we kept are
981   1) try to get the long lived large allocations to use mmap()
982   2) really large allocations should always use mmap()
983   and we're adding now:
984   3) transient allocations should use brk() to avoid forcing the kernel
985      having to zero memory over and over again
986
987   The implementation works with a sliding threshold, which is by default
988   limited to go between 128Kb and 32Mb (64Mb for 64 bitmachines) and starts
989   out at 128Kb as per the 2001 default.
990
991   This allows us to satisfy requirement 1) under the assumption that long
992   lived allocations are made early in the process' lifespan, before it has
993   started doing dynamic allocations of the same size (which will
994   increase the threshold).
995
996   The upperbound on the threshold satisfies requirement 2)
997
998   The threshold goes up in value when the application frees memory that was
999   allocated with the mmap allocator. The idea is that once the application
1000   starts freeing memory of a certain size, it's highly probable that this is
1001   a size the application uses for transient allocations. This estimator
1002   is there to satisfy the new third requirement.
1003
1004 */
1005
1006 #define M_MMAP_THRESHOLD      -3
1007
1008 #ifndef DEFAULT_MMAP_THRESHOLD
1009 #define DEFAULT_MMAP_THRESHOLD DEFAULT_MMAP_THRESHOLD_MIN
1010 #endif
1011
1012 /*
1013   M_MMAP_MAX is the maximum number of requests to simultaneously
1014   service using mmap. This parameter exists because
1015   some systems have a limited number of internal tables for
1016   use by mmap, and using more than a few of them may degrade
1017   performance.
1018
1019   The default is set to a value that serves only as a safeguard.
1020   Setting to 0 disables use of mmap for servicing large requests.
1021 */
1022
1023 #define M_MMAP_MAX             -4
1024
1025 #ifndef DEFAULT_MMAP_MAX
1026 #define DEFAULT_MMAP_MAX       (65536)
1027 #endif
1028
1029 #include <malloc.h>
1030
1031 #ifndef RETURN_ADDRESS
1032 #define RETURN_ADDRESS(X_) (NULL)
1033 #endif
1034
1035 /* On some platforms we can compile internal, not exported functions better.
1036    Let the environment provide a macro and define it to be empty if it
1037    is not available.  */
1038 #ifndef internal_function
1039 # define internal_function
1040 #endif
1041
1042 /* Forward declarations.  */
1043 struct malloc_chunk;
1044 typedef struct malloc_chunk* mchunkptr;
1045
1046 /* Internal routines.  */
1047
1048 static void*  _int_malloc(mstate, size_t);
1049 static void     _int_free(mstate, mchunkptr, int);
1050 static void*  _int_realloc(mstate, mchunkptr, INTERNAL_SIZE_T,
1051                            INTERNAL_SIZE_T);
1052 static void*  _int_memalign(mstate, size_t, size_t);
1053 static void*  _mid_memalign(size_t, size_t, void *);
1054
1055 static void malloc_printerr(int action, const char *str, void *ptr);
1056
1057 static void* internal_function mem2mem_check(void *p, size_t sz);
1058 static int internal_function top_check(void);
1059 static void internal_function munmap_chunk(mchunkptr p);
1060 #if HAVE_MREMAP
1061 static mchunkptr internal_function mremap_chunk(mchunkptr p, size_t new_size);
1062 #endif
1063
1064 static void*   malloc_check(size_t sz, const void *caller);
1065 static void      free_check(void* mem, const void *caller);
1066 static void*   realloc_check(void* oldmem, size_t bytes,
1067                                const void *caller);
1068 static void*   memalign_check(size_t alignment, size_t bytes,
1069                                 const void *caller);
1070 #ifndef NO_THREADS
1071 static void*   malloc_atfork(size_t sz, const void *caller);
1072 static void      free_atfork(void* mem, const void *caller);
1073 #endif
1074
1075 /* ------------------ MMAP support ------------------  */
1076
1077
1078 #include <fcntl.h>
1079 #include <sys/mman.h>
1080
1081 #if !defined(MAP_ANONYMOUS) && defined(MAP_ANON)
1082 # define MAP_ANONYMOUS MAP_ANON
1083 #endif
1084
1085 #ifndef MAP_NORESERVE
1086 # define MAP_NORESERVE 0
1087 #endif
1088
1089 #define MMAP(addr, size, prot, flags) \
1090  __mmap((addr), (size), (prot), (flags)|MAP_ANONYMOUS|MAP_PRIVATE, -1, 0)
1091
1092
1093 /*
1094   -----------------------  Chunk representations -----------------------
1095 */
1096
1097
1098 /*
1099   This struct declaration is misleading (but accurate and necessary).
1100   It declares a "view" into memory allowing access to necessary
1101   fields at known offsets from a given base. See explanation below.
1102 */
1103
1104 struct malloc_chunk {
1105
1106   INTERNAL_SIZE_T      prev_size;  /* Size of previous chunk (if free).  */
1107   INTERNAL_SIZE_T      size;       /* Size in bytes, including overhead. */
1108
1109   struct malloc_chunk* fd;         /* double links -- used only if free. */
1110   struct malloc_chunk* bk;
1111
1112   /* Only used for large blocks: pointer to next larger size.  */
1113   struct malloc_chunk* fd_nextsize; /* double links -- used only if free. */
1114   struct malloc_chunk* bk_nextsize;
1115 };
1116
1117
1118 /*
1119    malloc_chunk details:
1120
1121     (The following includes lightly edited explanations by Colin Plumb.)
1122
1123     Chunks of memory are maintained using a `boundary tag' method as
1124     described in e.g., Knuth or Standish.  (See the paper by Paul
1125     Wilson ftp://ftp.cs.utexas.edu/pub/garbage/allocsrv.ps for a
1126     survey of such techniques.)  Sizes of free chunks are stored both
1127     in the front of each chunk and at the end.  This makes
1128     consolidating fragmented chunks into bigger chunks very fast.  The
1129     size fields also hold bits representing whether chunks are free or
1130     in use.
1131
1132     An allocated chunk looks like this:
1133
1134
1135     chunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1136             |             Size of previous chunk, if allocated            | |
1137             +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1138             |             Size of chunk, in bytes                       |M|P|
1139       mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1140             |             User data starts here...                          .
1141             .                                                               .
1142             .             (malloc_usable_size() bytes)                      .
1143             .                                                               |
1144 nextchunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1145             |             Size of chunk                                     |
1146             +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1147
1148
1149     Where "chunk" is the front of the chunk for the purpose of most of
1150     the malloc code, but "mem" is the pointer that is returned to the
1151     user.  "Nextchunk" is the beginning of the next contiguous chunk.
1152
1153     Chunks always begin on even word boundaries, so the mem portion
1154     (which is returned to the user) is also on an even word boundary, and
1155     thus at least double-word aligned.
1156
1157     Free chunks are stored in circular doubly-linked lists, and look like this:
1158
1159     chunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1160             |             Size of previous chunk                            |
1161             +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1162     `head:' |             Size of chunk, in bytes                         |P|
1163       mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1164             |             Forward pointer to next chunk in list             |
1165             +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1166             |             Back pointer to previous chunk in list            |
1167             +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1168             |             Unused space (may be 0 bytes long)                .
1169             .                                                               .
1170             .                                                               |
1171 nextchunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1172     `foot:' |             Size of chunk, in bytes                           |
1173             +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1174
1175     The P (PREV_INUSE) bit, stored in the unused low-order bit of the
1176     chunk size (which is always a multiple of two words), is an in-use
1177     bit for the *previous* chunk.  If that bit is *clear*, then the
1178     word before the current chunk size contains the previous chunk
1179     size, and can be used to find the front of the previous chunk.
1180     The very first chunk allocated always has this bit set,
1181     preventing access to non-existent (or non-owned) memory. If
1182     prev_inuse is set for any given chunk, then you CANNOT determine
1183     the size of the previous chunk, and might even get a memory
1184     addressing fault when trying to do so.
1185
1186     Note that the `foot' of the current chunk is actually represented
1187     as the prev_size of the NEXT chunk. This makes it easier to
1188     deal with alignments etc but can be very confusing when trying
1189     to extend or adapt this code.
1190
1191     The two exceptions to all this are
1192
1193      1. The special chunk `top' doesn't bother using the
1194         trailing size field since there is no next contiguous chunk
1195         that would have to index off it. After initialization, `top'
1196         is forced to always exist.  If it would become less than
1197         MINSIZE bytes long, it is replenished.
1198
1199      2. Chunks allocated via mmap, which have the second-lowest-order
1200         bit M (IS_MMAPPED) set in their size fields.  Because they are
1201         allocated one-by-one, each must contain its own trailing size field.
1202
1203 */
1204
1205 /*
1206   ---------- Size and alignment checks and conversions ----------
1207 */
1208
1209 /* conversion from malloc headers to user pointers, and back */
1210
1211 #define chunk2mem(p)   ((void*)((char*)(p) + 2*SIZE_SZ))
1212 #define mem2chunk(mem) ((mchunkptr)((char*)(mem) - 2*SIZE_SZ))
1213
1214 /* The smallest possible chunk */
1215 #define MIN_CHUNK_SIZE        (offsetof(struct malloc_chunk, fd_nextsize))
1216
1217 /* The smallest size we can malloc is an aligned minimal chunk */
1218
1219 #define MINSIZE  \
1220   (unsigned long)(((MIN_CHUNK_SIZE+MALLOC_ALIGN_MASK) & ~MALLOC_ALIGN_MASK))
1221
1222 /* Check if m has acceptable alignment */
1223
1224 #define aligned_OK(m)  (((unsigned long)(m) & MALLOC_ALIGN_MASK) == 0)
1225
1226 #define misaligned_chunk(p) \
1227   ((uintptr_t)(MALLOC_ALIGNMENT == 2 * SIZE_SZ ? (p) : chunk2mem (p)) \
1228    & MALLOC_ALIGN_MASK)
1229
1230
1231 /*
1232    Check if a request is so large that it would wrap around zero when
1233    padded and aligned. To simplify some other code, the bound is made
1234    low enough so that adding MINSIZE will also not wrap around zero.
1235  */
1236
1237 #define REQUEST_OUT_OF_RANGE(req)                                 \
1238   ((unsigned long) (req) >=                                                   \
1239    (unsigned long) (INTERNAL_SIZE_T) (-2 * MINSIZE))
1240
1241 /* pad request bytes into a usable size -- internal version */
1242
1243 #define request2size(req)                                         \
1244   (((req) + SIZE_SZ + MALLOC_ALIGN_MASK < MINSIZE)  ?             \
1245    MINSIZE :                                                      \
1246    ((req) + SIZE_SZ + MALLOC_ALIGN_MASK) & ~MALLOC_ALIGN_MASK)
1247
1248 /*  Same, except also perform argument check */
1249
1250 #define checked_request2size(req, sz)                             \
1251   if (REQUEST_OUT_OF_RANGE (req)) {                                           \
1252       __set_errno (ENOMEM);                                                   \
1253       return 0;                                                               \
1254     }                                                                         \
1255   (sz) = request2size (req);
1256
1257 /*
1258    --------------- Physical chunk operations ---------------
1259  */
1260
1261
1262 /* size field is or'ed with PREV_INUSE when previous adjacent chunk in use */
1263 #define PREV_INUSE 0x1
1264
1265 /* extract inuse bit of previous chunk */
1266 #define prev_inuse(p)       ((p)->size & PREV_INUSE)
1267
1268
1269 /* size field is or'ed with IS_MMAPPED if the chunk was obtained with mmap() */
1270 #define IS_MMAPPED 0x2
1271
1272 /* check for mmap()'ed chunk */
1273 #define chunk_is_mmapped(p) ((p)->size & IS_MMAPPED)
1274
1275
1276 /* size field is or'ed with NON_MAIN_ARENA if the chunk was obtained
1277    from a non-main arena.  This is only set immediately before handing
1278    the chunk to the user, if necessary.  */
1279 #define NON_MAIN_ARENA 0x4
1280
1281 /* check for chunk from non-main arena */
1282 #define chunk_non_main_arena(p) ((p)->size & NON_MAIN_ARENA)
1283
1284
1285 /*
1286    Bits to mask off when extracting size
1287
1288    Note: IS_MMAPPED is intentionally not masked off from size field in
1289    macros for which mmapped chunks should never be seen. This should
1290    cause helpful core dumps to occur if it is tried by accident by
1291    people extending or adapting this malloc.
1292  */
1293 #define SIZE_BITS (PREV_INUSE | IS_MMAPPED | NON_MAIN_ARENA)
1294
1295 /* Get size, ignoring use bits */
1296 #define chunksize(p)         ((p)->size & ~(SIZE_BITS))
1297
1298
1299 /* Ptr to next physical malloc_chunk. */
1300 #define next_chunk(p) ((mchunkptr) (((char *) (p)) + ((p)->size & ~SIZE_BITS)))
1301
1302 /* Ptr to previous physical malloc_chunk */
1303 #define prev_chunk(p) ((mchunkptr) (((char *) (p)) - ((p)->prev_size)))
1304
1305 /* Treat space at ptr + offset as a chunk */
1306 #define chunk_at_offset(p, s)  ((mchunkptr) (((char *) (p)) + (s)))
1307
1308 /* extract p's inuse bit */
1309 #define inuse(p)                                                              \
1310   ((((mchunkptr) (((char *) (p)) + ((p)->size & ~SIZE_BITS)))->size) & PREV_INUSE)
1311
1312 /* set/clear chunk as being inuse without otherwise disturbing */
1313 #define set_inuse(p)                                                          \
1314   ((mchunkptr) (((char *) (p)) + ((p)->size & ~SIZE_BITS)))->size |= PREV_INUSE
1315
1316 #define clear_inuse(p)                                                        \
1317   ((mchunkptr) (((char *) (p)) + ((p)->size & ~SIZE_BITS)))->size &= ~(PREV_INUSE)
1318
1319
1320 /* check/set/clear inuse bits in known places */
1321 #define inuse_bit_at_offset(p, s)                                             \
1322   (((mchunkptr) (((char *) (p)) + (s)))->size & PREV_INUSE)
1323
1324 #define set_inuse_bit_at_offset(p, s)                                         \
1325   (((mchunkptr) (((char *) (p)) + (s)))->size |= PREV_INUSE)
1326
1327 #define clear_inuse_bit_at_offset(p, s)                                       \
1328   (((mchunkptr) (((char *) (p)) + (s)))->size &= ~(PREV_INUSE))
1329
1330
1331 /* Set size at head, without disturbing its use bit */
1332 #define set_head_size(p, s)  ((p)->size = (((p)->size & SIZE_BITS) | (s)))
1333
1334 /* Set size/use field */
1335 #define set_head(p, s)       ((p)->size = (s))
1336
1337 /* Set size at footer (only when chunk is not in use) */
1338 #define set_foot(p, s)       (((mchunkptr) ((char *) (p) + (s)))->prev_size = (s))
1339
1340
1341 /*
1342    -------------------- Internal data structures --------------------
1343
1344    All internal state is held in an instance of malloc_state defined
1345    below. There are no other static variables, except in two optional
1346    cases:
1347  * If USE_MALLOC_LOCK is defined, the mALLOC_MUTEx declared above.
1348  * If mmap doesn't support MAP_ANONYMOUS, a dummy file descriptor
1349      for mmap.
1350
1351    Beware of lots of tricks that minimize the total bookkeeping space
1352    requirements. The result is a little over 1K bytes (for 4byte
1353    pointers and size_t.)
1354  */
1355
1356 /*
1357    Bins
1358
1359     An array of bin headers for free chunks. Each bin is doubly
1360     linked.  The bins are approximately proportionally (log) spaced.
1361     There are a lot of these bins (128). This may look excessive, but
1362     works very well in practice.  Most bins hold sizes that are
1363     unusual as malloc request sizes, but are more usual for fragments
1364     and consolidated sets of chunks, which is what these bins hold, so
1365     they can be found quickly.  All procedures maintain the invariant
1366     that no consolidated chunk physically borders another one, so each
1367     chunk in a list is known to be preceeded and followed by either
1368     inuse chunks or the ends of memory.
1369
1370     Chunks in bins are kept in size order, with ties going to the
1371     approximately least recently used chunk. Ordering isn't needed
1372     for the small bins, which all contain the same-sized chunks, but
1373     facilitates best-fit allocation for larger chunks. These lists
1374     are just sequential. Keeping them in order almost never requires
1375     enough traversal to warrant using fancier ordered data
1376     structures.
1377
1378     Chunks of the same size are linked with the most
1379     recently freed at the front, and allocations are taken from the
1380     back.  This results in LRU (FIFO) allocation order, which tends
1381     to give each chunk an equal opportunity to be consolidated with
1382     adjacent freed chunks, resulting in larger free chunks and less
1383     fragmentation.
1384
1385     To simplify use in double-linked lists, each bin header acts
1386     as a malloc_chunk. This avoids special-casing for headers.
1387     But to conserve space and improve locality, we allocate
1388     only the fd/bk pointers of bins, and then use repositioning tricks
1389     to treat these as the fields of a malloc_chunk*.
1390  */
1391
1392 typedef struct malloc_chunk *mbinptr;
1393
1394 /* addressing -- note that bin_at(0) does not exist */
1395 #define bin_at(m, i) \
1396   (mbinptr) (((char *) &((m)->bins[((i) - 1) * 2]))                           \
1397              - offsetof (struct malloc_chunk, fd))
1398
1399 /* analog of ++bin */
1400 #define next_bin(b)  ((mbinptr) ((char *) (b) + (sizeof (mchunkptr) << 1)))
1401
1402 /* Reminders about list directionality within bins */
1403 #define first(b)     ((b)->fd)
1404 #define last(b)      ((b)->bk)
1405
1406 /* Take a chunk off a bin list */
1407 #define unlink(P, BK, FD) {                                            \
1408     FD = P->fd;                                                               \
1409     BK = P->bk;                                                               \
1410     if (__builtin_expect (FD->bk != P || BK->fd != P, 0))                     \
1411       malloc_printerr (check_action, "corrupted double-linked list", P);      \
1412     else {                                                                    \
1413         FD->bk = BK;                                                          \
1414         BK->fd = FD;                                                          \
1415         if (!in_smallbin_range (P->size)                                      \
1416             && __builtin_expect (P->fd_nextsize != NULL, 0)) {                \
1417             assert (P->fd_nextsize->bk_nextsize == P);                        \
1418             assert (P->bk_nextsize->fd_nextsize == P);                        \
1419             if (FD->fd_nextsize == NULL) {                                    \
1420                 if (P->fd_nextsize == P)                                      \
1421                   FD->fd_nextsize = FD->bk_nextsize = FD;                     \
1422                 else {                                                        \
1423                     FD->fd_nextsize = P->fd_nextsize;                         \
1424                     FD->bk_nextsize = P->bk_nextsize;                         \
1425                     P->fd_nextsize->bk_nextsize = FD;                         \
1426                     P->bk_nextsize->fd_nextsize = FD;                         \
1427                   }                                                           \
1428               } else {                                                        \
1429                 P->fd_nextsize->bk_nextsize = P->bk_nextsize;                 \
1430                 P->bk_nextsize->fd_nextsize = P->fd_nextsize;                 \
1431               }                                                               \
1432           }                                                                   \
1433       }                                                                       \
1434 }
1435
1436 /*
1437    Indexing
1438
1439     Bins for sizes < 512 bytes contain chunks of all the same size, spaced
1440     8 bytes apart. Larger bins are approximately logarithmically spaced:
1441
1442     64 bins of size       8
1443     32 bins of size      64
1444     16 bins of size     512
1445      8 bins of size    4096
1446      4 bins of size   32768
1447      2 bins of size  262144
1448      1 bin  of size what's left
1449
1450     There is actually a little bit of slop in the numbers in bin_index
1451     for the sake of speed. This makes no difference elsewhere.
1452
1453     The bins top out around 1MB because we expect to service large
1454     requests via mmap.
1455
1456     Bin 0 does not exist.  Bin 1 is the unordered list; if that would be
1457     a valid chunk size the small bins are bumped up one.
1458  */
1459
1460 #define NBINS             128
1461 #define NSMALLBINS         64
1462 #define SMALLBIN_WIDTH    MALLOC_ALIGNMENT
1463 #define SMALLBIN_CORRECTION (MALLOC_ALIGNMENT > 2 * SIZE_SZ)
1464 #define MIN_LARGE_SIZE    ((NSMALLBINS - SMALLBIN_CORRECTION) * SMALLBIN_WIDTH)
1465
1466 #define in_smallbin_range(sz)  \
1467   ((unsigned long) (sz) < (unsigned long) MIN_LARGE_SIZE)
1468
1469 #define smallbin_index(sz) \
1470   ((SMALLBIN_WIDTH == 16 ? (((unsigned) (sz)) >> 4) : (((unsigned) (sz)) >> 3))\
1471    + SMALLBIN_CORRECTION)
1472
1473 #define largebin_index_32(sz)                                                \
1474   (((((unsigned long) (sz)) >> 6) <= 38) ?  56 + (((unsigned long) (sz)) >> 6) :\
1475    ((((unsigned long) (sz)) >> 9) <= 20) ?  91 + (((unsigned long) (sz)) >> 9) :\
1476    ((((unsigned long) (sz)) >> 12) <= 10) ? 110 + (((unsigned long) (sz)) >> 12) :\
1477    ((((unsigned long) (sz)) >> 15) <= 4) ? 119 + (((unsigned long) (sz)) >> 15) :\
1478    ((((unsigned long) (sz)) >> 18) <= 2) ? 124 + (((unsigned long) (sz)) >> 18) :\
1479    126)
1480
1481 #define largebin_index_32_big(sz)                                            \
1482   (((((unsigned long) (sz)) >> 6) <= 45) ?  49 + (((unsigned long) (sz)) >> 6) :\
1483    ((((unsigned long) (sz)) >> 9) <= 20) ?  91 + (((unsigned long) (sz)) >> 9) :\
1484    ((((unsigned long) (sz)) >> 12) <= 10) ? 110 + (((unsigned long) (sz)) >> 12) :\
1485    ((((unsigned long) (sz)) >> 15) <= 4) ? 119 + (((unsigned long) (sz)) >> 15) :\
1486    ((((unsigned long) (sz)) >> 18) <= 2) ? 124 + (((unsigned long) (sz)) >> 18) :\
1487    126)
1488
1489 // XXX It remains to be seen whether it is good to keep the widths of
1490 // XXX the buckets the same or whether it should be scaled by a factor
1491 // XXX of two as well.
1492 #define largebin_index_64(sz)                                                \
1493   (((((unsigned long) (sz)) >> 6) <= 48) ?  48 + (((unsigned long) (sz)) >> 6) :\
1494    ((((unsigned long) (sz)) >> 9) <= 20) ?  91 + (((unsigned long) (sz)) >> 9) :\
1495    ((((unsigned long) (sz)) >> 12) <= 10) ? 110 + (((unsigned long) (sz)) >> 12) :\
1496    ((((unsigned long) (sz)) >> 15) <= 4) ? 119 + (((unsigned long) (sz)) >> 15) :\
1497    ((((unsigned long) (sz)) >> 18) <= 2) ? 124 + (((unsigned long) (sz)) >> 18) :\
1498    126)
1499
1500 #define largebin_index(sz) \
1501   (SIZE_SZ == 8 ? largebin_index_64 (sz)                                     \
1502    : MALLOC_ALIGNMENT == 16 ? largebin_index_32_big (sz)                     \
1503    : largebin_index_32 (sz))
1504
1505 #define bin_index(sz) \
1506   ((in_smallbin_range (sz)) ? smallbin_index (sz) : largebin_index (sz))
1507
1508
1509 /*
1510    Unsorted chunks
1511
1512     All remainders from chunk splits, as well as all returned chunks,
1513     are first placed in the "unsorted" bin. They are then placed
1514     in regular bins after malloc gives them ONE chance to be used before
1515     binning. So, basically, the unsorted_chunks list acts as a queue,
1516     with chunks being placed on it in free (and malloc_consolidate),
1517     and taken off (to be either used or placed in bins) in malloc.
1518
1519     The NON_MAIN_ARENA flag is never set for unsorted chunks, so it
1520     does not have to be taken into account in size comparisons.
1521  */
1522
1523 /* The otherwise unindexable 1-bin is used to hold unsorted chunks. */
1524 #define unsorted_chunks(M)          (bin_at (M, 1))
1525
1526 /*
1527    Top
1528
1529     The top-most available chunk (i.e., the one bordering the end of
1530     available memory) is treated specially. It is never included in
1531     any bin, is used only if no other chunk is available, and is
1532     released back to the system if it is very large (see
1533     M_TRIM_THRESHOLD).  Because top initially
1534     points to its own bin with initial zero size, thus forcing
1535     extension on the first malloc request, we avoid having any special
1536     code in malloc to check whether it even exists yet. But we still
1537     need to do so when getting memory from system, so we make
1538     initial_top treat the bin as a legal but unusable chunk during the
1539     interval between initialization and the first call to
1540     sysmalloc. (This is somewhat delicate, since it relies on
1541     the 2 preceding words to be zero during this interval as well.)
1542  */
1543
1544 /* Conveniently, the unsorted bin can be used as dummy top on first call */
1545 #define initial_top(M)              (unsorted_chunks (M))
1546
1547 /*
1548    Binmap
1549
1550     To help compensate for the large number of bins, a one-level index
1551     structure is used for bin-by-bin searching.  `binmap' is a
1552     bitvector recording whether bins are definitely empty so they can
1553     be skipped over during during traversals.  The bits are NOT always
1554     cleared as soon as bins are empty, but instead only
1555     when they are noticed to be empty during traversal in malloc.
1556  */
1557
1558 /* Conservatively use 32 bits per map word, even if on 64bit system */
1559 #define BINMAPSHIFT      5
1560 #define BITSPERMAP       (1U << BINMAPSHIFT)
1561 #define BINMAPSIZE       (NBINS / BITSPERMAP)
1562
1563 #define idx2block(i)     ((i) >> BINMAPSHIFT)
1564 #define idx2bit(i)       ((1U << ((i) & ((1U << BINMAPSHIFT) - 1))))
1565
1566 #define mark_bin(m, i)    ((m)->binmap[idx2block (i)] |= idx2bit (i))
1567 #define unmark_bin(m, i)  ((m)->binmap[idx2block (i)] &= ~(idx2bit (i)))
1568 #define get_binmap(m, i)  ((m)->binmap[idx2block (i)] & idx2bit (i))
1569
1570 /*
1571    Fastbins
1572
1573     An array of lists holding recently freed small chunks.  Fastbins
1574     are not doubly linked.  It is faster to single-link them, and
1575     since chunks are never removed from the middles of these lists,
1576     double linking is not necessary. Also, unlike regular bins, they
1577     are not even processed in FIFO order (they use faster LIFO) since
1578     ordering doesn't much matter in the transient contexts in which
1579     fastbins are normally used.
1580
1581     Chunks in fastbins keep their inuse bit set, so they cannot
1582     be consolidated with other free chunks. malloc_consolidate
1583     releases all chunks in fastbins and consolidates them with
1584     other free chunks.
1585  */
1586
1587 typedef struct malloc_chunk *mfastbinptr;
1588 #define fastbin(ar_ptr, idx) ((ar_ptr)->fastbinsY[idx])
1589
1590 /* offset 2 to use otherwise unindexable first 2 bins */
1591 #define fastbin_index(sz) \
1592   ((((unsigned int) (sz)) >> (SIZE_SZ == 8 ? 4 : 3)) - 2)
1593
1594
1595 /* The maximum fastbin request size we support */
1596 #define MAX_FAST_SIZE     (80 * SIZE_SZ / 4)
1597
1598 #define NFASTBINS  (fastbin_index (request2size (MAX_FAST_SIZE)) + 1)
1599
1600 /*
1601    FASTBIN_CONSOLIDATION_THRESHOLD is the size of a chunk in free()
1602    that triggers automatic consolidation of possibly-surrounding
1603    fastbin chunks. This is a heuristic, so the exact value should not
1604    matter too much. It is defined at half the default trim threshold as a
1605    compromise heuristic to only attempt consolidation if it is likely
1606    to lead to trimming. However, it is not dynamically tunable, since
1607    consolidation reduces fragmentation surrounding large chunks even
1608    if trimming is not used.
1609  */
1610
1611 #define FASTBIN_CONSOLIDATION_THRESHOLD  (65536UL)
1612
1613 /*
1614    Since the lowest 2 bits in max_fast don't matter in size comparisons,
1615    they are used as flags.
1616  */
1617
1618 /*
1619    FASTCHUNKS_BIT held in max_fast indicates that there are probably
1620    some fastbin chunks. It is set true on entering a chunk into any
1621    fastbin, and cleared only in malloc_consolidate.
1622
1623    The truth value is inverted so that have_fastchunks will be true
1624    upon startup (since statics are zero-filled), simplifying
1625    initialization checks.
1626  */
1627
1628 #define FASTCHUNKS_BIT        (1U)
1629
1630 #define have_fastchunks(M)     (((M)->flags & FASTCHUNKS_BIT) == 0)
1631 #define clear_fastchunks(M)    catomic_or (&(M)->flags, FASTCHUNKS_BIT)
1632 #define set_fastchunks(M)      catomic_and (&(M)->flags, ~FASTCHUNKS_BIT)
1633
1634 /*
1635    NONCONTIGUOUS_BIT indicates that MORECORE does not return contiguous
1636    regions.  Otherwise, contiguity is exploited in merging together,
1637    when possible, results from consecutive MORECORE calls.
1638
1639    The initial value comes from MORECORE_CONTIGUOUS, but is
1640    changed dynamically if mmap is ever used as an sbrk substitute.
1641  */
1642
1643 #define NONCONTIGUOUS_BIT     (2U)
1644
1645 #define contiguous(M)          (((M)->flags & NONCONTIGUOUS_BIT) == 0)
1646 #define noncontiguous(M)       (((M)->flags & NONCONTIGUOUS_BIT) != 0)
1647 #define set_noncontiguous(M)   ((M)->flags |= NONCONTIGUOUS_BIT)
1648 #define set_contiguous(M)      ((M)->flags &= ~NONCONTIGUOUS_BIT)
1649
1650 /*
1651    Set value of max_fast.
1652    Use impossibly small value if 0.
1653    Precondition: there are no existing fastbin chunks.
1654    Setting the value clears fastchunk bit but preserves noncontiguous bit.
1655  */
1656
1657 #define set_max_fast(s) \
1658   global_max_fast = (((s) == 0)                                               \
1659                      ? SMALLBIN_WIDTH : ((s + SIZE_SZ) & ~MALLOC_ALIGN_MASK))
1660 #define get_max_fast() global_max_fast
1661
1662
1663 /*
1664    ----------- Internal state representation and initialization -----------
1665  */
1666
1667 struct malloc_state
1668 {
1669   /* Serialize access.  */
1670   mutex_t mutex;
1671
1672   /* Flags (formerly in max_fast).  */
1673   int flags;
1674
1675   /* Fastbins */
1676   mfastbinptr fastbinsY[NFASTBINS];
1677
1678   /* Base of the topmost chunk -- not otherwise kept in a bin */
1679   mchunkptr top;
1680
1681   /* The remainder from the most recent split of a small request */
1682   mchunkptr last_remainder;
1683
1684   /* Normal bins packed as described above */
1685   mchunkptr bins[NBINS * 2 - 2];
1686
1687   /* Bitmap of bins */
1688   unsigned int binmap[BINMAPSIZE];
1689
1690   /* Linked list */
1691   struct malloc_state *next;
1692
1693   /* Linked list for free arenas.  */
1694   struct malloc_state *next_free;
1695
1696   /* Memory allocated from the system in this arena.  */
1697   INTERNAL_SIZE_T system_mem;
1698   INTERNAL_SIZE_T max_system_mem;
1699 };
1700
1701 struct malloc_par
1702 {
1703   /* Tunable parameters */
1704   unsigned long trim_threshold;
1705   INTERNAL_SIZE_T top_pad;
1706   INTERNAL_SIZE_T mmap_threshold;
1707   INTERNAL_SIZE_T arena_test;
1708   INTERNAL_SIZE_T arena_max;
1709
1710   /* Memory map support */
1711   int n_mmaps;
1712   int n_mmaps_max;
1713   int max_n_mmaps;
1714   /* the mmap_threshold is dynamic, until the user sets
1715      it manually, at which point we need to disable any
1716      dynamic behavior. */
1717   int no_dyn_threshold;
1718
1719   /* Statistics */
1720   INTERNAL_SIZE_T mmapped_mem;
1721   /*INTERNAL_SIZE_T  sbrked_mem;*/
1722   /*INTERNAL_SIZE_T  max_sbrked_mem;*/
1723   INTERNAL_SIZE_T max_mmapped_mem;
1724   INTERNAL_SIZE_T max_total_mem;  /* only kept for NO_THREADS */
1725
1726   /* First address handed out by MORECORE/sbrk.  */
1727   char *sbrk_base;
1728 };
1729
1730 /* There are several instances of this struct ("arenas") in this
1731    malloc.  If you are adapting this malloc in a way that does NOT use
1732    a static or mmapped malloc_state, you MUST explicitly zero-fill it
1733    before using. This malloc relies on the property that malloc_state
1734    is initialized to all zeroes (as is true of C statics).  */
1735
1736 static struct malloc_state main_arena =
1737 {
1738   .mutex = MUTEX_INITIALIZER,
1739   .next = &main_arena
1740 };
1741
1742 /* There is only one instance of the malloc parameters.  */
1743
1744 static struct malloc_par mp_ =
1745 {
1746   .top_pad = DEFAULT_TOP_PAD,
1747   .n_mmaps_max = DEFAULT_MMAP_MAX,
1748   .mmap_threshold = DEFAULT_MMAP_THRESHOLD,
1749   .trim_threshold = DEFAULT_TRIM_THRESHOLD,
1750 #define NARENAS_FROM_NCORES(n) ((n) * (sizeof (long) == 4 ? 2 : 8))
1751   .arena_test = NARENAS_FROM_NCORES (1)
1752 };
1753
1754
1755 /*  Non public mallopt parameters.  */
1756 #define M_ARENA_TEST -7
1757 #define M_ARENA_MAX  -8
1758
1759
1760 /* Maximum size of memory handled in fastbins.  */
1761 static INTERNAL_SIZE_T global_max_fast;
1762
1763 /*
1764    Initialize a malloc_state struct.
1765
1766    This is called only from within malloc_consolidate, which needs
1767    be called in the same contexts anyway.  It is never called directly
1768    outside of malloc_consolidate because some optimizing compilers try
1769    to inline it at all call points, which turns out not to be an
1770    optimization at all. (Inlining it in malloc_consolidate is fine though.)
1771  */
1772
1773 static void
1774 malloc_init_state (mstate av)
1775 {
1776   int i;
1777   mbinptr bin;
1778
1779   /* Establish circular links for normal bins */
1780   for (i = 1; i < NBINS; ++i)
1781     {
1782       bin = bin_at (av, i);
1783       bin->fd = bin->bk = bin;
1784     }
1785
1786 #if MORECORE_CONTIGUOUS
1787   if (av != &main_arena)
1788 #endif
1789   set_noncontiguous (av);
1790   if (av == &main_arena)
1791     set_max_fast (DEFAULT_MXFAST);
1792   av->flags |= FASTCHUNKS_BIT;
1793
1794   av->top = initial_top (av);
1795 }
1796
1797 /*
1798    Other internal utilities operating on mstates
1799  */
1800
1801 static void *sysmalloc (INTERNAL_SIZE_T, mstate);
1802 static int      systrim (size_t, mstate);
1803 static void     malloc_consolidate (mstate);
1804
1805
1806 /* -------------- Early definitions for debugging hooks ---------------- */
1807
1808 /* Define and initialize the hook variables.  These weak definitions must
1809    appear before any use of the variables in a function (arena.c uses one).  */
1810 #ifndef weak_variable
1811 /* In GNU libc we want the hook variables to be weak definitions to
1812    avoid a problem with Emacs.  */
1813 # define weak_variable weak_function
1814 #endif
1815
1816 /* Forward declarations.  */
1817 static void *malloc_hook_ini (size_t sz,
1818                               const void *caller) __THROW;
1819 static void *realloc_hook_ini (void *ptr, size_t sz,
1820                                const void *caller) __THROW;
1821 static void *memalign_hook_ini (size_t alignment, size_t sz,
1822                                 const void *caller) __THROW;
1823
1824 void weak_variable (*__malloc_initialize_hook) (void) = NULL;
1825 void weak_variable (*__free_hook) (void *__ptr,
1826                                    const void *) = NULL;
1827 void *weak_variable (*__malloc_hook)
1828   (size_t __size, const void *) = malloc_hook_ini;
1829 void *weak_variable (*__realloc_hook)
1830   (void *__ptr, size_t __size, const void *)
1831   = realloc_hook_ini;
1832 void *weak_variable (*__memalign_hook)
1833   (size_t __alignment, size_t __size, const void *)
1834   = memalign_hook_ini;
1835 void weak_variable (*__after_morecore_hook) (void) = NULL;
1836
1837
1838 /* ---------------- Error behavior ------------------------------------ */
1839
1840 #ifndef DEFAULT_CHECK_ACTION
1841 # define DEFAULT_CHECK_ACTION 3
1842 #endif
1843
1844 static int check_action = DEFAULT_CHECK_ACTION;
1845
1846
1847 /* ------------------ Testing support ----------------------------------*/
1848
1849 static int perturb_byte;
1850
1851 static inline void
1852 alloc_perturb (char *p, size_t n)
1853 {
1854   if (__glibc_unlikely (perturb_byte))
1855     memset (p, perturb_byte ^ 0xff, n);
1856 }
1857
1858 static inline void
1859 free_perturb (char *p, size_t n)
1860 {
1861   if (__glibc_unlikely (perturb_byte))
1862     memset (p, perturb_byte, n);
1863 }
1864
1865
1866
1867 #include <stap-probe.h>
1868
1869 /* ------------------- Support for multiple arenas -------------------- */
1870 #include "arena.c"
1871
1872 /*
1873    Debugging support
1874
1875    These routines make a number of assertions about the states
1876    of data structures that should be true at all times. If any
1877    are not true, it's very likely that a user program has somehow
1878    trashed memory. (It's also possible that there is a coding error
1879    in malloc. In which case, please report it!)
1880  */
1881
1882 #if !MALLOC_DEBUG
1883
1884 # define check_chunk(A, P)
1885 # define check_free_chunk(A, P)
1886 # define check_inuse_chunk(A, P)
1887 # define check_remalloced_chunk(A, P, N)
1888 # define check_malloced_chunk(A, P, N)
1889 # define check_malloc_state(A)
1890
1891 #else
1892
1893 # define check_chunk(A, P)              do_check_chunk (A, P)
1894 # define check_free_chunk(A, P)         do_check_free_chunk (A, P)
1895 # define check_inuse_chunk(A, P)        do_check_inuse_chunk (A, P)
1896 # define check_remalloced_chunk(A, P, N) do_check_remalloced_chunk (A, P, N)
1897 # define check_malloced_chunk(A, P, N)   do_check_malloced_chunk (A, P, N)
1898 # define check_malloc_state(A)         do_check_malloc_state (A)
1899
1900 /*
1901    Properties of all chunks
1902  */
1903
1904 static void
1905 do_check_chunk (mstate av, mchunkptr p)
1906 {
1907   unsigned long sz = chunksize (p);
1908   /* min and max possible addresses assuming contiguous allocation */
1909   char *max_address = (char *) (av->top) + chunksize (av->top);
1910   char *min_address = max_address - av->system_mem;
1911
1912   if (!chunk_is_mmapped (p))
1913     {
1914       /* Has legal address ... */
1915       if (p != av->top)
1916         {
1917           if (contiguous (av))
1918             {
1919               assert (((char *) p) >= min_address);
1920               assert (((char *) p + sz) <= ((char *) (av->top)));
1921             }
1922         }
1923       else
1924         {
1925           /* top size is always at least MINSIZE */
1926           assert ((unsigned long) (sz) >= MINSIZE);
1927           /* top predecessor always marked inuse */
1928           assert (prev_inuse (p));
1929         }
1930     }
1931   else
1932     {
1933       /* address is outside main heap  */
1934       if (contiguous (av) && av->top != initial_top (av))
1935         {
1936           assert (((char *) p) < min_address || ((char *) p) >= max_address);
1937         }
1938       /* chunk is page-aligned */
1939       assert (((p->prev_size + sz) & (GLRO (dl_pagesize) - 1)) == 0);
1940       /* mem is aligned */
1941       assert (aligned_OK (chunk2mem (p)));
1942     }
1943 }
1944
1945 /*
1946    Properties of free chunks
1947  */
1948
1949 static void
1950 do_check_free_chunk (mstate av, mchunkptr p)
1951 {
1952   INTERNAL_SIZE_T sz = p->size & ~(PREV_INUSE | NON_MAIN_ARENA);
1953   mchunkptr next = chunk_at_offset (p, sz);
1954
1955   do_check_chunk (av, p);
1956
1957   /* Chunk must claim to be free ... */
1958   assert (!inuse (p));
1959   assert (!chunk_is_mmapped (p));
1960
1961   /* Unless a special marker, must have OK fields */
1962   if ((unsigned long) (sz) >= MINSIZE)
1963     {
1964       assert ((sz & MALLOC_ALIGN_MASK) == 0);
1965       assert (aligned_OK (chunk2mem (p)));
1966       /* ... matching footer field */
1967       assert (next->prev_size == sz);
1968       /* ... and is fully consolidated */
1969       assert (prev_inuse (p));
1970       assert (next == av->top || inuse (next));
1971
1972       /* ... and has minimally sane links */
1973       assert (p->fd->bk == p);
1974       assert (p->bk->fd == p);
1975     }
1976   else /* markers are always of size SIZE_SZ */
1977     assert (sz == SIZE_SZ);
1978 }
1979
1980 /*
1981    Properties of inuse chunks
1982  */
1983
1984 static void
1985 do_check_inuse_chunk (mstate av, mchunkptr p)
1986 {
1987   mchunkptr next;
1988
1989   do_check_chunk (av, p);
1990
1991   if (chunk_is_mmapped (p))
1992     return; /* mmapped chunks have no next/prev */
1993
1994   /* Check whether it claims to be in use ... */
1995   assert (inuse (p));
1996
1997   next = next_chunk (p);
1998
1999   /* ... and is surrounded by OK chunks.
2000      Since more things can be checked with free chunks than inuse ones,
2001      if an inuse chunk borders them and debug is on, it's worth doing them.
2002    */
2003   if (!prev_inuse (p))
2004     {
2005       /* Note that we cannot even look at prev unless it is not inuse */
2006       mchunkptr prv = prev_chunk (p);
2007       assert (next_chunk (prv) == p);
2008       do_check_free_chunk (av, prv);
2009     }
2010
2011   if (next == av->top)
2012     {
2013       assert (prev_inuse (next));
2014       assert (chunksize (next) >= MINSIZE);
2015     }
2016   else if (!inuse (next))
2017     do_check_free_chunk (av, next);
2018 }
2019
2020 /*
2021    Properties of chunks recycled from fastbins
2022  */
2023
2024 static void
2025 do_check_remalloced_chunk (mstate av, mchunkptr p, INTERNAL_SIZE_T s)
2026 {
2027   INTERNAL_SIZE_T sz = p->size & ~(PREV_INUSE | NON_MAIN_ARENA);
2028
2029   if (!chunk_is_mmapped (p))
2030     {
2031       assert (av == arena_for_chunk (p));
2032       if (chunk_non_main_arena (p))
2033         assert (av != &main_arena);
2034       else
2035         assert (av == &main_arena);
2036     }
2037
2038   do_check_inuse_chunk (av, p);
2039
2040   /* Legal size ... */
2041   assert ((sz & MALLOC_ALIGN_MASK) == 0);
2042   assert ((unsigned long) (sz) >= MINSIZE);
2043   /* ... and alignment */
2044   assert (aligned_OK (chunk2mem (p)));
2045   /* chunk is less than MINSIZE more than request */
2046   assert ((long) (sz) - (long) (s) >= 0);
2047   assert ((long) (sz) - (long) (s + MINSIZE) < 0);
2048 }
2049
2050 /*
2051    Properties of nonrecycled chunks at the point they are malloced
2052  */
2053
2054 static void
2055 do_check_malloced_chunk (mstate av, mchunkptr p, INTERNAL_SIZE_T s)
2056 {
2057   /* same as recycled case ... */
2058   do_check_remalloced_chunk (av, p, s);
2059
2060   /*
2061      ... plus,  must obey implementation invariant that prev_inuse is
2062      always true of any allocated chunk; i.e., that each allocated
2063      chunk borders either a previously allocated and still in-use
2064      chunk, or the base of its memory arena. This is ensured
2065      by making all allocations from the `lowest' part of any found
2066      chunk.  This does not necessarily hold however for chunks
2067      recycled via fastbins.
2068    */
2069
2070   assert (prev_inuse (p));
2071 }
2072
2073
2074 /*
2075    Properties of malloc_state.
2076
2077    This may be useful for debugging malloc, as well as detecting user
2078    programmer errors that somehow write into malloc_state.
2079
2080    If you are extending or experimenting with this malloc, you can
2081    probably figure out how to hack this routine to print out or
2082    display chunk addresses, sizes, bins, and other instrumentation.
2083  */
2084
2085 static void
2086 do_check_malloc_state (mstate av)
2087 {
2088   int i;
2089   mchunkptr p;
2090   mchunkptr q;
2091   mbinptr b;
2092   unsigned int idx;
2093   INTERNAL_SIZE_T size;
2094   unsigned long total = 0;
2095   int max_fast_bin;
2096
2097   /* internal size_t must be no wider than pointer type */
2098   assert (sizeof (INTERNAL_SIZE_T) <= sizeof (char *));
2099
2100   /* alignment is a power of 2 */
2101   assert ((MALLOC_ALIGNMENT & (MALLOC_ALIGNMENT - 1)) == 0);
2102
2103   /* cannot run remaining checks until fully initialized */
2104   if (av->top == 0 || av->top == initial_top (av))
2105     return;
2106
2107   /* pagesize is a power of 2 */
2108   assert ((GLRO (dl_pagesize) & (GLRO (dl_pagesize) - 1)) == 0);
2109
2110   /* A contiguous main_arena is consistent with sbrk_base.  */
2111   if (av == &main_arena && contiguous (av))
2112     assert ((char *) mp_.sbrk_base + av->system_mem ==
2113             (char *) av->top + chunksize (av->top));
2114
2115   /* properties of fastbins */
2116
2117   /* max_fast is in allowed range */
2118   assert ((get_max_fast () & ~1) <= request2size (MAX_FAST_SIZE));
2119
2120   max_fast_bin = fastbin_index (get_max_fast ());
2121
2122   for (i = 0; i < NFASTBINS; ++i)
2123     {
2124       p = fastbin (av, i);
2125
2126       /* The following test can only be performed for the main arena.
2127          While mallopt calls malloc_consolidate to get rid of all fast
2128          bins (especially those larger than the new maximum) this does
2129          only happen for the main arena.  Trying to do this for any
2130          other arena would mean those arenas have to be locked and
2131          malloc_consolidate be called for them.  This is excessive.  And
2132          even if this is acceptable to somebody it still cannot solve
2133          the problem completely since if the arena is locked a
2134          concurrent malloc call might create a new arena which then
2135          could use the newly invalid fast bins.  */
2136
2137       /* all bins past max_fast are empty */
2138       if (av == &main_arena && i > max_fast_bin)
2139         assert (p == 0);
2140
2141       while (p != 0)
2142         {
2143           /* each chunk claims to be inuse */
2144           do_check_inuse_chunk (av, p);
2145           total += chunksize (p);
2146           /* chunk belongs in this bin */
2147           assert (fastbin_index (chunksize (p)) == i);
2148           p = p->fd;
2149         }
2150     }
2151
2152   if (total != 0)
2153     assert (have_fastchunks (av));
2154   else if (!have_fastchunks (av))
2155     assert (total == 0);
2156
2157   /* check normal bins */
2158   for (i = 1; i < NBINS; ++i)
2159     {
2160       b = bin_at (av, i);
2161
2162       /* binmap is accurate (except for bin 1 == unsorted_chunks) */
2163       if (i >= 2)
2164         {
2165           unsigned int binbit = get_binmap (av, i);
2166           int empty = last (b) == b;
2167           if (!binbit)
2168             assert (empty);
2169           else if (!empty)
2170             assert (binbit);
2171         }
2172
2173       for (p = last (b); p != b; p = p->bk)
2174         {
2175           /* each chunk claims to be free */
2176           do_check_free_chunk (av, p);
2177           size = chunksize (p);
2178           total += size;
2179           if (i >= 2)
2180             {
2181               /* chunk belongs in bin */
2182               idx = bin_index (size);
2183               assert (idx == i);
2184               /* lists are sorted */
2185               assert (p->bk == b ||
2186                       (unsigned long) chunksize (p->bk) >= (unsigned long) chunksize (p));
2187
2188               if (!in_smallbin_range (size))
2189                 {
2190                   if (p->fd_nextsize != NULL)
2191                     {
2192                       if (p->fd_nextsize == p)
2193                         assert (p->bk_nextsize == p);
2194                       else
2195                         {
2196                           if (p->fd_nextsize == first (b))
2197                             assert (chunksize (p) < chunksize (p->fd_nextsize));
2198                           else
2199                             assert (chunksize (p) > chunksize (p->fd_nextsize));
2200
2201                           if (p == first (b))
2202                             assert (chunksize (p) > chunksize (p->bk_nextsize));
2203                           else
2204                             assert (chunksize (p) < chunksize (p->bk_nextsize));
2205                         }
2206                     }
2207                   else
2208                     assert (p->bk_nextsize == NULL);
2209                 }
2210             }
2211           else if (!in_smallbin_range (size))
2212             assert (p->fd_nextsize == NULL && p->bk_nextsize == NULL);
2213           /* chunk is followed by a legal chain of inuse chunks */
2214           for (q = next_chunk (p);
2215                (q != av->top && inuse (q) &&
2216                 (unsigned long) (chunksize (q)) >= MINSIZE);
2217                q = next_chunk (q))
2218             do_check_inuse_chunk (av, q);
2219         }
2220     }
2221
2222   /* top chunk is OK */
2223   check_chunk (av, av->top);
2224 }
2225 #endif
2226
2227
2228 /* ----------------- Support for debugging hooks -------------------- */
2229 #include "hooks.c"
2230
2231
2232 /* ----------- Routines dealing with system allocation -------------- */
2233
2234 /*
2235    sysmalloc handles malloc cases requiring more memory from the system.
2236    On entry, it is assumed that av->top does not have enough
2237    space to service request for nb bytes, thus requiring that av->top
2238    be extended or replaced.
2239  */
2240
2241 static void *
2242 sysmalloc (INTERNAL_SIZE_T nb, mstate av)
2243 {
2244   mchunkptr old_top;              /* incoming value of av->top */
2245   INTERNAL_SIZE_T old_size;       /* its size */
2246   char *old_end;                  /* its end address */
2247
2248   long size;                      /* arg to first MORECORE or mmap call */
2249   char *brk;                      /* return value from MORECORE */
2250
2251   long correction;                /* arg to 2nd MORECORE call */
2252   char *snd_brk;                  /* 2nd return val */
2253
2254   INTERNAL_SIZE_T front_misalign; /* unusable bytes at front of new space */
2255   INTERNAL_SIZE_T end_misalign;   /* partial page left at end of new space */
2256   char *aligned_brk;              /* aligned offset into brk */
2257
2258   mchunkptr p;                    /* the allocated/returned chunk */
2259   mchunkptr remainder;            /* remainder from allocation */
2260   unsigned long remainder_size;   /* its size */
2261
2262
2263   size_t pagemask = GLRO (dl_pagesize) - 1;
2264   bool tried_mmap = false;
2265
2266
2267   /*
2268      If have mmap, and the request size meets the mmap threshold, and
2269      the system supports mmap, and there are few enough currently
2270      allocated mmapped regions, try to directly map this request
2271      rather than expanding top.
2272    */
2273
2274   if ((unsigned long) (nb) >= (unsigned long) (mp_.mmap_threshold) &&
2275       (mp_.n_mmaps < mp_.n_mmaps_max))
2276     {
2277       char *mm;           /* return value from mmap call*/
2278
2279     try_mmap:
2280       /*
2281          Round up size to nearest page.  For mmapped chunks, the overhead
2282          is one SIZE_SZ unit larger than for normal chunks, because there
2283          is no following chunk whose prev_size field could be used.
2284
2285          See the front_misalign handling below, for glibc there is no
2286          need for further alignments unless we have have high alignment.
2287        */
2288       if (MALLOC_ALIGNMENT == 2 * SIZE_SZ)
2289         size = (nb + SIZE_SZ + pagemask) & ~pagemask;
2290       else
2291         size = (nb + SIZE_SZ + MALLOC_ALIGN_MASK + pagemask) & ~pagemask;
2292       tried_mmap = true;
2293
2294       /* Don't try if size wraps around 0 */
2295       if ((unsigned long) (size) > (unsigned long) (nb))
2296         {
2297           mm = (char *) (MMAP (0, size, PROT_READ | PROT_WRITE, 0));
2298
2299           if (mm != MAP_FAILED)
2300             {
2301               /*
2302                  The offset to the start of the mmapped region is stored
2303                  in the prev_size field of the chunk. This allows us to adjust
2304                  returned start address to meet alignment requirements here
2305                  and in memalign(), and still be able to compute proper
2306                  address argument for later munmap in free() and realloc().
2307                */
2308
2309               if (MALLOC_ALIGNMENT == 2 * SIZE_SZ)
2310                 {
2311                   /* For glibc, chunk2mem increases the address by 2*SIZE_SZ and
2312                      MALLOC_ALIGN_MASK is 2*SIZE_SZ-1.  Each mmap'ed area is page
2313                      aligned and therefore definitely MALLOC_ALIGN_MASK-aligned.  */
2314                   assert (((INTERNAL_SIZE_T) chunk2mem (mm) & MALLOC_ALIGN_MASK) == 0);
2315                   front_misalign = 0;
2316                 }
2317               else
2318                 front_misalign = (INTERNAL_SIZE_T) chunk2mem (mm) & MALLOC_ALIGN_MASK;
2319               if (front_misalign > 0)
2320                 {
2321                   correction = MALLOC_ALIGNMENT - front_misalign;
2322                   p = (mchunkptr) (mm + correction);
2323                   p->prev_size = correction;
2324                   set_head (p, (size - correction) | IS_MMAPPED);
2325                 }
2326               else
2327                 {
2328                   p = (mchunkptr) mm;
2329                   set_head (p, size | IS_MMAPPED);
2330                 }
2331
2332               /* update statistics */
2333
2334               int new = atomic_exchange_and_add (&mp_.n_mmaps, 1) + 1;
2335               atomic_max (&mp_.max_n_mmaps, new);
2336
2337               unsigned long sum;
2338               sum = atomic_exchange_and_add (&mp_.mmapped_mem, size) + size;
2339               atomic_max (&mp_.max_mmapped_mem, sum);
2340
2341               check_chunk (av, p);
2342
2343               return chunk2mem (p);
2344             }
2345         }
2346     }
2347
2348   /* Record incoming configuration of top */
2349
2350   old_top = av->top;
2351   old_size = chunksize (old_top);
2352   old_end = (char *) (chunk_at_offset (old_top, old_size));
2353
2354   brk = snd_brk = (char *) (MORECORE_FAILURE);
2355
2356   /*
2357      If not the first time through, we require old_size to be
2358      at least MINSIZE and to have prev_inuse set.
2359    */
2360
2361   assert ((old_top == initial_top (av) && old_size == 0) ||
2362           ((unsigned long) (old_size) >= MINSIZE &&
2363            prev_inuse (old_top) &&
2364            ((unsigned long) old_end & pagemask) == 0));
2365
2366   /* Precondition: not enough current space to satisfy nb request */
2367   assert ((unsigned long) (old_size) < (unsigned long) (nb + MINSIZE));
2368
2369
2370   if (av != &main_arena)
2371     {
2372       heap_info *old_heap, *heap;
2373       size_t old_heap_size;
2374
2375       /* First try to extend the current heap. */
2376       old_heap = heap_for_ptr (old_top);
2377       old_heap_size = old_heap->size;
2378       if ((long) (MINSIZE + nb - old_size) > 0
2379           && grow_heap (old_heap, MINSIZE + nb - old_size) == 0)
2380         {
2381           av->system_mem += old_heap->size - old_heap_size;
2382           arena_mem += old_heap->size - old_heap_size;
2383           set_head (old_top, (((char *) old_heap + old_heap->size) - (char *) old_top)
2384                     | PREV_INUSE);
2385         }
2386       else if ((heap = new_heap (nb + (MINSIZE + sizeof (*heap)), mp_.top_pad)))
2387         {
2388           /* Use a newly allocated heap.  */
2389           heap->ar_ptr = av;
2390           heap->prev = old_heap;
2391           av->system_mem += heap->size;
2392           arena_mem += heap->size;
2393           /* Set up the new top.  */
2394           top (av) = chunk_at_offset (heap, sizeof (*heap));
2395           set_head (top (av), (heap->size - sizeof (*heap)) | PREV_INUSE);
2396
2397           /* Setup fencepost and free the old top chunk with a multiple of
2398              MALLOC_ALIGNMENT in size. */
2399           /* The fencepost takes at least MINSIZE bytes, because it might
2400              become the top chunk again later.  Note that a footer is set
2401              up, too, although the chunk is marked in use. */
2402           old_size = (old_size - MINSIZE) & ~MALLOC_ALIGN_MASK;
2403           set_head (chunk_at_offset (old_top, old_size + 2 * SIZE_SZ), 0 | PREV_INUSE);
2404           if (old_size >= MINSIZE)
2405             {
2406               set_head (chunk_at_offset (old_top, old_size), (2 * SIZE_SZ) | PREV_INUSE);
2407               set_foot (chunk_at_offset (old_top, old_size), (2 * SIZE_SZ));
2408               set_head (old_top, old_size | PREV_INUSE | NON_MAIN_ARENA);
2409               _int_free (av, old_top, 1);
2410             }
2411           else
2412             {
2413               set_head (old_top, (old_size + 2 * SIZE_SZ) | PREV_INUSE);
2414               set_foot (old_top, (old_size + 2 * SIZE_SZ));
2415             }
2416         }
2417       else if (!tried_mmap)
2418         /* We can at least try to use to mmap memory.  */
2419         goto try_mmap;
2420     }
2421   else     /* av == main_arena */
2422
2423
2424     { /* Request enough space for nb + pad + overhead */
2425       size = nb + mp_.top_pad + MINSIZE;
2426
2427       /*
2428          If contiguous, we can subtract out existing space that we hope to
2429          combine with new space. We add it back later only if
2430          we don't actually get contiguous space.
2431        */
2432
2433       if (contiguous (av))
2434         size -= old_size;
2435
2436       /*
2437          Round to a multiple of page size.
2438          If MORECORE is not contiguous, this ensures that we only call it
2439          with whole-page arguments.  And if MORECORE is contiguous and
2440          this is not first time through, this preserves page-alignment of
2441          previous calls. Otherwise, we correct to page-align below.
2442        */
2443
2444       size = (size + pagemask) & ~pagemask;
2445
2446       /*
2447          Don't try to call MORECORE if argument is so big as to appear
2448          negative. Note that since mmap takes size_t arg, it may succeed
2449          below even if we cannot call MORECORE.
2450        */
2451
2452       if (size > 0)
2453         {
2454           brk = (char *) (MORECORE (size));
2455           LIBC_PROBE (memory_sbrk_more, 2, brk, size);
2456         }
2457
2458       if (brk != (char *) (MORECORE_FAILURE))
2459         {
2460           /* Call the `morecore' hook if necessary.  */
2461           void (*hook) (void) = atomic_forced_read (__after_morecore_hook);
2462           if (__builtin_expect (hook != NULL, 0))
2463             (*hook)();
2464         }
2465       else
2466         {
2467           /*
2468              If have mmap, try using it as a backup when MORECORE fails or
2469              cannot be used. This is worth doing on systems that have "holes" in
2470              address space, so sbrk cannot extend to give contiguous space, but
2471              space is available elsewhere.  Note that we ignore mmap max count
2472              and threshold limits, since the space will not be used as a
2473              segregated mmap region.
2474            */
2475
2476           /* Cannot merge with old top, so add its size back in */
2477           if (contiguous (av))
2478             size = (size + old_size + pagemask) & ~pagemask;
2479
2480           /* If we are relying on mmap as backup, then use larger units */
2481           if ((unsigned long) (size) < (unsigned long) (MMAP_AS_MORECORE_SIZE))
2482             size = MMAP_AS_MORECORE_SIZE;
2483
2484           /* Don't try if size wraps around 0 */
2485           if ((unsigned long) (size) > (unsigned long) (nb))
2486             {
2487               char *mbrk = (char *) (MMAP (0, size, PROT_READ | PROT_WRITE, 0));
2488
2489               if (mbrk != MAP_FAILED)
2490                 {
2491                   /* We do not need, and cannot use, another sbrk call to find end */
2492                   brk = mbrk;
2493                   snd_brk = brk + size;
2494
2495                   /*
2496                      Record that we no longer have a contiguous sbrk region.
2497                      After the first time mmap is used as backup, we do not
2498                      ever rely on contiguous space since this could incorrectly
2499                      bridge regions.
2500                    */
2501                   set_noncontiguous (av);
2502                 }
2503             }
2504         }
2505
2506       if (brk != (char *) (MORECORE_FAILURE))
2507         {
2508           if (mp_.sbrk_base == 0)
2509             mp_.sbrk_base = brk;
2510           av->system_mem += size;
2511
2512           /*
2513              If MORECORE extends previous space, we can likewise extend top size.
2514            */
2515
2516           if (brk == old_end && snd_brk == (char *) (MORECORE_FAILURE))
2517             set_head (old_top, (size + old_size) | PREV_INUSE);
2518
2519           else if (contiguous (av) && old_size && brk < old_end)
2520             {
2521               /* Oops!  Someone else killed our space..  Can't touch anything.  */
2522               malloc_printerr (3, "break adjusted to free malloc space", brk);
2523             }
2524
2525           /*
2526              Otherwise, make adjustments:
2527
2528            * If the first time through or noncontiguous, we need to call sbrk
2529               just to find out where the end of memory lies.
2530
2531            * We need to ensure that all returned chunks from malloc will meet
2532               MALLOC_ALIGNMENT
2533
2534            * If there was an intervening foreign sbrk, we need to adjust sbrk
2535               request size to account for fact that we will not be able to
2536               combine new space with existing space in old_top.
2537
2538            * Almost all systems internally allocate whole pages at a time, in
2539               which case we might as well use the whole last page of request.
2540               So we allocate enough more memory to hit a page boundary now,
2541               which in turn causes future contiguous calls to page-align.
2542            */
2543
2544           else
2545             {
2546               front_misalign = 0;
2547               end_misalign = 0;
2548               correction = 0;
2549               aligned_brk = brk;
2550
2551               /* handle contiguous cases */
2552               if (contiguous (av))
2553                 {
2554                   /* Count foreign sbrk as system_mem.  */
2555                   if (old_size)
2556                     av->system_mem += brk - old_end;
2557
2558                   /* Guarantee alignment of first new chunk made from this space */
2559
2560                   front_misalign = (INTERNAL_SIZE_T) chunk2mem (brk) & MALLOC_ALIGN_MASK;
2561                   if (front_misalign > 0)
2562                     {
2563                       /*
2564                          Skip over some bytes to arrive at an aligned position.
2565                          We don't need to specially mark these wasted front bytes.
2566                          They will never be accessed anyway because
2567                          prev_inuse of av->top (and any chunk created from its start)
2568                          is always true after initialization.
2569                        */
2570
2571                       correction = MALLOC_ALIGNMENT - front_misalign;
2572                       aligned_brk += correction;
2573                     }
2574
2575                   /*
2576                      If this isn't adjacent to existing space, then we will not
2577                      be able to merge with old_top space, so must add to 2nd request.
2578                    */
2579
2580                   correction += old_size;
2581
2582                   /* Extend the end address to hit a page boundary */
2583                   end_misalign = (INTERNAL_SIZE_T) (brk + size + correction);
2584                   correction += ((end_misalign + pagemask) & ~pagemask) - end_misalign;
2585
2586                   assert (correction >= 0);
2587                   snd_brk = (char *) (MORECORE (correction));
2588
2589                   /*
2590                      If can't allocate correction, try to at least find out current
2591                      brk.  It might be enough to proceed without failing.
2592
2593                      Note that if second sbrk did NOT fail, we assume that space
2594                      is contiguous with first sbrk. This is a safe assumption unless
2595                      program is multithreaded but doesn't use locks and a foreign sbrk
2596                      occurred between our first and second calls.
2597                    */
2598
2599                   if (snd_brk == (char *) (MORECORE_FAILURE))
2600                     {
2601                       correction = 0;
2602                       snd_brk = (char *) (MORECORE (0));
2603                     }
2604                   else
2605                     {
2606                       /* Call the `morecore' hook if necessary.  */
2607                       void (*hook) (void) = atomic_forced_read (__after_morecore_hook);
2608                       if (__builtin_expect (hook != NULL, 0))
2609                         (*hook)();
2610                     }
2611                 }
2612
2613               /* handle non-contiguous cases */
2614               else
2615                 {
2616                   if (MALLOC_ALIGNMENT == 2 * SIZE_SZ)
2617                     /* MORECORE/mmap must correctly align */
2618                     assert (((unsigned long) chunk2mem (brk) & MALLOC_ALIGN_MASK) == 0);
2619                   else
2620                     {
2621                       front_misalign = (INTERNAL_SIZE_T) chunk2mem (brk) & MALLOC_ALIGN_MASK;
2622                       if (front_misalign > 0)
2623                         {
2624                           /*
2625                              Skip over some bytes to arrive at an aligned position.
2626                              We don't need to specially mark these wasted front bytes.
2627                              They will never be accessed anyway because
2628                              prev_inuse of av->top (and any chunk created from its start)
2629                              is always true after initialization.
2630                            */
2631
2632                           aligned_brk += MALLOC_ALIGNMENT - front_misalign;
2633                         }
2634                     }
2635
2636                   /* Find out current end of memory */
2637                   if (snd_brk == (char *) (MORECORE_FAILURE))
2638                     {
2639                       snd_brk = (char *) (MORECORE (0));
2640                     }
2641                 }
2642
2643               /* Adjust top based on results of second sbrk */
2644               if (snd_brk != (char *) (MORECORE_FAILURE))
2645                 {
2646                   av->top = (mchunkptr) aligned_brk;
2647                   set_head (av->top, (snd_brk - aligned_brk + correction) | PREV_INUSE);
2648                   av->system_mem += correction;
2649
2650                   /*
2651                      If not the first time through, we either have a
2652                      gap due to foreign sbrk or a non-contiguous region.  Insert a
2653                      double fencepost at old_top to prevent consolidation with space
2654                      we don't own. These fenceposts are artificial chunks that are
2655                      marked as inuse and are in any case too small to use.  We need
2656                      two to make sizes and alignments work out.
2657                    */
2658
2659                   if (old_size != 0)
2660                     {
2661                       /*
2662                          Shrink old_top to insert fenceposts, keeping size a
2663                          multiple of MALLOC_ALIGNMENT. We know there is at least
2664                          enough space in old_top to do this.
2665                        */
2666                       old_size = (old_size - 4 * SIZE_SZ) & ~MALLOC_ALIGN_MASK;
2667                       set_head (old_top, old_size | PREV_INUSE);
2668
2669                       /*
2670                          Note that the following assignments completely overwrite
2671                          old_top when old_size was previously MINSIZE.  This is
2672                          intentional. We need the fencepost, even if old_top otherwise gets
2673                          lost.
2674                        */
2675                       chunk_at_offset (old_top, old_size)->size =
2676                         (2 * SIZE_SZ) | PREV_INUSE;
2677
2678                       chunk_at_offset (old_top, old_size + 2 * SIZE_SZ)->size =
2679                         (2 * SIZE_SZ) | PREV_INUSE;
2680
2681                       /* If possible, release the rest. */
2682                       if (old_size >= MINSIZE)
2683                         {
2684                           _int_free (av, old_top, 1);
2685                         }
2686                     }
2687                 }
2688             }
2689         }
2690     } /* if (av !=  &main_arena) */
2691
2692   if ((unsigned long) av->system_mem > (unsigned long) (av->max_system_mem))
2693     av->max_system_mem = av->system_mem;
2694   check_malloc_state (av);
2695
2696   /* finally, do the allocation */
2697   p = av->top;
2698   size = chunksize (p);
2699
2700   /* check that one of the above allocation paths succeeded */
2701   if ((unsigned long) (size) >= (unsigned long) (nb + MINSIZE))
2702     {
2703       remainder_size = size - nb;
2704       remainder = chunk_at_offset (p, nb);
2705       av->top = remainder;
2706       set_head (p, nb | PREV_INUSE | (av != &main_arena ? NON_MAIN_ARENA : 0));
2707       set_head (remainder, remainder_size | PREV_INUSE);
2708       check_malloced_chunk (av, p, nb);
2709       return chunk2mem (p);
2710     }
2711
2712   /* catch all failure paths */
2713   __set_errno (ENOMEM);
2714   return 0;
2715 }
2716
2717
2718 /*
2719    systrim is an inverse of sorts to sysmalloc.  It gives memory back
2720    to the system (via negative arguments to sbrk) if there is unused
2721    memory at the `high' end of the malloc pool. It is called
2722    automatically by free() when top space exceeds the trim
2723    threshold. It is also called by the public malloc_trim routine.  It
2724    returns 1 if it actually released any memory, else 0.
2725  */
2726
2727 static int
2728 systrim (size_t pad, mstate av)
2729 {
2730   long top_size;         /* Amount of top-most memory */
2731   long extra;            /* Amount to release */
2732   long released;         /* Amount actually released */
2733   char *current_brk;     /* address returned by pre-check sbrk call */
2734   char *new_brk;         /* address returned by post-check sbrk call */
2735   size_t pagesz;
2736   long top_area;
2737
2738   pagesz = GLRO (dl_pagesize);
2739   top_size = chunksize (av->top);
2740
2741   top_area = top_size - MINSIZE - 1;
2742   if (top_area <= pad)
2743     return 0;
2744
2745   /* Release in pagesize units, keeping at least one page */
2746   extra = (top_area - pad) & ~(pagesz - 1);
2747
2748   /*
2749      Only proceed if end of memory is where we last set it.
2750      This avoids problems if there were foreign sbrk calls.
2751    */
2752   current_brk = (char *) (MORECORE (0));
2753   if (current_brk == (char *) (av->top) + top_size)
2754     {
2755       /*
2756          Attempt to release memory. We ignore MORECORE return value,
2757          and instead call again to find out where new end of memory is.
2758          This avoids problems if first call releases less than we asked,
2759          of if failure somehow altered brk value. (We could still
2760          encounter problems if it altered brk in some very bad way,
2761          but the only thing we can do is adjust anyway, which will cause
2762          some downstream failure.)
2763        */
2764
2765       MORECORE (-extra);
2766       /* Call the `morecore' hook if necessary.  */
2767       void (*hook) (void) = atomic_forced_read (__after_morecore_hook);
2768       if (__builtin_expect (hook != NULL, 0))
2769         (*hook)();
2770       new_brk = (char *) (MORECORE (0));
2771
2772       LIBC_PROBE (memory_sbrk_less, 2, new_brk, extra);
2773
2774       if (new_brk != (char *) MORECORE_FAILURE)
2775         {
2776           released = (long) (current_brk - new_brk);
2777
2778           if (released != 0)
2779             {
2780               /* Success. Adjust top. */
2781               av->system_mem -= released;
2782               set_head (av->top, (top_size - released) | PREV_INUSE);
2783               check_malloc_state (av);
2784               return 1;
2785             }
2786         }
2787     }
2788   return 0;
2789 }
2790
2791 static void
2792 internal_function
2793 munmap_chunk (mchunkptr p)
2794 {
2795   INTERNAL_SIZE_T size = chunksize (p);
2796
2797   assert (chunk_is_mmapped (p));
2798
2799   uintptr_t block = (uintptr_t) p - p->prev_size;
2800   size_t total_size = p->prev_size + size;
2801   /* Unfortunately we have to do the compilers job by hand here.  Normally
2802      we would test BLOCK and TOTAL-SIZE separately for compliance with the
2803      page size.  But gcc does not recognize the optimization possibility
2804      (in the moment at least) so we combine the two values into one before
2805      the bit test.  */
2806   if (__builtin_expect (((block | total_size) & (GLRO (dl_pagesize) - 1)) != 0, 0))
2807     {
2808       malloc_printerr (check_action, "munmap_chunk(): invalid pointer",
2809                        chunk2mem (p));
2810       return;
2811     }
2812
2813   atomic_decrement (&mp_.n_mmaps);
2814   atomic_add (&mp_.mmapped_mem, -total_size);
2815
2816   /* If munmap failed the process virtual memory address space is in a
2817      bad shape.  Just leave the block hanging around, the process will
2818      terminate shortly anyway since not much can be done.  */
2819   __munmap ((char *) block, total_size);
2820 }
2821
2822 #if HAVE_MREMAP
2823
2824 static mchunkptr
2825 internal_function
2826 mremap_chunk (mchunkptr p, size_t new_size)
2827 {
2828   size_t page_mask = GLRO (dl_pagesize) - 1;
2829   INTERNAL_SIZE_T offset = p->prev_size;
2830   INTERNAL_SIZE_T size = chunksize (p);
2831   char *cp;
2832
2833   assert (chunk_is_mmapped (p));
2834   assert (((size + offset) & (GLRO (dl_pagesize) - 1)) == 0);
2835
2836   /* Note the extra SIZE_SZ overhead as in mmap_chunk(). */
2837   new_size = (new_size + offset + SIZE_SZ + page_mask) & ~page_mask;
2838
2839   /* No need to remap if the number of pages does not change.  */
2840   if (size + offset == new_size)
2841     return p;
2842
2843   cp = (char *) __mremap ((char *) p - offset, size + offset, new_size,
2844                           MREMAP_MAYMOVE);
2845
2846   if (cp == MAP_FAILED)
2847     return 0;
2848
2849   p = (mchunkptr) (cp + offset);
2850
2851   assert (aligned_OK (chunk2mem (p)));
2852
2853   assert ((p->prev_size == offset));
2854   set_head (p, (new_size - offset) | IS_MMAPPED);
2855
2856   INTERNAL_SIZE_T new;
2857   new = atomic_exchange_and_add (&mp_.mmapped_mem, new_size - size - offset)
2858         + new_size - size - offset;
2859   atomic_max (&mp_.max_mmapped_mem, new);
2860   return p;
2861 }
2862 #endif /* HAVE_MREMAP */
2863
2864 /*------------------------ Public wrappers. --------------------------------*/
2865
2866 void *
2867 __libc_malloc (size_t bytes)
2868 {
2869   mstate ar_ptr;
2870   void *victim;
2871
2872   void *(*hook) (size_t, const void *)
2873     = atomic_forced_read (__malloc_hook);
2874   if (__builtin_expect (hook != NULL, 0))
2875     return (*hook)(bytes, RETURN_ADDRESS (0));
2876
2877   arena_lookup (ar_ptr);
2878
2879   arena_lock (ar_ptr, bytes);
2880   if (!ar_ptr)
2881     return 0;
2882
2883   victim = _int_malloc (ar_ptr, bytes);
2884   if (!victim)
2885     {
2886       LIBC_PROBE (memory_malloc_retry, 1, bytes);
2887       ar_ptr = arena_get_retry (ar_ptr, bytes);
2888       if (__builtin_expect (ar_ptr != NULL, 1))
2889         {
2890           victim = _int_malloc (ar_ptr, bytes);
2891           (void) mutex_unlock (&ar_ptr->mutex);
2892         }
2893     }
2894   else
2895     (void) mutex_unlock (&ar_ptr->mutex);
2896   assert (!victim || chunk_is_mmapped (mem2chunk (victim)) ||
2897           ar_ptr == arena_for_chunk (mem2chunk (victim)));
2898   return victim;
2899 }
2900 libc_hidden_def (__libc_malloc)
2901
2902 void
2903 __libc_free (void *mem)
2904 {
2905   mstate ar_ptr;
2906   mchunkptr p;                          /* chunk corresponding to mem */
2907
2908   void (*hook) (void *, const void *)
2909     = atomic_forced_read (__free_hook);
2910   if (__builtin_expect (hook != NULL, 0))
2911     {
2912       (*hook)(mem, RETURN_ADDRESS (0));
2913       return;
2914     }
2915
2916   if (mem == 0)                              /* free(0) has no effect */
2917     return;
2918
2919   p = mem2chunk (mem);
2920
2921   if (chunk_is_mmapped (p))                       /* release mmapped memory. */
2922     {
2923       /* see if the dynamic brk/mmap threshold needs adjusting */
2924       if (!mp_.no_dyn_threshold
2925           && p->size > mp_.mmap_threshold
2926           && p->size <= DEFAULT_MMAP_THRESHOLD_MAX)
2927         {
2928           mp_.mmap_threshold = chunksize (p);
2929           mp_.trim_threshold = 2 * mp_.mmap_threshold;
2930           LIBC_PROBE (memory_mallopt_free_dyn_thresholds, 2,
2931                       mp_.mmap_threshold, mp_.trim_threshold);
2932         }
2933       munmap_chunk (p);
2934       return;
2935     }
2936
2937   ar_ptr = arena_for_chunk (p);
2938   _int_free (ar_ptr, p, 0);
2939 }
2940 libc_hidden_def (__libc_free)
2941
2942 void *
2943 __libc_realloc (void *oldmem, size_t bytes)
2944 {
2945   mstate ar_ptr;
2946   INTERNAL_SIZE_T nb;         /* padded request size */
2947
2948   void *newp;             /* chunk to return */
2949
2950   void *(*hook) (void *, size_t, const void *) =
2951     atomic_forced_read (__realloc_hook);
2952   if (__builtin_expect (hook != NULL, 0))
2953     return (*hook)(oldmem, bytes, RETURN_ADDRESS (0));
2954
2955 #if REALLOC_ZERO_BYTES_FREES
2956   if (bytes == 0 && oldmem != NULL)
2957     {
2958       __libc_free (oldmem); return 0;
2959     }
2960 #endif
2961
2962   /* realloc of null is supposed to be same as malloc */
2963   if (oldmem == 0)
2964     return __libc_malloc (bytes);
2965
2966   /* chunk corresponding to oldmem */
2967   const mchunkptr oldp = mem2chunk (oldmem);
2968   /* its size */
2969   const INTERNAL_SIZE_T oldsize = chunksize (oldp);
2970
2971   /* Little security check which won't hurt performance: the
2972      allocator never wrapps around at the end of the address space.
2973      Therefore we can exclude some size values which might appear
2974      here by accident or by "design" from some intruder.  */
2975   if (__builtin_expect ((uintptr_t) oldp > (uintptr_t) -oldsize, 0)
2976       || __builtin_expect (misaligned_chunk (oldp), 0))
2977     {
2978       malloc_printerr (check_action, "realloc(): invalid pointer", oldmem);
2979       return NULL;
2980     }
2981
2982   checked_request2size (bytes, nb);
2983
2984   if (chunk_is_mmapped (oldp))
2985     {
2986       void *newmem;
2987
2988 #if HAVE_MREMAP
2989       newp = mremap_chunk (oldp, nb);
2990       if (newp)
2991         return chunk2mem (newp);
2992 #endif
2993       /* Note the extra SIZE_SZ overhead. */
2994       if (oldsize - SIZE_SZ >= nb)
2995         return oldmem;                         /* do nothing */
2996
2997       /* Must alloc, copy, free. */
2998       newmem = __libc_malloc (bytes);
2999       if (newmem == 0)
3000         return 0;              /* propagate failure */
3001
3002       memcpy (newmem, oldmem, oldsize - 2 * SIZE_SZ);
3003       munmap_chunk (oldp);
3004       return newmem;
3005     }
3006
3007   ar_ptr = arena_for_chunk (oldp);
3008   (void) mutex_lock (&ar_ptr->mutex);
3009
3010
3011   newp = _int_realloc (ar_ptr, oldp, oldsize, nb);
3012
3013   (void) mutex_unlock (&ar_ptr->mutex);
3014   assert (!newp || chunk_is_mmapped (mem2chunk (newp)) ||
3015           ar_ptr == arena_for_chunk (mem2chunk (newp)));
3016
3017   if (newp == NULL)
3018     {
3019       /* Try harder to allocate memory in other arenas.  */
3020       LIBC_PROBE (memory_realloc_retry, 2, bytes, oldmem);
3021       newp = __libc_malloc (bytes);
3022       if (newp != NULL)
3023         {
3024           memcpy (newp, oldmem, oldsize - SIZE_SZ);
3025           _int_free (ar_ptr, oldp, 0);
3026         }
3027     }
3028
3029   return newp;
3030 }
3031 libc_hidden_def (__libc_realloc)
3032
3033 void *
3034 __libc_memalign (size_t alignment, size_t bytes)
3035 {
3036   void *address = RETURN_ADDRESS (0);
3037   return _mid_memalign (alignment, bytes, address);
3038 }
3039
3040 static void *
3041 _mid_memalign (size_t alignment, size_t bytes, void *address)
3042 {
3043   mstate ar_ptr;
3044   void *p;
3045
3046   void *(*hook) (size_t, size_t, const void *) =
3047     atomic_forced_read (__memalign_hook);
3048   if (__builtin_expect (hook != NULL, 0))
3049     return (*hook)(alignment, bytes, address);
3050
3051   /* If we need less alignment than we give anyway, just relay to malloc.  */
3052   if (alignment <= MALLOC_ALIGNMENT)
3053     return __libc_malloc (bytes);
3054
3055   /* Otherwise, ensure that it is at least a minimum chunk size */
3056   if (alignment < MINSIZE)
3057     alignment = MINSIZE;
3058
3059   /* If the alignment is greater than SIZE_MAX / 2 + 1 it cannot be a
3060      power of 2 and will cause overflow in the check below.  */
3061   if (alignment > SIZE_MAX / 2 + 1)
3062     {
3063       __set_errno (EINVAL);
3064       return 0;
3065     }
3066
3067   /* Check for overflow.  */
3068   if (bytes > SIZE_MAX - alignment - MINSIZE)
3069     {
3070       __set_errno (ENOMEM);
3071       return 0;
3072     }
3073
3074
3075   /* Make sure alignment is power of 2.  */
3076   if (!powerof2 (alignment))
3077     {
3078       size_t a = MALLOC_ALIGNMENT * 2;
3079       while (a < alignment)
3080         a <<= 1;
3081       alignment = a;
3082     }
3083
3084   arena_get (ar_ptr, bytes + alignment + MINSIZE);
3085   if (!ar_ptr)
3086     return 0;
3087
3088   p = _int_memalign (ar_ptr, alignment, bytes);
3089   if (!p)
3090     {
3091       LIBC_PROBE (memory_memalign_retry, 2, bytes, alignment);
3092       ar_ptr = arena_get_retry (ar_ptr, bytes);
3093       if (__builtin_expect (ar_ptr != NULL, 1))
3094         {
3095           p = _int_memalign (ar_ptr, alignment, bytes);
3096           (void) mutex_unlock (&ar_ptr->mutex);
3097         }
3098     }
3099   else
3100     (void) mutex_unlock (&ar_ptr->mutex);
3101   assert (!p || chunk_is_mmapped (mem2chunk (p)) ||
3102           ar_ptr == arena_for_chunk (mem2chunk (p)));
3103   return p;
3104 }
3105 /* For ISO C11.  */
3106 weak_alias (__libc_memalign, aligned_alloc)
3107 libc_hidden_def (__libc_memalign)
3108
3109 void *
3110 __libc_valloc (size_t bytes)
3111 {
3112   if (__malloc_initialized < 0)
3113     ptmalloc_init ();
3114
3115   void *address = RETURN_ADDRESS (0);
3116   size_t pagesz = GLRO (dl_pagesize);
3117   return _mid_memalign (pagesz, bytes, address);
3118 }
3119
3120 void *
3121 __libc_pvalloc (size_t bytes)
3122 {
3123   if (__malloc_initialized < 0)
3124     ptmalloc_init ();
3125
3126   void *address = RETURN_ADDRESS (0);
3127   size_t pagesz = GLRO (dl_pagesize);
3128   size_t page_mask = GLRO (dl_pagesize) - 1;
3129   size_t rounded_bytes = (bytes + page_mask) & ~(page_mask);
3130
3131   /* Check for overflow.  */
3132   if (bytes > SIZE_MAX - 2 * pagesz - MINSIZE)
3133     {
3134       __set_errno (ENOMEM);
3135       return 0;
3136     }
3137
3138   return _mid_memalign (pagesz, rounded_bytes, address);
3139 }
3140
3141 void *
3142 __libc_calloc (size_t n, size_t elem_size)
3143 {
3144   INTERNAL_SIZE_T bytes;
3145   void *mem;
3146
3147   /* size_t is unsigned so the behavior on overflow is defined.  */
3148   bytes = n * elem_size;
3149 #define HALF_INTERNAL_SIZE_T \
3150   (((INTERNAL_SIZE_T) 1) << (8 * sizeof (INTERNAL_SIZE_T) / 2))
3151   if (__builtin_expect ((n | elem_size) >= HALF_INTERNAL_SIZE_T, 0))
3152     {
3153       if (elem_size != 0 && bytes / elem_size != n)
3154         {
3155           __set_errno (ENOMEM);
3156           return 0;
3157         }
3158     }
3159
3160   void *(*hook) (size_t, const void *) =
3161     atomic_forced_read (__malloc_hook);
3162   if (__builtin_expect (hook != NULL, 0))
3163     {
3164       mem = (*hook)(bytes, RETURN_ADDRESS (0));
3165     }
3166   else
3167     mem = __libc_malloc (bytes);
3168
3169   if (mem == 0)
3170     return 0;
3171
3172   return memset (mem, 0, bytes);
3173 }
3174
3175 /*
3176    ------------------------------ malloc ------------------------------
3177  */
3178
3179 static void *
3180 _int_malloc (mstate av, size_t bytes)
3181 {
3182   INTERNAL_SIZE_T nb;               /* normalized request size */
3183   unsigned int idx;                 /* associated bin index */
3184   mbinptr bin;                      /* associated bin */
3185
3186   mchunkptr victim;                 /* inspected/selected chunk */
3187   INTERNAL_SIZE_T size;             /* its size */
3188   int victim_index;                 /* its bin index */
3189
3190   mchunkptr remainder;              /* remainder from a split */
3191   unsigned long remainder_size;     /* its size */
3192
3193   unsigned int block;               /* bit map traverser */
3194   unsigned int bit;                 /* bit map traverser */
3195   unsigned int map;                 /* current word of binmap */
3196
3197   mchunkptr fwd;                    /* misc temp for linking */
3198   mchunkptr bck;                    /* misc temp for linking */
3199
3200   const char *errstr = NULL;
3201
3202   /*
3203      Convert request size to internal form by adding SIZE_SZ bytes
3204      overhead plus possibly more to obtain necessary alignment and/or
3205      to obtain a size of at least MINSIZE, the smallest allocatable
3206      size. Also, checked_request2size traps (returning 0) request sizes
3207      that are so large that they wrap around zero when padded and
3208      aligned.
3209    */
3210
3211   checked_request2size (bytes, nb);
3212
3213   /*
3214      If the size qualifies as a fastbin, first check corresponding bin.
3215      This code is safe to execute even if av is not yet initialized, so we
3216      can try it without checking, which saves some time on this fast path.
3217    */
3218
3219   if ((unsigned long) (nb) <= (unsigned long) (get_max_fast ()))
3220     {
3221       idx = fastbin_index (nb);
3222       mfastbinptr *fb = &fastbin (av, idx);
3223       mchunkptr pp = *fb;
3224       do
3225         {
3226           victim = pp;
3227           if (victim == NULL)
3228             break;
3229         }
3230       while ((pp = catomic_compare_and_exchange_val_acq (fb, victim->fd, victim))
3231              != victim);
3232       if (victim != 0)
3233         {
3234           if (__builtin_expect (fastbin_index (chunksize (victim)) != idx, 0))
3235             {
3236               errstr = "malloc(): memory corruption (fast)";
3237             errout:
3238               malloc_printerr (check_action, errstr, chunk2mem (victim));
3239               return NULL;
3240             }
3241           check_remalloced_chunk (av, victim, nb);
3242           void *p = chunk2mem (victim);
3243           alloc_perturb (p, bytes);
3244           return p;
3245         }
3246     }
3247
3248   /*
3249      If a small request, check regular bin.  Since these "smallbins"
3250      hold one size each, no searching within bins is necessary.
3251      (For a large request, we need to wait until unsorted chunks are
3252      processed to find best fit. But for small ones, fits are exact
3253      anyway, so we can check now, which is faster.)
3254    */
3255
3256   if (in_smallbin_range (nb))
3257     {
3258       idx = smallbin_index (nb);
3259       bin = bin_at (av, idx);
3260
3261       if ((victim = last (bin)) != bin)
3262         {
3263           if (victim == 0) /* initialization check */
3264             malloc_consolidate (av);
3265           else
3266             {
3267               bck = victim->bk;
3268         if (__glibc_unlikely (bck->fd != victim))
3269                 {
3270                   errstr = "malloc(): smallbin double linked list corrupted";
3271                   goto errout;
3272                 }
3273               set_inuse_bit_at_offset (victim, nb);
3274               bin->bk = bck;
3275               bck->fd = bin;
3276
3277               if (av != &main_arena)
3278                 victim->size |= NON_MAIN_ARENA;
3279               check_malloced_chunk (av, victim, nb);
3280               void *p = chunk2mem (victim);
3281               alloc_perturb (p, bytes);
3282               return p;
3283             }
3284         }
3285     }
3286
3287   /*
3288      If this is a large request, consolidate fastbins before continuing.
3289      While it might look excessive to kill all fastbins before
3290      even seeing if there is space available, this avoids
3291      fragmentation problems normally associated with fastbins.
3292      Also, in practice, programs tend to have runs of either small or
3293      large requests, but less often mixtures, so consolidation is not
3294      invoked all that often in most programs. And the programs that
3295      it is called frequently in otherwise tend to fragment.
3296    */
3297
3298   else
3299     {
3300       idx = largebin_index (nb);
3301       if (have_fastchunks (av))
3302         malloc_consolidate (av);
3303     }
3304
3305   /*
3306      Process recently freed or remaindered chunks, taking one only if
3307      it is exact fit, or, if this a small request, the chunk is remainder from
3308      the most recent non-exact fit.  Place other traversed chunks in
3309      bins.  Note that this step is the only place in any routine where
3310      chunks are placed in bins.
3311
3312      The outer loop here is needed because we might not realize until
3313      near the end of malloc that we should have consolidated, so must
3314      do so and retry. This happens at most once, and only when we would
3315      otherwise need to expand memory to service a "small" request.
3316    */
3317
3318   for (;; )
3319     {
3320       int iters = 0;
3321       while ((victim = unsorted_chunks (av)->bk) != unsorted_chunks (av))
3322         {
3323           bck = victim->bk;
3324           if (__builtin_expect (victim->size <= 2 * SIZE_SZ, 0)
3325               || __builtin_expect (victim->size > av->system_mem, 0))
3326             malloc_printerr (check_action, "malloc(): memory corruption",
3327                              chunk2mem (victim));
3328           size = chunksize (victim);
3329
3330           /*
3331              If a small request, try to use last remainder if it is the
3332              only chunk in unsorted bin.  This helps promote locality for
3333              runs of consecutive small requests. This is the only
3334              exception to best-fit, and applies only when there is
3335              no exact fit for a small chunk.
3336            */
3337
3338           if (in_smallbin_range (nb) &&
3339               bck == unsorted_chunks (av) &&
3340               victim == av->last_remainder &&
3341               (unsigned long) (size) > (unsigned long) (nb + MINSIZE))
3342             {
3343               /* split and reattach remainder */
3344               remainder_size = size - nb;
3345               remainder = chunk_at_offset (victim, nb);
3346               unsorted_chunks (av)->bk = unsorted_chunks (av)->fd = remainder;
3347               av->last_remainder = remainder;
3348               remainder->bk = remainder->fd = unsorted_chunks (av);
3349               if (!in_smallbin_range (remainder_size))
3350                 {
3351                   remainder->fd_nextsize = NULL;
3352                   remainder->bk_nextsize = NULL;
3353                 }
3354
3355               set_head (victim, nb | PREV_INUSE |
3356                         (av != &main_arena ? NON_MAIN_ARENA : 0));
3357               set_head (remainder, remainder_size | PREV_INUSE);
3358               set_foot (remainder, remainder_size);
3359
3360               check_malloced_chunk (av, victim, nb);
3361               void *p = chunk2mem (victim);
3362               alloc_perturb (p, bytes);
3363               return p;
3364             }
3365
3366           /* remove from unsorted list */
3367           unsorted_chunks (av)->bk = bck;
3368           bck->fd = unsorted_chunks (av);
3369
3370           /* Take now instead of binning if exact fit */
3371
3372           if (size == nb)
3373             {
3374               set_inuse_bit_at_offset (victim, size);
3375               if (av != &main_arena)
3376                 victim->size |= NON_MAIN_ARENA;
3377               check_malloced_chunk (av, victim, nb);
3378               void *p = chunk2mem (victim);
3379               alloc_perturb (p, bytes);
3380               return p;
3381             }
3382
3383           /* place chunk in bin */
3384
3385           if (in_smallbin_range (size))
3386             {
3387               victim_index = smallbin_index (size);
3388               bck = bin_at (av, victim_index);
3389               fwd = bck->fd;
3390             }
3391           else
3392             {
3393               victim_index = largebin_index (size);
3394               bck = bin_at (av, victim_index);
3395               fwd = bck->fd;
3396
3397               /* maintain large bins in sorted order */
3398               if (fwd != bck)
3399                 {
3400                   /* Or with inuse bit to speed comparisons */
3401                   size |= PREV_INUSE;
3402                   /* if smaller than smallest, bypass loop below */
3403                   assert ((bck->bk->size & NON_MAIN_ARENA) == 0);
3404                   if ((unsigned long) (size) < (unsigned long) (bck->bk->size))
3405                     {
3406                       fwd = bck;
3407                       bck = bck->bk;
3408
3409                       victim->fd_nextsize = fwd->fd;
3410                       victim->bk_nextsize = fwd->fd->bk_nextsize;
3411                       fwd->fd->bk_nextsize = victim->bk_nextsize->fd_nextsize = victim;
3412                     }
3413                   else
3414                     {
3415                       assert ((fwd->size & NON_MAIN_ARENA) == 0);
3416                       while ((unsigned long) size < fwd->size)
3417                         {
3418                           fwd = fwd->fd_nextsize;
3419                           assert ((fwd->size & NON_MAIN_ARENA) == 0);
3420                         }
3421
3422                       if ((unsigned long) size == (unsigned long) fwd->size)
3423                         /* Always insert in the second position.  */
3424                         fwd = fwd->fd;
3425                       else
3426                         {
3427                           victim->fd_nextsize = fwd;
3428                           victim->bk_nextsize = fwd->bk_nextsize;
3429                           fwd->bk_nextsize = victim;
3430                           victim->bk_nextsize->fd_nextsize = victim;
3431                         }
3432                       bck = fwd->bk;
3433                     }
3434                 }
3435               else
3436                 victim->fd_nextsize = victim->bk_nextsize = victim;
3437             }
3438
3439           mark_bin (av, victim_index);
3440           victim->bk = bck;
3441           victim->fd = fwd;
3442           fwd->bk = victim;
3443           bck->fd = victim;
3444
3445 #define MAX_ITERS       10000
3446           if (++iters >= MAX_ITERS)
3447             break;
3448         }
3449
3450       /*
3451          If a large request, scan through the chunks of current bin in
3452          sorted order to find smallest that fits.  Use the skip list for this.
3453        */
3454
3455       if (!in_smallbin_range (nb))
3456         {
3457           bin = bin_at (av, idx);
3458
3459           /* skip scan if empty or largest chunk is too small */
3460           if ((victim = first (bin)) != bin &&
3461               (unsigned long) (victim->size) >= (unsigned long) (nb))
3462             {
3463               victim = victim->bk_nextsize;
3464               while (((unsigned long) (size = chunksize (victim)) <
3465                       (unsigned long) (nb)))
3466                 victim = victim->bk_nextsize;
3467
3468               /* Avoid removing the first entry for a size so that the skip
3469                  list does not have to be rerouted.  */
3470               if (victim != last (bin) && victim->size == victim->fd->size)
3471                 victim = victim->fd;
3472
3473               remainder_size = size - nb;
3474               unlink (victim, bck, fwd);
3475
3476               /* Exhaust */
3477               if (remainder_size < MINSIZE)
3478                 {
3479                   set_inuse_bit_at_offset (victim, size);
3480                   if (av != &main_arena)
3481                     victim->size |= NON_MAIN_ARENA;
3482                 }
3483               /* Split */
3484               else
3485                 {
3486                   remainder = chunk_at_offset (victim, nb);
3487                   /* We cannot assume the unsorted list is empty and therefore
3488                      have to perform a complete insert here.  */
3489                   bck = unsorted_chunks (av);
3490                   fwd = bck->fd;
3491           if (__glibc_unlikely (fwd->bk != bck))
3492                     {
3493                       errstr = "malloc(): corrupted unsorted chunks";
3494                       goto errout;
3495                     }
3496                   remainder->bk = bck;
3497                   remainder->fd = fwd;
3498                   bck->fd = remainder;
3499                   fwd->bk = remainder;
3500                   if (!in_smallbin_range (remainder_size))
3501                     {
3502                       remainder->fd_nextsize = NULL;
3503                       remainder->bk_nextsize = NULL;
3504                     }
3505                   set_head (victim, nb | PREV_INUSE |
3506                             (av != &main_arena ? NON_MAIN_ARENA : 0));
3507                   set_head (remainder, remainder_size | PREV_INUSE);
3508                   set_foot (remainder, remainder_size);
3509                 }
3510               check_malloced_chunk (av, victim, nb);
3511               void *p = chunk2mem (victim);
3512               alloc_perturb (p, bytes);
3513               return p;
3514             }
3515         }
3516
3517       /*
3518          Search for a chunk by scanning bins, starting with next largest
3519          bin. This search is strictly by best-fit; i.e., the smallest
3520          (with ties going to approximately the least recently used) chunk
3521          that fits is selected.
3522
3523          The bitmap avoids needing to check that most blocks are nonempty.
3524          The particular case of skipping all bins during warm-up phases
3525          when no chunks have been returned yet is faster than it might look.
3526        */
3527
3528       ++idx;
3529       bin = bin_at (av, idx);
3530       block = idx2block (idx);
3531       map = av->binmap[block];
3532       bit = idx2bit (idx);
3533
3534       for (;; )
3535         {
3536           /* Skip rest of block if there are no more set bits in this block.  */
3537           if (bit > map || bit == 0)
3538             {
3539               do
3540                 {
3541                   if (++block >= BINMAPSIZE) /* out of bins */
3542                     goto use_top;
3543                 }
3544               while ((map = av->binmap[block]) == 0);
3545
3546               bin = bin_at (av, (block << BINMAPSHIFT));
3547               bit = 1;
3548             }
3549
3550           /* Advance to bin with set bit. There must be one. */
3551           while ((bit & map) == 0)
3552             {
3553               bin = next_bin (bin);
3554               bit <<= 1;
3555               assert (bit != 0);
3556             }
3557
3558           /* Inspect the bin. It is likely to be non-empty */
3559           victim = last (bin);
3560
3561           /*  If a false alarm (empty bin), clear the bit. */
3562           if (victim == bin)
3563             {
3564               av->binmap[block] = map &= ~bit; /* Write through */
3565               bin = next_bin (bin);
3566               bit <<= 1;
3567             }
3568
3569           else
3570             {
3571               size = chunksize (victim);
3572
3573               /*  We know the first chunk in this bin is big enough to use. */
3574               assert ((unsigned long) (size) >= (unsigned long) (nb));
3575
3576               remainder_size = size - nb;
3577
3578               /* unlink */
3579               unlink (victim, bck, fwd);
3580
3581               /* Exhaust */
3582               if (remainder_size < MINSIZE)
3583                 {
3584                   set_inuse_bit_at_offset (victim, size);
3585                   if (av != &main_arena)
3586                     victim->size |= NON_MAIN_ARENA;
3587                 }
3588
3589               /* Split */
3590               else
3591                 {
3592                   remainder = chunk_at_offset (victim, nb);
3593
3594                   /* We cannot assume the unsorted list is empty and therefore
3595                      have to perform a complete insert here.  */
3596                   bck = unsorted_chunks (av);
3597                   fwd = bck->fd;
3598           if (__glibc_unlikely (fwd->bk != bck))
3599                     {
3600                       errstr = "malloc(): corrupted unsorted chunks 2";
3601                       goto errout;
3602                     }
3603                   remainder->bk = bck;
3604                   remainder->fd = fwd;
3605                   bck->fd = remainder;
3606                   fwd->bk = remainder;
3607
3608                   /* advertise as last remainder */
3609                   if (in_smallbin_range (nb))
3610                     av->last_remainder = remainder;
3611                   if (!in_smallbin_range (remainder_size))
3612                     {
3613                       remainder->fd_nextsize = NULL;
3614                       remainder->bk_nextsize = NULL;
3615                     }
3616                   set_head (victim, nb | PREV_INUSE |
3617                             (av != &main_arena ? NON_MAIN_ARENA : 0));
3618                   set_head (remainder, remainder_size | PREV_INUSE);
3619                   set_foot (remainder, remainder_size);
3620                 }
3621               check_malloced_chunk (av, victim, nb);
3622               void *p = chunk2mem (victim);
3623               alloc_perturb (p, bytes);
3624               return p;
3625             }
3626         }
3627
3628     use_top:
3629       /*
3630          If large enough, split off the chunk bordering the end of memory
3631          (held in av->top). Note that this is in accord with the best-fit
3632          search rule.  In effect, av->top is treated as larger (and thus
3633          less well fitting) than any other available chunk since it can
3634          be extended to be as large as necessary (up to system
3635          limitations).
3636
3637          We require that av->top always exists (i.e., has size >=
3638          MINSIZE) after initialization, so if it would otherwise be
3639          exhausted by current request, it is replenished. (The main
3640          reason for ensuring it exists is that we may need MINSIZE space
3641          to put in fenceposts in sysmalloc.)
3642        */
3643
3644       victim = av->top;
3645       size = chunksize (victim);
3646
3647       if ((unsigned long) (size) >= (unsigned long) (nb + MINSIZE))
3648         {
3649           remainder_size = size - nb;
3650           remainder = chunk_at_offset (victim, nb);
3651           av->top = remainder;
3652           set_head (victim, nb | PREV_INUSE |
3653                     (av != &main_arena ? NON_MAIN_ARENA : 0));
3654           set_head (remainder, remainder_size | PREV_INUSE);
3655
3656           check_malloced_chunk (av, victim, nb);
3657           void *p = chunk2mem (victim);
3658           alloc_perturb (p, bytes);
3659           return p;
3660         }
3661
3662       /* When we are using atomic ops to free fast chunks we can get
3663          here for all block sizes.  */
3664       else if (have_fastchunks (av))
3665         {
3666           malloc_consolidate (av);
3667           /* restore original bin index */
3668           if (in_smallbin_range (nb))
3669             idx = smallbin_index (nb);
3670           else
3671             idx = largebin_index (nb);
3672         }
3673
3674       /*
3675          Otherwise, relay to handle system-dependent cases
3676        */
3677       else
3678         {
3679           void *p = sysmalloc (nb, av);
3680           if (p != NULL)
3681             alloc_perturb (p, bytes);
3682           return p;
3683         }
3684     }
3685 }
3686
3687 /*
3688    ------------------------------ free ------------------------------
3689  */
3690
3691 static void
3692 _int_free (mstate av, mchunkptr p, int have_lock)
3693 {
3694   INTERNAL_SIZE_T size;        /* its size */
3695   mfastbinptr *fb;             /* associated fastbin */
3696   mchunkptr nextchunk;         /* next contiguous chunk */
3697   INTERNAL_SIZE_T nextsize;    /* its size */
3698   int nextinuse;               /* true if nextchunk is used */
3699   INTERNAL_SIZE_T prevsize;    /* size of previous contiguous chunk */
3700   mchunkptr bck;               /* misc temp for linking */
3701   mchunkptr fwd;               /* misc temp for linking */
3702
3703   const char *errstr = NULL;
3704   int locked = 0;
3705
3706   size = chunksize (p);
3707
3708   /* Little security check which won't hurt performance: the
3709      allocator never wrapps around at the end of the address space.
3710      Therefore we can exclude some size values which might appear
3711      here by accident or by "design" from some intruder.  */
3712   if (__builtin_expect ((uintptr_t) p > (uintptr_t) -size, 0)
3713       || __builtin_expect (misaligned_chunk (p), 0))
3714     {
3715       errstr = "free(): invalid pointer";
3716     errout:
3717       if (!have_lock && locked)
3718         (void) mutex_unlock (&av->mutex);
3719       malloc_printerr (check_action, errstr, chunk2mem (p));
3720       return;
3721     }
3722   /* We know that each chunk is at least MINSIZE bytes in size or a
3723      multiple of MALLOC_ALIGNMENT.  */
3724   if (__glibc_unlikely (size < MINSIZE || !aligned_OK (size)))
3725     {
3726       errstr = "free(): invalid size";
3727       goto errout;
3728     }
3729
3730   check_inuse_chunk(av, p);
3731
3732   /*
3733     If eligible, place chunk on a fastbin so it can be found
3734     and used quickly in malloc.
3735   */
3736
3737   if ((unsigned long)(size) <= (unsigned long)(get_max_fast ())
3738
3739 #if TRIM_FASTBINS
3740       /*
3741         If TRIM_FASTBINS set, don't place chunks
3742         bordering top into fastbins
3743       */
3744       && (chunk_at_offset(p, size) != av->top)
3745 #endif
3746       ) {
3747
3748     if (__builtin_expect (chunk_at_offset (p, size)->size <= 2 * SIZE_SZ, 0)
3749         || __builtin_expect (chunksize (chunk_at_offset (p, size))
3750                              >= av->system_mem, 0))
3751       {
3752         /* We might not have a lock at this point and concurrent modifications
3753            of system_mem might have let to a false positive.  Redo the test
3754            after getting the lock.  */
3755         if (have_lock
3756             || ({ assert (locked == 0);
3757                   mutex_lock(&av->mutex);
3758                   locked = 1;
3759                   chunk_at_offset (p, size)->size <= 2 * SIZE_SZ
3760                     || chunksize (chunk_at_offset (p, size)) >= av->system_mem;
3761               }))
3762           {
3763             errstr = "free(): invalid next size (fast)";
3764             goto errout;
3765           }
3766         if (! have_lock)
3767           {
3768             (void)mutex_unlock(&av->mutex);
3769             locked = 0;
3770           }
3771       }
3772
3773     free_perturb (chunk2mem(p), size - 2 * SIZE_SZ);
3774
3775     set_fastchunks(av);
3776     unsigned int idx = fastbin_index(size);
3777     fb = &fastbin (av, idx);
3778
3779     /* Atomically link P to its fastbin: P->FD = *FB; *FB = P;  */
3780     mchunkptr old = *fb, old2;
3781     unsigned int old_idx = ~0u;
3782     do
3783       {
3784         /* Check that the top of the bin is not the record we are going to add
3785            (i.e., double free).  */
3786         if (__builtin_expect (old == p, 0))
3787           {
3788             errstr = "double free or corruption (fasttop)";
3789             goto errout;
3790           }
3791         /* Check that size of fastbin chunk at the top is the same as
3792            size of the chunk that we are adding.  We can dereference OLD
3793            only if we have the lock, otherwise it might have already been
3794            deallocated.  See use of OLD_IDX below for the actual check.  */
3795         if (have_lock && old != NULL)
3796           old_idx = fastbin_index(chunksize(old));
3797         p->fd = old2 = old;
3798       }
3799     while ((old = catomic_compare_and_exchange_val_rel (fb, p, old2)) != old2);
3800
3801     if (have_lock && old != NULL && __builtin_expect (old_idx != idx, 0))
3802       {
3803         errstr = "invalid fastbin entry (free)";
3804         goto errout;
3805       }
3806   }
3807
3808   /*
3809     Consolidate other non-mmapped chunks as they arrive.
3810   */
3811
3812   else if (!chunk_is_mmapped(p)) {
3813     if (! have_lock) {
3814       (void)mutex_lock(&av->mutex);
3815       locked = 1;
3816     }
3817
3818     nextchunk = chunk_at_offset(p, size);
3819
3820     /* Lightweight tests: check whether the block is already the
3821        top block.  */
3822     if (__glibc_unlikely (p == av->top))
3823       {
3824         errstr = "double free or corruption (top)";
3825         goto errout;
3826       }
3827     /* Or whether the next chunk is beyond the boundaries of the arena.  */
3828     if (__builtin_expect (contiguous (av)
3829                           && (char *) nextchunk
3830                           >= ((char *) av->top + chunksize(av->top)), 0))
3831       {
3832         errstr = "double free or corruption (out)";
3833         goto errout;
3834       }
3835     /* Or whether the block is actually not marked used.  */
3836     if (__glibc_unlikely (!prev_inuse(nextchunk)))
3837       {
3838         errstr = "double free or corruption (!prev)";
3839         goto errout;
3840       }
3841
3842     nextsize = chunksize(nextchunk);
3843     if (__builtin_expect (nextchunk->size <= 2 * SIZE_SZ, 0)
3844         || __builtin_expect (nextsize >= av->system_mem, 0))
3845       {
3846         errstr = "free(): invalid next size (normal)";
3847         goto errout;
3848       }
3849
3850     free_perturb (chunk2mem(p), size - 2 * SIZE_SZ);
3851
3852     /* consolidate backward */
3853     if (!prev_inuse(p)) {
3854       prevsize = p->prev_size;
3855       size += prevsize;
3856       p = chunk_at_offset(p, -((long) prevsize));
3857       unlink(p, bck, fwd);
3858     }
3859
3860     if (nextchunk != av->top) {
3861       /* get and clear inuse bit */
3862       nextinuse = inuse_bit_at_offset(nextchunk, nextsize);
3863
3864       /* consolidate forward */
3865       if (!nextinuse) {
3866         unlink(nextchunk, bck, fwd);
3867         size += nextsize;
3868       } else
3869         clear_inuse_bit_at_offset(nextchunk, 0);
3870
3871       /*
3872         Place the chunk in unsorted chunk list. Chunks are
3873         not placed into regular bins until after they have
3874         been given one chance to be used in malloc.
3875       */
3876
3877       bck = unsorted_chunks(av);
3878       fwd = bck->fd;
3879       if (__glibc_unlikely (fwd->bk != bck))
3880         {
3881           errstr = "free(): corrupted unsorted chunks";
3882           goto errout;
3883         }
3884       p->fd = fwd;
3885       p->bk = bck;
3886       if (!in_smallbin_range(size))
3887         {
3888           p->fd_nextsize = NULL;
3889           p->bk_nextsize = NULL;
3890         }
3891       bck->fd = p;
3892       fwd->bk = p;
3893
3894       set_head(p, size | PREV_INUSE);
3895       set_foot(p, size);
3896
3897       check_free_chunk(av, p);
3898     }
3899
3900     /*
3901       If the chunk borders the current high end of memory,
3902       consolidate into top
3903     */
3904
3905     else {
3906       size += nextsize;
3907       set_head(p, size | PREV_INUSE);
3908       av->top = p;
3909       check_chunk(av, p);
3910     }
3911
3912     /*
3913       If freeing a large space, consolidate possibly-surrounding
3914       chunks. Then, if the total unused topmost memory exceeds trim
3915       threshold, ask malloc_trim to reduce top.
3916
3917       Unless max_fast is 0, we don't know if there are fastbins
3918       bordering top, so we cannot tell for sure whether threshold
3919       has been reached unless fastbins are consolidated.  But we
3920       don't want to consolidate on each free.  As a compromise,
3921       consolidation is performed if FASTBIN_CONSOLIDATION_THRESHOLD
3922       is reached.
3923     */
3924
3925     if ((unsigned long)(size) >= FASTBIN_CONSOLIDATION_THRESHOLD) {
3926       if (have_fastchunks(av))
3927         malloc_consolidate(av);
3928
3929       if (av == &main_arena) {
3930 #ifndef MORECORE_CANNOT_TRIM
3931         if ((unsigned long)(chunksize(av->top)) >=
3932             (unsigned long)(mp_.trim_threshold))
3933           systrim(mp_.top_pad, av);
3934 #endif
3935       } else {
3936         /* Always try heap_trim(), even if the top chunk is not
3937            large, because the corresponding heap might go away.  */
3938         heap_info *heap = heap_for_ptr(top(av));
3939
3940         assert(heap->ar_ptr == av);
3941         heap_trim(heap, mp_.top_pad);
3942       }
3943     }
3944
3945     if (! have_lock) {
3946       assert (locked);
3947       (void)mutex_unlock(&av->mutex);
3948     }
3949   }
3950   /*
3951     If the chunk was allocated via mmap, release via munmap().
3952   */
3953
3954   else {
3955     munmap_chunk (p);
3956   }
3957 }
3958
3959 /*
3960   ------------------------- malloc_consolidate -------------------------
3961
3962   malloc_consolidate is a specialized version of free() that tears
3963   down chunks held in fastbins.  Free itself cannot be used for this
3964   purpose since, among other things, it might place chunks back onto
3965   fastbins.  So, instead, we need to use a minor variant of the same
3966   code.
3967
3968   Also, because this routine needs to be called the first time through
3969   malloc anyway, it turns out to be the perfect place to trigger
3970   initialization code.
3971 */
3972
3973 static void malloc_consolidate(mstate av)
3974 {
3975   mfastbinptr*    fb;                 /* current fastbin being consolidated */
3976   mfastbinptr*    maxfb;              /* last fastbin (for loop control) */
3977   mchunkptr       p;                  /* current chunk being consolidated */
3978   mchunkptr       nextp;              /* next chunk to consolidate */
3979   mchunkptr       unsorted_bin;       /* bin header */
3980   mchunkptr       first_unsorted;     /* chunk to link to */
3981
3982   /* These have same use as in free() */
3983   mchunkptr       nextchunk;
3984   INTERNAL_SIZE_T size;
3985   INTERNAL_SIZE_T nextsize;
3986   INTERNAL_SIZE_T prevsize;
3987   int             nextinuse;
3988   mchunkptr       bck;
3989   mchunkptr       fwd;
3990
3991   /*
3992     If max_fast is 0, we know that av hasn't
3993     yet been initialized, in which case do so below
3994   */
3995
3996   if (get_max_fast () != 0) {
3997     clear_fastchunks(av);
3998
3999     unsorted_bin = unsorted_chunks(av);
4000
4001     /*
4002       Remove each chunk from fast bin and consolidate it, placing it
4003       then in unsorted bin. Among other reasons for doing this,
4004       placing in unsorted bin avoids needing to calculate actual bins
4005       until malloc is sure that chunks aren't immediately going to be
4006       reused anyway.
4007     */
4008
4009     maxfb = &fastbin (av, NFASTBINS - 1);
4010     fb = &fastbin (av, 0);
4011     do {
4012       p = atomic_exchange_acq (fb, 0);
4013       if (p != 0) {
4014         do {
4015           check_inuse_chunk(av, p);
4016           nextp = p->fd;
4017
4018           /* Slightly streamlined version of consolidation code in free() */
4019           size = p->size & ~(PREV_INUSE|NON_MAIN_ARENA);
4020           nextchunk = chunk_at_offset(p, size);
4021           nextsize = chunksize(nextchunk);
4022
4023           if (!prev_inuse(p)) {
4024             prevsize = p->prev_size;
4025             size += prevsize;
4026             p = chunk_at_offset(p, -((long) prevsize));
4027             unlink(p, bck, fwd);
4028           }
4029
4030           if (nextchunk != av->top) {
4031             nextinuse = inuse_bit_at_offset(nextchunk, nextsize);
4032
4033             if (!nextinuse) {
4034               size += nextsize;
4035               unlink(nextchunk, bck, fwd);
4036             } else
4037               clear_inuse_bit_at_offset(nextchunk, 0);
4038
4039             first_unsorted = unsorted_bin->fd;
4040             unsorted_bin->fd = p;
4041             first_unsorted->bk = p;
4042
4043             if (!in_smallbin_range (size)) {
4044               p->fd_nextsize = NULL;
4045               p->bk_nextsize = NULL;
4046             }
4047
4048             set_head(p, size | PREV_INUSE);
4049             p->bk = unsorted_bin;
4050             p->fd = first_unsorted;
4051             set_foot(p, size);
4052           }
4053
4054           else {
4055             size += nextsize;
4056             set_head(p, size | PREV_INUSE);
4057             av->top = p;
4058           }
4059
4060         } while ( (p = nextp) != 0);
4061
4062       }
4063     } while (fb++ != maxfb);
4064   }
4065   else {
4066     malloc_init_state(av);
4067     check_malloc_state(av);
4068   }
4069 }
4070
4071 /*
4072   ------------------------------ realloc ------------------------------
4073 */
4074
4075 void*
4076 _int_realloc(mstate av, mchunkptr oldp, INTERNAL_SIZE_T oldsize,
4077              INTERNAL_SIZE_T nb)
4078 {
4079   mchunkptr        newp;            /* chunk to return */
4080   INTERNAL_SIZE_T  newsize;         /* its size */
4081   void*          newmem;          /* corresponding user mem */
4082
4083   mchunkptr        next;            /* next contiguous chunk after oldp */
4084
4085   mchunkptr        remainder;       /* extra space at end of newp */
4086   unsigned long    remainder_size;  /* its size */
4087
4088   mchunkptr        bck;             /* misc temp for linking */
4089   mchunkptr        fwd;             /* misc temp for linking */
4090
4091   unsigned long    copysize;        /* bytes to copy */
4092   unsigned int     ncopies;         /* INTERNAL_SIZE_T words to copy */
4093   INTERNAL_SIZE_T* s;               /* copy source */
4094   INTERNAL_SIZE_T* d;               /* copy destination */
4095
4096   const char *errstr = NULL;
4097
4098   /* oldmem size */
4099   if (__builtin_expect (oldp->size <= 2 * SIZE_SZ, 0)
4100       || __builtin_expect (oldsize >= av->system_mem, 0))
4101     {
4102       errstr = "realloc(): invalid old size";
4103     errout:
4104       malloc_printerr (check_action, errstr, chunk2mem (oldp));
4105       return NULL;
4106     }
4107
4108   check_inuse_chunk (av, oldp);
4109
4110   /* All callers already filter out mmap'ed chunks.  */
4111   assert (!chunk_is_mmapped (oldp));
4112
4113   next = chunk_at_offset (oldp, oldsize);
4114   INTERNAL_SIZE_T nextsize = chunksize (next);
4115   if (__builtin_expect (next->size <= 2 * SIZE_SZ, 0)
4116       || __builtin_expect (nextsize >= av->system_mem, 0))
4117     {
4118       errstr = "realloc(): invalid next size";
4119       goto errout;
4120     }
4121
4122   if ((unsigned long) (oldsize) >= (unsigned long) (nb))
4123     {
4124       /* already big enough; split below */
4125       newp = oldp;
4126       newsize = oldsize;
4127     }
4128
4129   else
4130     {
4131       /* Try to expand forward into top */
4132       if (next == av->top &&
4133           (unsigned long) (newsize = oldsize + nextsize) >=
4134           (unsigned long) (nb + MINSIZE))
4135         {
4136           set_head_size (oldp, nb | (av != &main_arena ? NON_MAIN_ARENA : 0));
4137           av->top = chunk_at_offset (oldp, nb);
4138           set_head (av->top, (newsize - nb) | PREV_INUSE);
4139           check_inuse_chunk (av, oldp);
4140           return chunk2mem (oldp);
4141         }
4142
4143       /* Try to expand forward into next chunk;  split off remainder below */
4144       else if (next != av->top &&
4145                !inuse (next) &&
4146                (unsigned long) (newsize = oldsize + nextsize) >=
4147                (unsigned long) (nb))
4148         {
4149           newp = oldp;
4150           unlink (next, bck, fwd);
4151         }
4152
4153       /* allocate, copy, free */
4154       else
4155         {
4156           newmem = _int_malloc (av, nb - MALLOC_ALIGN_MASK);
4157           if (newmem == 0)
4158             return 0; /* propagate failure */
4159
4160           newp = mem2chunk (newmem);
4161           newsize = chunksize (newp);
4162
4163           /*
4164              Avoid copy if newp is next chunk after oldp.
4165            */
4166           if (newp == next)
4167             {
4168               newsize += oldsize;
4169               newp = oldp;
4170             }
4171           else
4172             {
4173               /*
4174                  Unroll copy of <= 36 bytes (72 if 8byte sizes)
4175                  We know that contents have an odd number of
4176                  INTERNAL_SIZE_T-sized words; minimally 3.
4177                */
4178
4179               copysize = oldsize - SIZE_SZ;
4180               s = (INTERNAL_SIZE_T *) (chunk2mem (oldp));
4181               d = (INTERNAL_SIZE_T *) (newmem);
4182               ncopies = copysize / sizeof (INTERNAL_SIZE_T);
4183               assert (ncopies >= 3);
4184
4185               if (ncopies > 9)
4186                 memcpy (d, s, copysize);
4187
4188               else
4189                 {
4190                   *(d + 0) = *(s + 0);
4191                   *(d + 1) = *(s + 1);
4192                   *(d + 2) = *(s + 2);
4193                   if (ncopies > 4)
4194                     {
4195                       *(d + 3) = *(s + 3);
4196                       *(d + 4) = *(s + 4);
4197                       if (ncopies > 6)
4198                         {
4199                           *(d + 5) = *(s + 5);
4200                           *(d + 6) = *(s + 6);
4201                           if (ncopies > 8)
4202                             {
4203                               *(d + 7) = *(s + 7);
4204                               *(d + 8) = *(s + 8);
4205                             }
4206                         }
4207                     }
4208                 }
4209
4210               _int_free (av, oldp, 1);
4211               check_inuse_chunk (av, newp);
4212               return chunk2mem (newp);
4213             }
4214         }
4215     }
4216
4217   /* If possible, free extra space in old or extended chunk */
4218
4219   assert ((unsigned long) (newsize) >= (unsigned long) (nb));
4220
4221   remainder_size = newsize - nb;
4222
4223   if (remainder_size < MINSIZE)   /* not enough extra to split off */
4224     {
4225       set_head_size (newp, newsize | (av != &main_arena ? NON_MAIN_ARENA : 0));
4226       set_inuse_bit_at_offset (newp, newsize);
4227     }
4228   else   /* split remainder */
4229     {
4230       remainder = chunk_at_offset (newp, nb);
4231       set_head_size (newp, nb | (av != &main_arena ? NON_MAIN_ARENA : 0));
4232       set_head (remainder, remainder_size | PREV_INUSE |
4233                 (av != &main_arena ? NON_MAIN_ARENA : 0));
4234       /* Mark remainder as inuse so free() won't complain */
4235       set_inuse_bit_at_offset (remainder, remainder_size);
4236       _int_free (av, remainder, 1);
4237     }
4238
4239   check_inuse_chunk (av, newp);
4240   return chunk2mem (newp);
4241 }
4242
4243 /*
4244    ------------------------------ memalign ------------------------------
4245  */
4246
4247 static void *
4248 _int_memalign (mstate av, size_t alignment, size_t bytes)
4249 {
4250   INTERNAL_SIZE_T nb;             /* padded  request size */
4251   char *m;                        /* memory returned by malloc call */
4252   mchunkptr p;                    /* corresponding chunk */
4253   char *brk;                      /* alignment point within p */
4254   mchunkptr newp;                 /* chunk to return */
4255   INTERNAL_SIZE_T newsize;        /* its size */
4256   INTERNAL_SIZE_T leadsize;       /* leading space before alignment point */
4257   mchunkptr remainder;            /* spare room at end to split off */
4258   unsigned long remainder_size;   /* its size */
4259   INTERNAL_SIZE_T size;
4260
4261
4262
4263   checked_request2size (bytes, nb);
4264
4265   /*
4266      Strategy: find a spot within that chunk that meets the alignment
4267      request, and then possibly free the leading and trailing space.
4268    */
4269
4270
4271   /* Call malloc with worst case padding to hit alignment. */
4272
4273   m = (char *) (_int_malloc (av, nb + alignment + MINSIZE));
4274
4275   if (m == 0)
4276     return 0;           /* propagate failure */
4277
4278   p = mem2chunk (m);
4279
4280   if ((((unsigned long) (m)) % alignment) != 0)   /* misaligned */
4281
4282     { /*
4283                 Find an aligned spot inside chunk.  Since we need to give back
4284                 leading space in a chunk of at least MINSIZE, if the first
4285                 calculation places us at a spot with less than MINSIZE leader,
4286                 we can move to the next aligned spot -- we've allocated enough
4287                 total room so that this is always possible.
4288                  */
4289       brk = (char *) mem2chunk (((unsigned long) (m + alignment - 1)) &
4290                                 - ((signed long) alignment));
4291       if ((unsigned long) (brk - (char *) (p)) < MINSIZE)
4292         brk += alignment;
4293
4294       newp = (mchunkptr) brk;
4295       leadsize = brk - (char *) (p);
4296       newsize = chunksize (p) - leadsize;
4297
4298       /* For mmapped chunks, just adjust offset */
4299       if (chunk_is_mmapped (p))
4300         {
4301           newp->prev_size = p->prev_size + leadsize;
4302           set_head (newp, newsize | IS_MMAPPED);
4303           return chunk2mem (newp);
4304         }
4305
4306       /* Otherwise, give back leader, use the rest */
4307       set_head (newp, newsize | PREV_INUSE |
4308                 (av != &main_arena ? NON_MAIN_ARENA : 0));
4309       set_inuse_bit_at_offset (newp, newsize);
4310       set_head_size (p, leadsize | (av != &main_arena ? NON_MAIN_ARENA : 0));
4311       _int_free (av, p, 1);
4312       p = newp;
4313
4314       assert (newsize >= nb &&
4315               (((unsigned long) (chunk2mem (p))) % alignment) == 0);
4316     }
4317
4318   /* Also give back spare room at the end */
4319   if (!chunk_is_mmapped (p))
4320     {
4321       size = chunksize (p);
4322       if ((unsigned long) (size) > (unsigned long) (nb + MINSIZE))
4323         {
4324           remainder_size = size - nb;
4325           remainder = chunk_at_offset (p, nb);
4326           set_head (remainder, remainder_size | PREV_INUSE |
4327                     (av != &main_arena ? NON_MAIN_ARENA : 0));
4328           set_head_size (p, nb);
4329           _int_free (av, remainder, 1);
4330         }
4331     }
4332
4333   check_inuse_chunk (av, p);
4334   return chunk2mem (p);
4335 }
4336
4337
4338 /*
4339    ------------------------------ malloc_trim ------------------------------
4340  */
4341
4342 static int
4343 mtrim (mstate av, size_t pad)
4344 {
4345   /* Ensure initialization/consolidation */
4346   malloc_consolidate (av);
4347
4348   const size_t ps = GLRO (dl_pagesize);
4349   int psindex = bin_index (ps);
4350   const size_t psm1 = ps - 1;
4351
4352   int result = 0;
4353   for (int i = 1; i < NBINS; ++i)
4354     if (i == 1 || i >= psindex)
4355       {
4356         mbinptr bin = bin_at (av, i);
4357
4358         for (mchunkptr p = last (bin); p != bin; p = p->bk)
4359           {
4360             INTERNAL_SIZE_T size = chunksize (p);
4361
4362             if (size > psm1 + sizeof (struct malloc_chunk))
4363               {
4364                 /* See whether the chunk contains at least one unused page.  */
4365                 char *paligned_mem = (char *) (((uintptr_t) p
4366                                                 + sizeof (struct malloc_chunk)
4367                                                 + psm1) & ~psm1);
4368
4369                 assert ((char *) chunk2mem (p) + 4 * SIZE_SZ <= paligned_mem);
4370                 assert ((char *) p + size > paligned_mem);
4371
4372                 /* This is the size we could potentially free.  */
4373                 size -= paligned_mem - (char *) p;
4374
4375                 if (size > psm1)
4376                   {
4377 #ifdef MALLOC_DEBUG
4378                     /* When debugging we simulate destroying the memory
4379                        content.  */
4380                     memset (paligned_mem, 0x89, size & ~psm1);
4381 #endif
4382                     __madvise (paligned_mem, size & ~psm1, MADV_DONTNEED);
4383
4384                     result = 1;
4385                   }
4386               }
4387           }
4388       }
4389
4390 #ifndef MORECORE_CANNOT_TRIM
4391   return result | (av == &main_arena ? systrim (pad, av) : 0);
4392
4393 #else
4394   return result;
4395 #endif
4396 }
4397
4398
4399 int
4400 __malloc_trim (size_t s)
4401 {
4402   int result = 0;
4403
4404   if (__malloc_initialized < 0)
4405     ptmalloc_init ();
4406
4407   mstate ar_ptr = &main_arena;
4408   do
4409     {
4410       (void) mutex_lock (&ar_ptr->mutex);
4411       result |= mtrim (ar_ptr, s);
4412       (void) mutex_unlock (&ar_ptr->mutex);
4413
4414       ar_ptr = ar_ptr->next;
4415     }
4416   while (ar_ptr != &main_arena);
4417
4418   return result;
4419 }
4420
4421
4422 /*
4423    ------------------------- malloc_usable_size -------------------------
4424  */
4425
4426 static size_t
4427 musable (void *mem)
4428 {
4429   mchunkptr p;
4430   if (mem != 0)
4431     {
4432       p = mem2chunk (mem);
4433
4434       if (__builtin_expect (using_malloc_checking == 1, 0))
4435         return malloc_check_get_size (p);
4436
4437       if (chunk_is_mmapped (p))
4438         return chunksize (p) - 2 * SIZE_SZ;
4439       else if (inuse (p))
4440         return chunksize (p) - SIZE_SZ;
4441     }
4442   return 0;
4443 }
4444
4445
4446 size_t
4447 __malloc_usable_size (void *m)
4448 {
4449   size_t result;
4450
4451   result = musable (m);
4452   return result;
4453 }
4454
4455 /*
4456    ------------------------------ mallinfo ------------------------------
4457    Accumulate malloc statistics for arena AV into M.
4458  */
4459
4460 static void
4461 int_mallinfo (mstate av, struct mallinfo *m)
4462 {
4463   size_t i;
4464   mbinptr b;
4465   mchunkptr p;
4466   INTERNAL_SIZE_T avail;
4467   INTERNAL_SIZE_T fastavail;
4468   int nblocks;
4469   int nfastblocks;
4470
4471   /* Ensure initialization */
4472   if (av->top == 0)
4473     malloc_consolidate (av);
4474
4475   check_malloc_state (av);
4476
4477   /* Account for top */
4478   avail = chunksize (av->top);
4479   nblocks = 1;  /* top always exists */
4480
4481   /* traverse fastbins */
4482   nfastblocks = 0;
4483   fastavail = 0;
4484
4485   for (i = 0; i < NFASTBINS; ++i)
4486     {
4487       for (p = fastbin (av, i); p != 0; p = p->fd)
4488         {
4489           ++nfastblocks;
4490           fastavail += chunksize (p);
4491         }
4492     }
4493
4494   avail += fastavail;
4495
4496   /* traverse regular bins */
4497   for (i = 1; i < NBINS; ++i)
4498     {
4499       b = bin_at (av, i);
4500       for (p = last (b); p != b; p = p->bk)
4501         {
4502           ++nblocks;
4503           avail += chunksize (p);
4504         }
4505     }
4506
4507   m->smblks += nfastblocks;
4508   m->ordblks += nblocks;
4509   m->fordblks += avail;
4510   m->uordblks += av->system_mem - avail;
4511   m->arena += av->system_mem;
4512   m->fsmblks += fastavail;
4513   if (av == &main_arena)
4514     {
4515       m->hblks = mp_.n_mmaps;
4516       m->hblkhd = mp_.mmapped_mem;
4517       m->usmblks = mp_.max_total_mem;
4518       m->keepcost = chunksize (av->top);
4519     }
4520 }
4521
4522
4523 struct mallinfo
4524 __libc_mallinfo ()
4525 {
4526   struct mallinfo m;
4527   mstate ar_ptr;
4528
4529   if (__malloc_initialized < 0)
4530     ptmalloc_init ();
4531
4532   memset (&m, 0, sizeof (m));
4533   ar_ptr = &main_arena;
4534   do
4535     {
4536       (void) mutex_lock (&ar_ptr->mutex);
4537       int_mallinfo (ar_ptr, &m);
4538       (void) mutex_unlock (&ar_ptr->mutex);
4539
4540       ar_ptr = ar_ptr->next;
4541     }
4542   while (ar_ptr != &main_arena);
4543
4544   return m;
4545 }
4546
4547 /*
4548    ------------------------------ malloc_stats ------------------------------
4549  */
4550
4551 void
4552 __malloc_stats (void)
4553 {
4554   int i;
4555   mstate ar_ptr;
4556   unsigned int in_use_b = mp_.mmapped_mem, system_b = in_use_b;
4557
4558   if (__malloc_initialized < 0)
4559     ptmalloc_init ();
4560   _IO_flockfile (stderr);
4561   int old_flags2 = ((_IO_FILE *) stderr)->_flags2;
4562   ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL;
4563   for (i = 0, ar_ptr = &main_arena;; i++)
4564     {
4565       struct mallinfo mi;
4566
4567       memset (&mi, 0, sizeof (mi));
4568       (void) mutex_lock (&ar_ptr->mutex);
4569       int_mallinfo (ar_ptr, &mi);
4570       fprintf (stderr, "Arena %d:\n", i);
4571       fprintf (stderr, "system bytes     = %10u\n", (unsigned int) mi.arena);
4572       fprintf (stderr, "in use bytes     = %10u\n", (unsigned int) mi.uordblks);
4573 #if MALLOC_DEBUG > 1
4574       if (i > 0)
4575         dump_heap (heap_for_ptr (top (ar_ptr)));
4576 #endif
4577       system_b += mi.arena;
4578       in_use_b += mi.uordblks;
4579       (void) mutex_unlock (&ar_ptr->mutex);
4580       ar_ptr = ar_ptr->next;
4581       if (ar_ptr == &main_arena)
4582         break;
4583     }
4584   fprintf (stderr, "Total (incl. mmap):\n");
4585   fprintf (stderr, "system bytes     = %10u\n", system_b);
4586   fprintf (stderr, "in use bytes     = %10u\n", in_use_b);
4587   fprintf (stderr, "max mmap regions = %10u\n", (unsigned int) mp_.max_n_mmaps);
4588   fprintf (stderr, "max mmap bytes   = %10lu\n",
4589            (unsigned long) mp_.max_mmapped_mem);
4590   ((_IO_FILE *) stderr)->_flags2 |= old_flags2;
4591   _IO_funlockfile (stderr);
4592 }
4593
4594
4595 /*
4596    ------------------------------ mallopt ------------------------------
4597  */
4598
4599 int
4600 __libc_mallopt (int param_number, int value)
4601 {
4602   mstate av = &main_arena;
4603   int res = 1;
4604
4605   if (__malloc_initialized < 0)
4606     ptmalloc_init ();
4607   (void) mutex_lock (&av->mutex);
4608   /* Ensure initialization/consolidation */
4609   malloc_consolidate (av);
4610
4611   LIBC_PROBE (memory_mallopt, 2, param_number, value);
4612
4613   switch (param_number)
4614     {
4615     case M_MXFAST:
4616       if (value >= 0 && value <= MAX_FAST_SIZE)
4617         {
4618           LIBC_PROBE (memory_mallopt_mxfast, 2, value, get_max_fast ());
4619           set_max_fast (value);
4620         }
4621       else
4622         res = 0;
4623       break;
4624
4625     case M_TRIM_THRESHOLD:
4626       LIBC_PROBE (memory_mallopt_trim_threshold, 3, value,
4627                   mp_.trim_threshold, mp_.no_dyn_threshold);
4628       mp_.trim_threshold = value;
4629       mp_.no_dyn_threshold = 1;
4630       break;
4631
4632     case M_TOP_PAD:
4633       LIBC_PROBE (memory_mallopt_top_pad, 3, value,
4634                   mp_.top_pad, mp_.no_dyn_threshold);
4635       mp_.top_pad = value;
4636       mp_.no_dyn_threshold = 1;
4637       break;
4638
4639     case M_MMAP_THRESHOLD:
4640       /* Forbid setting the threshold too high. */
4641       if ((unsigned long) value > HEAP_MAX_SIZE / 2)
4642         res = 0;
4643       else
4644         {
4645           LIBC_PROBE (memory_mallopt_mmap_threshold, 3, value,
4646                       mp_.mmap_threshold, mp_.no_dyn_threshold);
4647           mp_.mmap_threshold = value;
4648           mp_.no_dyn_threshold = 1;
4649         }
4650       break;
4651
4652     case M_MMAP_MAX:
4653       LIBC_PROBE (memory_mallopt_mmap_max, 3, value,
4654                   mp_.n_mmaps_max, mp_.no_dyn_threshold);
4655       mp_.n_mmaps_max = value;
4656       mp_.no_dyn_threshold = 1;
4657       break;
4658
4659     case M_CHECK_ACTION:
4660       LIBC_PROBE (memory_mallopt_check_action, 2, value, check_action);
4661       check_action = value;
4662       break;
4663
4664     case M_PERTURB:
4665       LIBC_PROBE (memory_mallopt_perturb, 2, value, perturb_byte);
4666       perturb_byte = value;
4667       break;
4668
4669     case M_ARENA_TEST:
4670       if (value > 0)
4671         {
4672           LIBC_PROBE (memory_mallopt_arena_test, 2, value, mp_.arena_test);
4673           mp_.arena_test = value;
4674         }
4675       break;
4676
4677     case M_ARENA_MAX:
4678       if (value > 0)
4679         {
4680           LIBC_PROBE (memory_mallopt_arena_max, 2, value, mp_.arena_max);
4681           mp_.arena_max = value;
4682         }
4683       break;
4684     }
4685   (void) mutex_unlock (&av->mutex);
4686   return res;
4687 }
4688 libc_hidden_def (__libc_mallopt)
4689
4690
4691 /*
4692    -------------------- Alternative MORECORE functions --------------------
4693  */
4694
4695
4696 /*
4697    General Requirements for MORECORE.
4698
4699    The MORECORE function must have the following properties:
4700
4701    If MORECORE_CONTIGUOUS is false:
4702
4703  * MORECORE must allocate in multiples of pagesize. It will
4704       only be called with arguments that are multiples of pagesize.
4705
4706  * MORECORE(0) must return an address that is at least
4707       MALLOC_ALIGNMENT aligned. (Page-aligning always suffices.)
4708
4709    else (i.e. If MORECORE_CONTIGUOUS is true):
4710
4711  * Consecutive calls to MORECORE with positive arguments
4712       return increasing addresses, indicating that space has been
4713       contiguously extended.
4714
4715  * MORECORE need not allocate in multiples of pagesize.
4716       Calls to MORECORE need not have args of multiples of pagesize.
4717
4718  * MORECORE need not page-align.
4719
4720    In either case:
4721
4722  * MORECORE may allocate more memory than requested. (Or even less,
4723       but this will generally result in a malloc failure.)
4724
4725  * MORECORE must not allocate memory when given argument zero, but
4726       instead return one past the end address of memory from previous
4727       nonzero call. This malloc does NOT call MORECORE(0)
4728       until at least one call with positive arguments is made, so
4729       the initial value returned is not important.
4730
4731  * Even though consecutive calls to MORECORE need not return contiguous
4732       addresses, it must be OK for malloc'ed chunks to span multiple
4733       regions in those cases where they do happen to be contiguous.
4734
4735  * MORECORE need not handle negative arguments -- it may instead
4736       just return MORECORE_FAILURE when given negative arguments.
4737       Negative arguments are always multiples of pagesize. MORECORE
4738       must not misinterpret negative args as large positive unsigned
4739       args. You can suppress all such calls from even occurring by defining
4740       MORECORE_CANNOT_TRIM,
4741
4742    There is some variation across systems about the type of the
4743    argument to sbrk/MORECORE. If size_t is unsigned, then it cannot
4744    actually be size_t, because sbrk supports negative args, so it is
4745    normally the signed type of the same width as size_t (sometimes
4746    declared as "intptr_t", and sometimes "ptrdiff_t").  It doesn't much
4747    matter though. Internally, we use "long" as arguments, which should
4748    work across all reasonable possibilities.
4749
4750    Additionally, if MORECORE ever returns failure for a positive
4751    request, then mmap is used as a noncontiguous system allocator. This
4752    is a useful backup strategy for systems with holes in address spaces
4753    -- in this case sbrk cannot contiguously expand the heap, but mmap
4754    may be able to map noncontiguous space.
4755
4756    If you'd like mmap to ALWAYS be used, you can define MORECORE to be
4757    a function that always returns MORECORE_FAILURE.
4758
4759    If you are using this malloc with something other than sbrk (or its
4760    emulation) to supply memory regions, you probably want to set
4761    MORECORE_CONTIGUOUS as false.  As an example, here is a custom
4762    allocator kindly contributed for pre-OSX macOS.  It uses virtually
4763    but not necessarily physically contiguous non-paged memory (locked
4764    in, present and won't get swapped out).  You can use it by
4765    uncommenting this section, adding some #includes, and setting up the
4766    appropriate defines above:
4767
4768  *#define MORECORE osMoreCore
4769  *#define MORECORE_CONTIGUOUS 0
4770
4771    There is also a shutdown routine that should somehow be called for
4772    cleanup upon program exit.
4773
4774  *#define MAX_POOL_ENTRIES 100
4775  *#define MINIMUM_MORECORE_SIZE  (64 * 1024)
4776    static int next_os_pool;
4777    void *our_os_pools[MAX_POOL_ENTRIES];
4778
4779    void *osMoreCore(int size)
4780    {
4781     void *ptr = 0;
4782     static void *sbrk_top = 0;
4783
4784     if (size > 0)
4785     {
4786       if (size < MINIMUM_MORECORE_SIZE)
4787          size = MINIMUM_MORECORE_SIZE;
4788       if (CurrentExecutionLevel() == kTaskLevel)
4789          ptr = PoolAllocateResident(size + RM_PAGE_SIZE, 0);
4790       if (ptr == 0)
4791       {
4792         return (void *) MORECORE_FAILURE;
4793       }
4794       // save ptrs so they can be freed during cleanup
4795       our_os_pools[next_os_pool] = ptr;
4796       next_os_pool++;
4797       ptr = (void *) ((((unsigned long) ptr) + RM_PAGE_MASK) & ~RM_PAGE_MASK);
4798       sbrk_top = (char *) ptr + size;
4799       return ptr;
4800     }
4801     else if (size < 0)
4802     {
4803       // we don't currently support shrink behavior
4804       return (void *) MORECORE_FAILURE;
4805     }
4806     else
4807     {
4808       return sbrk_top;
4809     }
4810    }
4811
4812    // cleanup any allocated memory pools
4813    // called as last thing before shutting down driver
4814
4815    void osCleanupMem(void)
4816    {
4817     void **ptr;
4818
4819     for (ptr = our_os_pools; ptr < &our_os_pools[MAX_POOL_ENTRIES]; ptr++)
4820       if (*ptr)
4821       {
4822          PoolDeallocate(*ptr);
4823  * ptr = 0;
4824       }
4825    }
4826
4827  */
4828
4829
4830 /* Helper code.  */
4831
4832 extern char **__libc_argv attribute_hidden;
4833
4834 static void
4835 malloc_printerr (int action, const char *str, void *ptr)
4836 {
4837   if ((action & 5) == 5)
4838     __libc_message (action & 2, "%s\n", str);
4839   else if (action & 1)
4840     {
4841       char buf[2 * sizeof (uintptr_t) + 1];
4842
4843       buf[sizeof (buf) - 1] = '\0';
4844       char *cp = _itoa_word ((uintptr_t) ptr, &buf[sizeof (buf) - 1], 16, 0);
4845       while (cp > buf)
4846         *--cp = '0';
4847
4848       __libc_message (action & 2, "*** Error in `%s': %s: 0x%s ***\n",
4849                       __libc_argv[0] ? : "<unknown>", str, cp);
4850     }
4851   else if (action & 2)
4852     abort ();
4853 }
4854
4855 /* We need a wrapper function for one of the additions of POSIX.  */
4856 int
4857 __posix_memalign (void **memptr, size_t alignment, size_t size)
4858 {
4859   void *mem;
4860
4861   /* Test whether the SIZE argument is valid.  It must be a power of
4862      two multiple of sizeof (void *).  */
4863   if (alignment % sizeof (void *) != 0
4864       || !powerof2 (alignment / sizeof (void *)) != 0
4865       || alignment == 0)
4866     return EINVAL;
4867
4868
4869   void *address = RETURN_ADDRESS (0);
4870   mem = _mid_memalign (alignment, size, address);
4871
4872   if (mem != NULL)
4873     {
4874       *memptr = mem;
4875       return 0;
4876     }
4877
4878   return ENOMEM;
4879 }
4880 weak_alias (__posix_memalign, posix_memalign)
4881
4882
4883 int
4884 malloc_info (int options, FILE *fp)
4885 {
4886   /* For now, at least.  */
4887   if (options != 0)
4888     return EINVAL;
4889
4890   int n = 0;
4891   size_t total_nblocks = 0;
4892   size_t total_nfastblocks = 0;
4893   size_t total_avail = 0;
4894   size_t total_fastavail = 0;
4895   size_t total_system = 0;
4896   size_t total_max_system = 0;
4897   size_t total_aspace = 0;
4898   size_t total_aspace_mprotect = 0;
4899
4900   void
4901   mi_arena (mstate ar_ptr)
4902   {
4903     fprintf (fp, "<heap nr=\"%d\">\n<sizes>\n", n++);
4904
4905     size_t nblocks = 0;
4906     size_t nfastblocks = 0;
4907     size_t avail = 0;
4908     size_t fastavail = 0;
4909     struct
4910     {
4911       size_t from;
4912       size_t to;
4913       size_t total;
4914       size_t count;
4915     } sizes[NFASTBINS + NBINS - 1];
4916 #define nsizes (sizeof (sizes) / sizeof (sizes[0]))
4917
4918     mutex_lock (&ar_ptr->mutex);
4919
4920     for (size_t i = 0; i < NFASTBINS; ++i)
4921       {
4922         mchunkptr p = fastbin (ar_ptr, i);
4923         if (p != NULL)
4924           {
4925             size_t nthissize = 0;
4926             size_t thissize = chunksize (p);
4927
4928             while (p != NULL)
4929               {
4930                 ++nthissize;
4931                 p = p->fd;
4932               }
4933
4934             fastavail += nthissize * thissize;
4935             nfastblocks += nthissize;
4936             sizes[i].from = thissize - (MALLOC_ALIGNMENT - 1);
4937             sizes[i].to = thissize;
4938             sizes[i].count = nthissize;
4939           }
4940         else
4941           sizes[i].from = sizes[i].to = sizes[i].count = 0;
4942
4943         sizes[i].total = sizes[i].count * sizes[i].to;
4944       }
4945
4946
4947     mbinptr bin;
4948     struct malloc_chunk *r;
4949
4950     for (size_t i = 1; i < NBINS; ++i)
4951       {
4952         bin = bin_at (ar_ptr, i);
4953         r = bin->fd;
4954         sizes[NFASTBINS - 1 + i].from = ~((size_t) 0);
4955         sizes[NFASTBINS - 1 + i].to = sizes[NFASTBINS - 1 + i].total
4956                                         = sizes[NFASTBINS - 1 + i].count = 0;
4957
4958         if (r != NULL)
4959           while (r != bin)
4960             {
4961               ++sizes[NFASTBINS - 1 + i].count;
4962               sizes[NFASTBINS - 1 + i].total += r->size;
4963               sizes[NFASTBINS - 1 + i].from
4964                 = MIN (sizes[NFASTBINS - 1 + i].from, r->size);
4965               sizes[NFASTBINS - 1 + i].to = MAX (sizes[NFASTBINS - 1 + i].to,
4966                                                  r->size);
4967
4968               r = r->fd;
4969             }
4970
4971         if (sizes[NFASTBINS - 1 + i].count == 0)
4972           sizes[NFASTBINS - 1 + i].from = 0;
4973         nblocks += sizes[NFASTBINS - 1 + i].count;
4974         avail += sizes[NFASTBINS - 1 + i].total;
4975       }
4976
4977     mutex_unlock (&ar_ptr->mutex);
4978
4979     total_nfastblocks += nfastblocks;
4980     total_fastavail += fastavail;
4981
4982     total_nblocks += nblocks;
4983     total_avail += avail;
4984
4985     for (size_t i = 0; i < nsizes; ++i)
4986       if (sizes[i].count != 0 && i != NFASTBINS)
4987         fprintf (fp, "                                                        \
4988 <size from=\"%zu\" to=\"%zu\" total=\"%zu\" count=\"%zu\"/>\n",
4989                  sizes[i].from, sizes[i].to, sizes[i].total, sizes[i].count);
4990
4991     if (sizes[NFASTBINS].count != 0)
4992       fprintf (fp, "\
4993 <unsorted from=\"%zu\" to=\"%zu\" total=\"%zu\" count=\"%zu\"/>\n",
4994                sizes[NFASTBINS].from, sizes[NFASTBINS].to,
4995                sizes[NFASTBINS].total, sizes[NFASTBINS].count);
4996
4997     total_system += ar_ptr->system_mem;
4998     total_max_system += ar_ptr->max_system_mem;
4999
5000     fprintf (fp,
5001              "</sizes>\n<total type=\"fast\" count=\"%zu\" size=\"%zu\"/>\n"
5002              "<total type=\"rest\" count=\"%zu\" size=\"%zu\"/>\n"
5003              "<system type=\"current\" size=\"%zu\"/>\n"
5004              "<system type=\"max\" size=\"%zu\"/>\n",
5005              nfastblocks, fastavail, nblocks, avail,
5006              ar_ptr->system_mem, ar_ptr->max_system_mem);
5007
5008     if (ar_ptr != &main_arena)
5009       {
5010         heap_info *heap = heap_for_ptr (top (ar_ptr));
5011         fprintf (fp,
5012                  "<aspace type=\"total\" size=\"%zu\"/>\n"
5013                  "<aspace type=\"mprotect\" size=\"%zu\"/>\n",
5014                  heap->size, heap->mprotect_size);
5015         total_aspace += heap->size;
5016         total_aspace_mprotect += heap->mprotect_size;
5017       }
5018     else
5019       {
5020         fprintf (fp,
5021                  "<aspace type=\"total\" size=\"%zu\"/>\n"
5022                  "<aspace type=\"mprotect\" size=\"%zu\"/>\n",
5023                  ar_ptr->system_mem, ar_ptr->system_mem);
5024         total_aspace += ar_ptr->system_mem;
5025         total_aspace_mprotect += ar_ptr->system_mem;
5026       }
5027
5028     fputs ("</heap>\n", fp);
5029   }
5030
5031   if (__malloc_initialized < 0)
5032     ptmalloc_init ();
5033
5034   fputs ("<malloc version=\"1\">\n", fp);
5035
5036   /* Iterate over all arenas currently in use.  */
5037   mstate ar_ptr = &main_arena;
5038   do
5039     {
5040       mi_arena (ar_ptr);
5041       ar_ptr = ar_ptr->next;
5042     }
5043   while (ar_ptr != &main_arena);
5044
5045   fprintf (fp,
5046            "<total type=\"fast\" count=\"%zu\" size=\"%zu\"/>\n"
5047            "<total type=\"rest\" count=\"%zu\" size=\"%zu\"/>\n"
5048            "<system type=\"current\" size=\"%zu\"/>\n"
5049            "<system type=\"max\" size=\"%zu\"/>\n"
5050            "<aspace type=\"total\" size=\"%zu\"/>\n"
5051            "<aspace type=\"mprotect\" size=\"%zu\"/>\n"
5052            "</malloc>\n",
5053            total_nfastblocks, total_fastavail, total_nblocks, total_avail,
5054            total_system, total_max_system,
5055            total_aspace, total_aspace_mprotect);
5056
5057   return 0;
5058 }
5059
5060
5061 strong_alias (__libc_calloc, __calloc) weak_alias (__libc_calloc, calloc)
5062 strong_alias (__libc_free, __cfree) weak_alias (__libc_free, cfree)
5063 strong_alias (__libc_free, __free) strong_alias (__libc_free, free)
5064 strong_alias (__libc_malloc, __malloc) strong_alias (__libc_malloc, malloc)
5065 strong_alias (__libc_memalign, __memalign)
5066 weak_alias (__libc_memalign, memalign)
5067 strong_alias (__libc_realloc, __realloc) strong_alias (__libc_realloc, realloc)
5068 strong_alias (__libc_valloc, __valloc) weak_alias (__libc_valloc, valloc)
5069 strong_alias (__libc_pvalloc, __pvalloc) weak_alias (__libc_pvalloc, pvalloc)
5070 strong_alias (__libc_mallinfo, __mallinfo)
5071 weak_alias (__libc_mallinfo, mallinfo)
5072 strong_alias (__libc_mallopt, __mallopt) weak_alias (__libc_mallopt, mallopt)
5073
5074 weak_alias (__malloc_stats, malloc_stats)
5075 weak_alias (__malloc_usable_size, malloc_usable_size)
5076 weak_alias (__malloc_trim, malloc_trim)
5077 weak_alias (__malloc_get_state, malloc_get_state)
5078 weak_alias (__malloc_set_state, malloc_set_state)
5079
5080
5081 /* ------------------------------------------------------------
5082    History:
5083
5084    [see ftp://g.oswego.edu/pub/misc/malloc.c for the history of dlmalloc]
5085
5086  */
5087 /*
5088  * Local variables:
5089  * c-basic-offset: 2
5090  * End:
5091  */