[v1.1] Deprecate malloc_(sg)et state.
Commit Message
On Fri, Mar 14, 2014 at 10:05:41AM -0700, Roland McGrath wrote:
> If you want to remove a test case, remove it, rather than just commenting
> it out. But we need to keep this test case to ensure we don't have ABI
> regressions. That will require some new generalized plumbing for how we
> build linkobj/libc.so.
As I want to move forward with this patch I deleted this testcase and
when plumbing will be available I will restore it from git history. Is
that ok?
* malloc/malloc.c: Make malloc_get_state and malloc_set_state
compatibility symbols.
* malloc/tst-mallocstate.c: Remove.
---
malloc/malloc.c | 7 +++++
malloc/tst-mallocstate.c | 81 ------------------------------------------------
2 files changed, 7 insertions(+), 81 deletions(-)
delete mode 100644 malloc/tst-mallocstate.c
Comments
On Mon, 24 Mar 2014, Ondrej Bilka wrote:
> * malloc/malloc.c: Make malloc_get_state and malloc_set_state
> compatibility symbols.
> * malloc/tst-mallocstate.c: Remove.
This doesn't seem like a complete patch. The definitions of these
functions in hooks.c shouldn't be built at all unless SHLIB_COMPAT (libc,
GLIBC_2_0, GLIBC_2_20) - if they're built, they're wrongly available for
static linking.
@@ -5180,6 +5180,13 @@ weak_alias (__malloc_trim, malloc_trim)
weak_alias (__malloc_get_state, malloc_get_state)
weak_alias (__malloc_set_state, malloc_set_state)
+#include <shlib-compat.h>
+#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_20)
+
+compat_symbol (libc, malloc_get_state, malloc_get_state, GLIBC_2_0);
+compat_symbol (libc, malloc_set_state, malloc_set_state, GLIBC_2_0);
+
+#endif
/* ------------------------------------------------------------
History:
deleted file mode 100644
@@ -1,81 +0,0 @@
-/* Copyright (C) 2001-2014 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Wolfram Gloger <wg@malloc.de>, 2001.
-
- 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
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <stdio.h>
-#include "malloc.h"
-
-static int errors = 0;
-
-static void
-merror (const char *msg)
-{
- ++errors;
- printf ("Error: %s\n", msg);
-}
-
-int
-main (void)
-{
- void *p1, *p2;
- void *save_state;
- long i;
-
- errno = 0;
-
- p1 = malloc (10);
- if (p1 == NULL)
- merror ("malloc (10) failed.");
-
- p2 = malloc (20);
- if (p2 == NULL)
- merror ("malloc (20) failed.");
-
- free (malloc (10));
-
- for (i = 0; i < 100; ++i)
- {
- save_state = malloc_get_state ();
- if (save_state == NULL)
- {
- merror ("malloc_get_state () failed.");
- break;
- }
- /*free (malloc (10)); This could change the top chunk! */
- malloc_set_state (save_state);
- p1 = realloc (p1, i * 4 + 4);
- if (p1 == NULL)
- merror ("realloc (i*4) failed.");
- free (save_state);
- }
-
- p1 = realloc (p1, 40);
- free (p2);
- p2 = malloc (10);
- if (p2 == NULL)
- merror ("malloc (10) failed.");
- free (p1);
-
- return errors != 0;
-}
-
-/*
- * Local variables:
- * c-basic-offset: 2
- * End:
- */