about summary refs log tree commit diff
path: root/sysdeps
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps')
-rw-r--r--sysdeps/generic/set-freeres-fp.h19
-rw-r--r--sysdeps/generic/set-freeres-os.h19
-rw-r--r--sysdeps/generic/set-freeres-system.h27
-rw-r--r--sysdeps/ieee754/ldbl-128ibm-compat/ieee128-qefgcvt.c1
-rw-r--r--sysdeps/ieee754/ldbl-128ibm-compat/set-freeres-fp.h22
-rw-r--r--sysdeps/mach/hurd/bits/errno.h1
-rw-r--r--sysdeps/posix/getaddrinfo.c5
-rw-r--r--sysdeps/posix/ttyname.c4
-rw-r--r--sysdeps/unix/sysv/linux/check_pf.c3
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/getutent.c1
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/getutid.c1
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/getutline.c1
-rw-r--r--sysdeps/unix/sysv/linux/set-freeres-os.h24
-rw-r--r--sysdeps/unix/sysv/linux/ttyname.c8
14 files changed, 125 insertions, 11 deletions
diff --git a/sysdeps/generic/set-freeres-fp.h b/sysdeps/generic/set-freeres-fp.h
new file mode 100644
index 0000000000..f73ac747ad
--- /dev/null
+++ b/sysdeps/generic/set-freeres-fp.h
@@ -0,0 +1,19 @@
+/* System specific resource deallocation.  Generic version.
+   Copyright (C) 2022 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   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/>.  */
+
+#define call_freeres_fp_funcs
diff --git a/sysdeps/generic/set-freeres-os.h b/sysdeps/generic/set-freeres-os.h
new file mode 100644
index 0000000000..6b17c8307a
--- /dev/null
+++ b/sysdeps/generic/set-freeres-os.h
@@ -0,0 +1,19 @@
+/* System specific resource deallocation.  Generic version.
+   Copyright (C) 2020-2022 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   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/>.  */
+
+#define call_freeres_os_funcs
diff --git a/sysdeps/generic/set-freeres-system.h b/sysdeps/generic/set-freeres-system.h
new file mode 100644
index 0000000000..88701a657f
--- /dev/null
+++ b/sysdeps/generic/set-freeres-system.h
@@ -0,0 +1,27 @@
+/* System specific resource deallocation.  Generic version.
+   Copyright (C) 2022 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   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/>.  */
+
+/* Each system may define weak functions to free any resource allocated with
+   malloc to avoid interfere with mtrace.  */
+
+#include <set-freeres-os.h>
+#include <set-freeres-fp.h>
+
+#define call_freeres_system_funcs	\
+  call_freeres_os_funcs;		\
+  call_freeres_fp_funcs
diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-qefgcvt.c b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-qefgcvt.c
index e56e01ab2d..18a881d4d0 100644
--- a/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-qefgcvt.c
+++ b/sysdeps/ieee754/ldbl-128ibm-compat/ieee128-qefgcvt.c
@@ -42,6 +42,7 @@ typeof (qfcvt_r) ___qfcvtieee128_r;
 #define __GCVT ___qgcvtieee128
 #define __ECVT_R ___qecvtieee128_r
 #define __FCVT_R ___qfcvtieee128_r
+#define __EFGCVT_FREEMEM_PTR __libc_efgcvtieee128_freemem_ptr
 #include <efgcvt-ldbl-macros.h>
 #include <efgcvt-template.c>
 
diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/set-freeres-fp.h b/sysdeps/ieee754/ldbl-128ibm-compat/set-freeres-fp.h
new file mode 100644
index 0000000000..3f6e17612a
--- /dev/null
+++ b/sysdeps/ieee754/ldbl-128ibm-compat/set-freeres-fp.h
@@ -0,0 +1,22 @@
+/* System specific resource deallocation.  IBM long double 128 version.
+   Copyright (C) 2022 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   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/>.  */
+
+extern char * __libc_efgcvtieee128_freemem_ptr attribute_hidden;
+
+#define call_freeres_fp_funcs \
+  call_free_static_weak (__libc_efgcvtieee128_freemem_ptr)
diff --git a/sysdeps/mach/hurd/bits/errno.h b/sysdeps/mach/hurd/bits/errno.h
index 90c8897739..0d935e724a 100644
--- a/sysdeps/mach/hurd/bits/errno.h
+++ b/sysdeps/mach/hurd/bits/errno.h
@@ -9,7 +9,6 @@
      mach/boolean.h
      mach/i386/boolean.h
      mach/i386/vm_types.h
-     mach/i386/stdint.h
      mach/mig_errors.h
      device/device_types.h
      mach/std_types.h
diff --git a/sysdeps/posix/getaddrinfo.c b/sysdeps/posix/getaddrinfo.c
index fd22dc4fcb..0356b622be 100644
--- a/sysdeps/posix/getaddrinfo.c
+++ b/sysdeps/posix/getaddrinfo.c
@@ -1761,7 +1761,8 @@ check_gaiconf_mtime (const struct __stat64_t64 *st)
 #endif
 
 
