glibc/malloc/mcheck.c
Siddhesh Poyarekar c142eb253f mcheck: Wean away from malloc hooks [BZ #23489]
Split the mcheck implementation into the debugging hooks and API so
that the API can be replicated in libc and libc_malloc_debug.so.  The
libc APIs always result in failure.

The mcheck implementation has also been moved entirely into
libc_malloc_debug.so and with it, all of the hook initialization code
can now be moved into the debug library.  Now the initialization can
be done independently of libc internals.

With this patch, libc_malloc_debug.so can no longer be used with older
libcs, which is not its goal anyway.  tst-vfork3 breaks due to this
since it spawns shell scripts, which in turn execute using the system
glibc.  Move the test to tests-container so that only the built glibc
is used.

This move also fixes bugs in the mcheck version of memalign and
realloc, thus allowing removal of the tests from tests-mcheck
exclusion list.

Reviewed-by: Carlos O'Donell <carlos@redhat.com>
Tested-by: Carlos O'Donell <carlos@redhat.com>
2021-07-22 18:38:02 +05:30

63 lines
1.4 KiB
C

/* The mcheck() interface.
Copyright (C) 1990-2021 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Written May 1989 by Mike Haertel.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<https://www.gnu.org/licenses/>. */
#if !IS_IN (libc)
# include "mcheck-impl.c"
#else
# include <mcheck.h>
#endif
void
mcheck_check_all (void)
{
#if !IS_IN (libc)
__mcheck_checkptr (NULL);
#endif
}
int
mcheck (void (*func) (enum mcheck_status))
{
#if IS_IN (libc)
return -1;
#else
return __mcheck_initialize (func, false);
#endif
}
int
mcheck_pedantic (void (*func) (enum mcheck_status))
{
#if IS_IN (libc)
return -1;
#else
return __mcheck_initialize (func, true);
#endif
}
enum mcheck_status
mprobe (void *ptr)
{
#if IS_IN (libc)
return MCHECK_DISABLED;
#else
return __mcheck_checkptr (ptr);
#endif
}