Commit Graph

333 Commits

Author SHA1 Message Date
Ondřej Bílka 987c02692a Remove mi_arena nested function. 2014-05-30 13:25:43 +02:00
Ondřej Bílka 20c138997a revert commit fdfd175d46 2014-05-30 13:23:39 +02:00
Carlos O'Donell fdfd175d46 Remove nested function mi_arena from malloc_info.
The nested function mi_arena was removed from malloc_info
and made into a non-nested static inline function of the same
name with the correct set of arguments passed from malloc_info.
This enables building glibc with compilers that don't support
nested functions. Future work on malloc_info should remove these
functions entirely to support JSON format output. Therefore we
do the minimum required to remove the nested function.
2014-05-26 11:32:09 -04:00
Will Newton 439bda3209 malloc: Fix MALLOC_DEBUG -Wundef warning
MALLOC_DEBUG is set optionally on the command line. Default the value
to zero if it is not set on the command line, and test its value
with #if rather than #ifdef. Verified the code is identical before
and after this change apart from line numbers.

ChangeLog:

2014-04-11  Will Newton  <will.newton@linaro.org>

	* malloc/malloc.c [!MALLOC_DEBUG]: #define MALLOC_DEBUG
	to zero if it is not defined elsewhere.  (mtrim): Test
	the value of MALLOC_DEBUG with #if rather than #ifdef.
2014-04-11 09:54:18 +01:00
Carlos O'Donell d6285c9f0b Revert 4248f0da6f.
Objections were raised surrounding the calloc simplification
and it is better to revert the patch, continue discussions
and then submit a new patch for inclusion with all issues
fully addressed.
2014-03-03 12:30:17 -05:00
Ondřej Bílka 4248f0da6f Simplify calloc implementation.
To make future improvements of allocator simpler we could for now calloc
just call malloc and memset. With that we could omit a changes that
would duplicate malloc changes anyway.
2014-02-26 13:15:33 +01:00
Ondřej Bílka a1ffb40e32 Use glibc_likely instead __builtin_expect. 2014-02-10 15:07:12 +01:00
Ondřej Bílka bdfe308a16 Remove THREAD_STATS.
A THREAD_STATS macro duplicates gathering information that could be
obtained by systemtap probes instead.
2014-02-10 12:25:04 +01:00
Ondřej Bílka 6c8dbf00f5 Reformat malloc to gnu style. 2014-01-02 09:40:10 +01:00
Allan McRae d4697bc93d Update copyright notices with scripts/update-copyrights 2014-01-01 22:00:23 +10:00
Maxim Kuvyrkov 362b47fe09 Fix race in free() of fastbin chunk: BZ #15073
Perform sanity check only if we have_lock.  Due to lockless nature of fastbins
we need to be careful derefencing pointers to fastbin entries (chunksize(old)
in this case) in multithreaded environments.

The fix is to add have_lock to the if-condition checks.  The rest of the patch
only makes code more readable.

	* malloc/malloc.c (_int_free): Perform sanity check only if we
	have_lock.
2013-12-24 09:44:50 +13:00
Ondřej Bílka 0dfa665cc1 Expand MALLOC_COPY and MALLOC_ZERO to memcpy and memset. 2013-12-10 19:36:28 +01:00
Ondřej Bílka 5782a80f9f Drop PER_THREAD conditionals from malloc. 2013-12-10 18:00:14 +01:00
Ondřej Bílka e8349efd46 Simplify perturb_byte logic. 2013-12-09 17:25:19 +01:00
Ondřej Bílka f3eeb3fc56 Replace malloc force_reg by atomic_forced_read. 2013-12-09 17:14:12 +01:00
Fernando J. V. da Silva 4b5b548c9f Fix BZ #15089: malloc_trim always trim for large padding. 2013-12-06 18:06:56 +01:00
Ondřej Bílka 897b98ba4d Make memset in calloc a tail call. 2013-11-28 12:05:50 +01:00
Roland McGrath 070906ffd3 Add missing #include for malloc/hooks.c code. 2013-11-21 15:49:50 -08:00
Ondřej Bílka 10ad46bc65 Consolidate valloc/pvalloc code.
To make malloc code more maintainable we make malloc and pvalloc share
logic with memalign.
2013-11-20 15:46:02 +01:00
Ondřej Bílka 8b35e35d0f Fix malloc_info statistic. Fixes bug 16112 2013-11-01 15:39:26 +01:00
Will Newton a56ee40b17 malloc: Fix for infinite loop in memalign/posix_memalign.
A very large alignment argument passed to mealign/posix_memalign
causes _int_memalign to enter an infinite loop. Limit the maximum
alignment value to the maximum representable power of two to
prevent this from happening.