-libc_freeres_fn(fini)
+void
+__libc_getaddrinfo_freemem (void)
 {
   if (labels != default_labels)
     {
@@ -2233,7 +2234,7 @@ no_file:
 
   /* If we previously read the file but it is gone now, free the old data and
      use the builtin one.  Leave the reload flag alone.  */
-  fini ();
+  __libc_getaddrinfo_freemem ();
 }
 
 
diff --git a/sysdeps/posix/ttyname.c b/sysdeps/posix/ttyname.c
index 2e19aff758..a5805cd662 100644
--- a/sysdeps/posix/ttyname.c
+++ b/sysdeps/posix/ttyname.c
@@ -24,6 +24,7 @@
 #include <unistd.h>
 #include <string.h>
 #include <stdlib.h>
+#include <set-freeres.h>
 
 char *__ttyname;
 
@@ -31,7 +32,8 @@ static char *getttyname (int fd, dev_t mydev, ino_t myino,
 			 int save, int *dostat);
 
 
-libc_freeres_ptr (static char *getttyname_name);
+static char *getttyname_name;
+weak_alias (getttyname_name, __ttyname_freemem_ptr)
 
 static char *
 getttyname (int fd, dev_t mydev, ino_t myino, int save, int *dostat)
diff --git a/sysdeps/unix/sysv/linux/check_pf.c b/sysdeps/unix/sysv/linux/check_pf.c
index de207122b0..b157c5126c 100644
--- a/sysdeps/unix/sysv/linux/check_pf.c
+++ b/sysdeps/unix/sysv/linux/check_pf.c
@@ -362,7 +362,8 @@ __check_pf (bool *seen_ipv4, bool *seen_ipv6,
 }
 
 /* Free the cache if it has been allocated.  */
-libc_freeres_fn (freecache)
+void
+__check_pf_freemem (void)
 {
   if (cache)
     __free_in6ai (cache->in6ai);
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/getutent.c b/sysdeps/unix/sysv/linux/s390/s390-32/getutent.c
index d8188f8b5b..562495b122 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/getutent.c
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/getutent.c
@@ -25,6 +25,7 @@
 # define weak_alias(n,a)
 #endif
 #include "login/getutent.c"
+_weak_alias (buffer, __libc_getutent_freemem_ptr)
 
 #if defined SHARED
 default_symbol_version (__getutent, getutent, UTMP_COMPAT_BASE);
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/getutid.c b/sysdeps/unix/sysv/linux/s390/s390-32/getutid.c
index cd981c72ba..ccdc25b2d6 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/getutid.c
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/getutid.c
@@ -25,6 +25,7 @@
 # define weak_alias(n,a)
 #endif
 #include "login/getutid.c"
+_weak_alias (buffer, __libc_getutid_freemem_ptr)
 
 #if defined SHARED
 default_symbol_version (__getutid, getutid, UTMP_COMPAT_BASE);
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/getutline.c b/sysdeps/unix/sysv/linux/s390/s390-32/getutline.c
index 0b611619f1..16e8f17915 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/getutline.c
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/getutline.c
@@ -25,6 +25,7 @@
 # define weak_alias(n,a)
 #endif
 #include "login/getutline.c"
+_weak_alias (buffer, __libc_getutline_freemem_ptr)
 
 #if defined SHARED
 default_symbol_version (__getutline, getutline, UTMP_COMPAT_BASE);
diff --git a/sysdeps/unix/sysv/linux/set-freeres-os.h b/sysdeps/unix/sysv/linux/set-freeres-os.h
new file mode 100644
index 0000000000..964c9a4bfc
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/set-freeres-os.h
@@ -0,0 +1,24 @@
+/* System specific resource deallocation.  Linux version.
+   Copyright (C) 2022 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   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/>.  */
+
+extern void __check_pf_freemem (void) attribute_hidden;
+extern char * __ttyname_freemem_ptr attribute_hidden;
+
+#define call_freeres_os_funcs			  \
+  call_function_static_weak (__check_pf_freemem); \
+  call_free_static_weak (__ttyname_freemem_ptr)
diff --git a/sysdeps/unix/sysv/linux/ttyname.c b/sysdeps/unix/sysv/linux/ttyname.c
index f3870f8ec3..406fbb30f2 100644
--- a/sysdeps/unix/sysv/linux/ttyname.c
+++ b/sysdeps/unix/sysv/linux/ttyname.c
@@ -19,15 +19,11 @@
 #include <limits.h>
 #include <termios.h>
 #include <stdlib.h>
-
+#include <set-freeres.h>
 #include "ttyname.h"
 
 static char *ttyname_buf = NULL;
-
-libc_freeres_fn (free_mem)
-{
-  free (ttyname_buf);
-}
+weak_alias (ttyname_buf, __ttyname_freemem_ptr)
 
 /* Return the pathname of the terminal FD is open on, or NULL on errors.
    The returned storage is good only until the next call to this function.  */