Changelog:

2013-10-30  Will Newton  <will.newton@linaro.org>

	[BZ #16038]
	* malloc/hooks.c (memalign_check): Limit alignment to the
	maximum representable power of two.
	* malloc/malloc.c (__libc_memalign): Likewise.
	* malloc/tst-memalign.c (do_test): Add test for very
	large alignment values.
	* malloc/tst-posix_memalign.c (do_test): Likewise.
2013-10-30 14:46:02 -07:00
Ondřej Bílka c6e4925d40 Use atomic operations to track memory. Fixes bug 11087 2013-10-30 16:25:21 +01:00
Ondřej Bílka 0bfcf2c73c Remove assert in malloc statistic. Fixes bug 12486. 2013-10-18 09:35:15 +02:00
Alexandre Oliva 322dea0838 Add malloc probes for sbrk and heap resizing.
for ChangeLog

	* malloc/arena.c (new_heap): New memory_heap_new probe.
	(grow_heap): New memory_heap_more probe.
	(shrink_heap): New memory_heap_less probe.
	(heap_trim): New memory_heap_free probe.
	* malloc/malloc.c (sysmalloc): New memory_sbrk_more probe.
	(systrim): New memory_sbrk_less probe.
	* manual/probes.texi: Document them.
2013-09-20 11:54:58 -03:00
Alexandre Oliva 35fed6f15d Add probes for malloc retries.
for ChangeLog

	* malloc/malloc.c (__libc_malloc): Add memory_malloc_retry probe.
	(__libc_realloc): Add memory_realloc_retry probe.
	(__libc_memalign): Add memory_memalign_retry probe.
	(__libc_valloc): Add memory_valloc_retry probe.
	(__libc_pvalloc): Add memory_pvalloc_retry probe.
	(__libc_calloc): Add memory_calloc_retry probe.
	* manual/probes.texi: Document them.
2013-09-20 11:50:08 -03:00
Alexandre Oliva 6999d38c95 Add probes for malloc arena changes.
for ChangeLog

	* malloc/arena.c (get_free_list): Add probe
	memory_arena_reuse_free_list.
	(reused_arena) [PER_THREAD]: Add probes memory_arena_reuse_wait
	and memory_arena_reuse.
	(arena_get2) [!PER_THREAD]: Likewise.
	* malloc/malloc.c (__libc_realloc) [!PER_THREAD]: Add probe
	memory_arena_reuse_realloc.
	* manual/probes.texi: Document them.
2013-09-20 11:48:45 -03:00
Alexandre Oliva 0653427fdb Add probes for all changes to malloc options.
for ChangeLog

	* malloc/malloc.c (__libc_free): Add
	memory_mallopt_free_dyn_thresholds probe.
	(__libc_mallopt): Add multiple memory_mallopt probes.
	* manual/probes.texi: Document them.
2013-09-20 11:42:28 -03:00
Alexandre Oliva 3ea5be5436 Add first set of memory probes.
for ChangeLog

	* malloc/malloc.c: Include stap-probe.h.
	(__libc_mallopt): Add memory_mallopt probe.
	* malloc/arena.c (_int_new_arena): Add memory_arena_new probe.
	* manual/probes.texi: New.
	* manual/Makefile (chapters): Add probes.
	* manual/threads.texi: Set next node.
2013-09-20 11:10:54 -03:00
Will Newton b73ed24778 malloc: Check for integer overflow in memalign.
A large bytes parameter to memalign could cause an integer overflow
and corrupt allocator internals. Check the overflow does not occur
before continuing with the allocation.

ChangeLog:

2013-09-11  Will Newton  <will.newton@linaro.org>

	[BZ #15857]
	* malloc/malloc.c (__libc_memalign): Check the value of bytes
	does not overflow.
2013-09-11 09:42:43 +01:00
Will Newton 55e17aadc1 malloc: Check for integer overflow in valloc.
A large bytes parameter to valloc could cause an integer overflow
and corrupt allocator internals. Check the overflow does not occur
before continuing with the allocation.

ChangeLog:

2013-09-11  Will Newton  <will.newton@linaro.org>

	[BZ #15856]
	* malloc/malloc.c (__libc_valloc): Check the value of bytes
	does not overflow.
2013-09-11 09:41:04 +01:00
Will Newton 1159a19369 malloc: Check for integer overflow in pvalloc.
A large bytes parameter to pvalloc could cause an integer overflow
and corrupt allocator internals. Check the overflow does not occur
before continuing with the allocation.

ChangeLog:

2013-09-11  Will Newton  <will.newton@linaro.org>

	[BZ #15855]
	* malloc/malloc.c (__libc_pvalloc): Check the value of bytes
	does not overflow.
2013-09-11 09:39:40 +01:00
Ondřej Bílka 6f65e66895 Fix typos. 2013-08-29 09:11:45 +02:00
Joseph Myers 60d2f8f3c7 Use (void) in no-arguments function definitions. 2013-06-08 00:22:23 +00:00
Joseph Myers a222d91a13 Remove __malloc_ptr_t. 2013-03-08 21:27:42 +00:00
Pino Toscano 2a26ef3a01 Add HAVE_MREMAP for mremap usage
Introduce (only on Linux) and use a HAVE_MREMAP symbol to advertize mremap
availability.

Move the malloc-sysdep.h include from arena.c to malloc.c, since what is
provided by malloc-sysdep.h is needed earlier in malloc.c, before the inclusion
of arena.c.
2013-01-17 21:08:12 +01:00
Joseph Myers 375607b9cc Clean up __MALLOC_* macros. 2013-01-07 15:00:47 +00:00
Joseph Myers 568035b787 Update copyright notices with scripts/update-copyrights. 2013-01-02 19:05:09 +00:00
Roland McGrath 9043e2288e Name space hygeine for madvise. 2012-10-04 16:31:43 -07:00
Dmitry V. Levin bb9510dc34 Clarify memory allocation error diagnostics to avoid confusion 2012-10-02 16:09:30 +00:00
Siddhesh Poyarekar c78ab09473 Cleanup code duplication in malloc on fallback to use another arena
Break the fallback code to try another arena into a separate function
for readability.
2012-09-07 14:40:58 +05:30
Alexandre Oliva 61d5817416 * malloc/malloc.c (__libc_mallopt) <M_MMAP_MAX>: Fix indentation. 2012-09-05 20:37:37 -03:00
Alexandre Oliva 5c44738353 Don't change no_dyn_threshold on mallopt failure
* malloc/malloc.c (__libc_mallopt) <M_MMAP_THRESHOLD>: Do not
	change internal state upon failure.
2012-09-05 15:43:04 -03:00
Siddhesh Poyarekar 6ef9cc37f0 Return requested size for malloc_usable_size when MALLOC_CHECK_ > 0
[BZ #1349]

malloc_usable_size returns the usable size in an allocated chunk,
which may be >= the requested size. In the case of MALLOC_CHECK_ being
exported to > 0 however, only the requested size is usable, since a
magic value is written at the end of the request size to trap writes
beyond request bounds. Hence, when MALLOC_CHECK_ is exported to > 0,
malloc_usable_size() should return the request size.
2012-09-05 21:49:30 +05:30
Roland McGrath 750c1f2a9a Make malloc build for no-threads configurations. 2012-08-17 11:29:45 -07:00
Jeff Law 77480c6ba5 Fix whitespace problems detected by commit hooks. 2012-08-10 09:39:58 -06:00
Jeff Law bf51f568f1 [BZ #13939]
* malloc.c/arena.c (reused_arena): New parameter, avoid_arena.
        When avoid_arena is set, don't retry in the that arena.  Pick the
        next one, whatever it might be.
        (arena_get2): New parameter avoid_arena, pass through to reused_arena.
        (arena_lock): Pass in new parameter to arena_get2.
        * malloc/malloc.c (__libc_memalign): Pass in new parameter to
        arena_get2.
        (__libc_malloc): Unify retrying after main arena failure with
        __libc_memalign version.
        (__libc_valloc, __libc_pvalloc, __libc_calloc): Likewise.
2012-08-10 09:37:52 -06:00
H.J. Lu 347c92e9e7 Make free chunk size a multiple of MALLOC_ALIGNMENT 2012-05-24 17:50:28 -07:00
H.J. Lu b5a2bbe6cc Properly handle MALLOC_ALIGNMENT > 2 * SIZE_SZ 2012-05-24 11:57:23 -07:00
Andreas Jaeger 662742187c Fix last change
Include shlib-compat.h for SHLIB_COMPAT.
2012-05-21 21:02:33 +02:00
Roland McGrath cbc00a0398 Set MALLOC_ALIGNMENT to at least __alignof__ (long double) for new ABIs. 2012-05-21 11:13:10 -07:00
Paul Pluzhnikov bedee953d8 For [BZ #208], accumulate malloc stats over all arenas. 2012-05-16 16:46:10 -07:00
H.J. Lu eb96ffb07d Move stdio-common/_itoa.h to sysdeps/generic 2012-03-20 16:00:23 -07:00
Paul Eggert 59ba27a63a Replace FSF snail mail address with URLs. 2012-02-09 23:18:22 +00:00
Ulrich Drepper 3b49edc04b Cleanups of malloc
Remove ugly names and unnecessary wrappers.
2012-01-31 18:49:22 -05:00
Ulrich Drepper 6e4b210745 More minor malloc cleanups 2012-01-17 19:21:09 -05:00
Ulrich Drepper d77e786926 Minor cleanups of malloc code 2012-01-16 12:07:56 -05:00
Ulrich Drepper a784e50247 Remove pre-ISO C support
No more __const.
2012-01-07 23:57:22 -05:00
Ulrich Drepper 380d7e87dc Implement aligned_alloc 2012-01-01 07:17:21 -05:00
Ulrich Drepper 6ef76f3b51 Avoid assertion in processes with VM in bad shape 2011-10-29 16:39:03 -04:00
Ulrich Drepper 8e58439c92 Remove MALLOC_FAILURE_ACTION use in malloc 2011-09-10 22:12:38 -04:00
Ulrich Drepper 02d46fc4b9 Simplify malloc initialization
Singificantly reduce the code needed at malloc initialization.  In
the process getpagesize is simplified by always initializing
GLRO(dl_pagesize).
2011-09-10 21:47:36 -04:00
Ulrich Drepper 22a8918713 Simplify malloc code
Remove all kinds of unused configuration options and dead code.
2011-09-10 18:10:17 -04:00
Ulrich Drepper d063d16433 Remove support for !USE___THREAD 2011-09-10 16:50:28 -04:00
Jim Meyering ded5b9b7c7 Remove doubled words. 2011-04-22 21:34:32 -04:00
Ulrich Drepper 9798346413 Use fastbin macro everywhere. 2010-12-25 14:15:42 -05:00
Ulrich Drepper fdc0f374bc Fix perturbing in malloc on free. 2010-10-24 22:37:00 -04:00
Anton Blanchard b9b42ee01c Replace divide and multiply with mask in sYSTRIm 2010-08-16 23:06:55 -07:00
Ulrich Drepper 5f24d53acb Fix race in free sanity check. 2010-05-06 04:42:46 -07:00
Ulrich Drepper 2645b8e5cc Remove unintended change. 2010-04-14 21:09:21 -07:00
H.J. Lu dd37cd1a12 Optimie x86-64 SSE4 memcmp for unaligned data. 2010-04-14 17:53:44 -07:00
Ulrich Drepper ad3d3e8f20 Fix possibly uninitilized variable handling.
If malloc errors are ignored (which say aren't by default and never
should be) malloc in the old, slow form might use an uninitialized
variable.
2010-04-08 17:12:42 -07:00
Ulrich Drepper 90a3055e8b One more sanity check in free. 2010-04-03 09:47:01 -07:00
Ulrich Drepper 991eda1ec1 Fix set_max_fast in malloc. 2010-04-03 09:43:10 -07:00
Ulrich Drepper 2b0fba7530 Remove stale reference to website 2010-03-26 05:09:55 -07:00
Ulrich Drepper 3e259dbb32 Remove unwanted malloc changes, again. 2010-03-26 04:00:10 -07:00
Ulrich Drepper 70c90289ff Merge branch 'master' of ssh://sources.redhat.com/git/glibc
Conflicts:
	ChangeLog
2010-03-25 19:45:20 -07:00
Ulrich Drepper 9d2569846c Fix typos I added in malloc.c 2010-02-24 19:47:09 -08:00
Petr Baudis 8c0b5f148e Fix assertion in palloc and pvalloc as well. 2010-02-24 15:44:29 -08:00
Ulrich Drepper 2c2243f708 Undo unintended maloc change. 2010-02-10 00:04:49 -08:00
Andreas Schwab 7eb22e757e Avoid PLT call to fegetenv on s390 2010-02-09 22:34:17 -08:00
Ulrich Drepper 346bc35c33 Fix malloc_info without prioor allocations. 2010-01-14 13:32:58 -08:00
John Sullivan ee6f35389c Fix typos in format strings of malloc_info. 2009-10-29 21:50:35 -07:00
Ulrich Drepper 72f9026327 Add local assert function to avoid problems with memory allocation in
the real one.
2009-08-31 04:55:10 -07:00
Ulrich Drepper bec466d922 Fix race in corruption check.
With atomic fastbins the checks performed can race with concurrent
modifications of the arena.  If we detect a problem re-do the test
after getting the lock.
2009-07-16 09:54:34 -07:00
Jakub Jelinek bea0ac1d87 Use rel semantics of cas instead of acq semantics with full barrier before it in _int_free
The following patch fixes catomic_compare_and_exchange_*_rel definitions
(which were never used and weren't correct) and uses
catomic_compare_and_exchange_val_rel in _int_free.  Comparing to the
pre-2009-07-02 --enable-experimental-malloc state the generated code should
be identical on all arches other than ppc/ppc64 and on ppc/ppc64 should use
lwsync instead of isync barrier.
2009-07-16 07:24:50 -07:00
Ulrich Drepper 6cbbaa50aa Fix possible race when freeing object in fast bin list. 2009-07-02 03:30:55 -07:00
Ulrich Drepper f6887a0d9a Add some more tests to malloc to detect corruptions. 2009-06-18 22:37:31 -07:00
Ulrich Drepper 0588a9cb62 * malloc/malloc.c (malloc_info): Output address space information. 2009-04-18 08:44:10 +00:00
Ulrich Drepper da2d2fb68d * malloc/malloc.c (malloc_info): Also output system memory information. 2009-04-18 05:14:52 +00:00
Ulrich Drepper df77455c4b [BZ #9957]
2009-04-16  Ulrich Drepper  <drepper@redhat.com>
	[BZ #9957]
	* malloc/malloc.c (force_reg): Define.
	(sYSMALLOc): Load hook variable into variable
	before test and force into register.
	(sYSTRIm): Likewise.
	(public_mALLOc): Force hook value into register.
	(public_fREe): Likewise.
	(public_rEALLOc): Likewise.
	(public_mEMALIGn): Likewise.
	(public_vALLOc): Likewise.
	(public_pVALLOc): Likewise.
	(public_cALLOc): Likewise.
	(__posix_memalign): Likewise.
	* malloc/arena.c (ptmalloc_init): Load hook variable into variable
	before test and force into register.
	* malloc/hooks.c (top_check): Likewise.
	(public_s_ET_STATe): Pretty printing.

	* resolv/res_send.c (send_dg): Don't just ignore the result we got
	in case we only receive one reply in single-request mode.
2009-04-16 21:22:16 +00:00
Ulrich Drepper bb06654506 * malloc/malloc.c (malloc_info): New function.
* malloc/malloc.h: Declare it.
	* malloc/Versions: Export malloc_info for GLIBC_2.10.

	* resolv/nss_dns/dns-host.c (getanswer_r): Use strcasecmp
2009-04-09 05:45:42 +00:00
Ulrich Drepper 4c8b8cc332 * malloc/malloc.c (_int_realloc): Add parameter with old block
size.  Remove duplicated test.  Don't handle mmap'ed blocks here.
	Adjust all callers.
	* malloc/hooks.c (realloc_check): Adjust _int_realloc call.
2009-04-08 18:00:34 +00:00
Ulrich Drepper 425ce2edb9 * config.h.in (USE_MULTIARCH): Define.
* configure.in: Handle --enable-multi-arch.
	* elf/dl-runtime.c (_dl_fixup): Handle STT_GNU_IFUNC.
	(_dl_fixup_profile): Likewise.
	* elf/do-lookup.c (dl_lookup_x): Likewise.
	* sysdeps/x86_64/dl-machine.h: Handle STT_GNU_IFUNC.
	* elf/elf.h (STT_GNU_IFUNC): Define.
	* include/libc-symbols.h (libc_ifunc): Define.
	* sysdeps/x86_64/cacheinfo.c: If USE_MULTIARCH is defined, use the
	framework in init-arch.h to get CPUID values.
	* sysdeps/x86_64/multiarch/Makefile: New file.
	* sysdeps/x86_64/multiarch/init-arch.c: New file.
	* sysdeps/x86_64/multiarch/init-arch.h: New file.
	* sysdeps/x86_64/multiarch/sched_cpucount.c: New file.

	* config.make.in (experimental-malloc): Define.
	* configure.in: Handle --enable-experimental-malloc.
	* malloc/Makefile: Handle experimental-malloc flag.
	* malloc/malloc.c: Implement PER_THREAD and ATOMIC_FASTBINS features.
	* malloc/arena.c: Likewise.
	* malloc/hooks.c: Likewise.
	* malloc/malloc.h: Define M_ARENA_TEST and M_ARENA_MAX.
2009-03-13 23:53:18 +00:00
Ulrich Drepper 6dd6a580df (_int_realloc): Likewise. Third argument is now padded size 2009-02-07 22:49:34 +00:00
Ulrich Drepper 78ac92ad8d * malloc/malloc.c (_int_free): Second argument is now mchunkptr.
Change all callers.
	(_int_realloc): Likewise.
	All _int_* functions are now static.
	* malloc/hooks.c: Change all callers to _int_free and _int_realloc.
	* malloc/arena.c: Likewise.
	* include/malloc.h: Remove now unnecessary declarations of the _int_*
	functions.
2009-02-07 22:01:49 +00:00
Ulrich Drepper bfacf1af1a * malloc/malloc.c: Add branch prediction for use of the hooks. 2009-02-07 19:05:28 +00:00
Ulrich Drepper 1fdd89a78d * malloc/malloc.c (sYSMALLOc): Don't use assert when detecting
manipulated brk, use malloc_printerr.
	* misc/sbrk.c (__sbrk): Better error handling for nonsense
	requests.
2009-01-30 17:47:23 +00:00
Ulrich Drepper 486bdb8863 * malloc/malloc.c (public_rEALLOc): When new arena is used, copy
really all bytes.  Patch by Denys Vlasenko <dvlasenk@redhat.com>.
2008-11-03 08:07:39 +00:00
Ulrich Drepper dba385512d (public_vALLOc): Try other arenas in case _int_valloc fails. (public_pVALLOc): Likewise. 2008-09-12 18:18:25 +00:00
Ulrich Drepper c958a6a4e5 [BZ #5736]
* malloc/malloc.c: Fix typo in comment.
2008-03-04 18:36:27 +00:00