| 1 | /* Macros for internal resource Freeing Hooks. |
|---|---|
| 2 | Copyright (C) 2022 Free Software Foundation, Inc. |
| 3 | This file is part of the GNU C Library. |
| 4 | |
| 5 | The GNU C Library is free software; you can redistribute it and/or |
| 6 | modify it under the terms of the GNU Lesser General Public |
| 7 | License as published by the Free Software Foundation; either |
| 8 | version 2.1 of the License, or (at your option) any later version. |
| 9 | |
| 10 | The GNU C Library is distributed in the hope that it will be useful, |
| 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| 13 | Lesser General Public License for more details. |
| 14 | |
| 15 | You should have received a copy of the GNU Lesser General Public |
| 16 | License along with the GNU C Library; if not, see |
| 17 | <https://www.gnu.org/licenses/>. */ |
| 18 | |
| 19 | #ifndef _SET_FREERES_H |
| 20 | #define _SET_FREERES_H 1 |
| 21 | |
| 22 | #include <shlib-compat.h> |
| 23 | #include <printf.h> |
| 24 | #include <time.h> |
| 25 | #include <resolv/resolv-internal.h> |
| 26 | |
| 27 | /* Resource Freeing Hooks: |
| 28 | |
| 29 | Normally a process exits and the OS cleans up any allocated |
| 30 | memory. However, when tooling like mtrace or valgrind is monitoring |
| 31 | the process we need to free all resources that are part of the |
| 32 | process in order to provide the consistency required to track |
| 33 | memory leaks. |
| 34 | |
| 35 | A single public API exists and is __libc_freeres, and this is used |
| 36 | by applications like valgrind to free resources. |
| 37 | |
| 38 | Each free routines must be explicit listed below. */ |
| 39 | |
| 40 | /* From libc.so. */ |
| 41 | extern void __dl_libc_freemem (void) attribute_hidden; |
| 42 | extern void __hdestroy (void) attribute_hidden; |
| 43 | extern void __gconv_cache_freemem (void) attribute_hidden; |
| 44 | extern void __gconv_conf_freemem (void) attribute_hidden; |
| 45 | extern void __gconv_db_freemem (void) attribute_hidden; |
| 46 | extern void __gconv_dl_freemem (void) attribute_hidden; |
| 47 | extern void __intl_freemem (void) attribute_hidden; |
| 48 | extern void __libio_freemem (void) attribute_hidden; |
| 49 | extern void __libc_fstab_freemem (void) attribute_hidden; |
| 50 | extern void __nscd_gr_map_freemem (void) attribute_hidden; |
| 51 | extern void __nscd_hst_map_freemem (void) attribute_hidden; |
| 52 | extern void __nscd_pw_map_freemem (void) attribute_hidden; |
| 53 | extern void __nscd_serv_map_freemem (void) attribute_hidden; |
| 54 | extern void __nscd_group_map_freemem (void) attribute_hidden; |
| 55 | extern void __libc_regcomp_freemem (void) attribute_hidden; |
| 56 | extern void __libc_atfork_freemem (void) attribute_hidden; |
| 57 | extern void __libc_resolv_conf_freemem (void) attribute_hidden; |
| 58 | extern void __res_thread_freeres (void) attribute_hidden; |
| 59 | extern void __libc_printf_freemem (void) attribute_hidden; |
| 60 | extern void __libc_fmtmsg_freemem (void) attribute_hidden; |
| 61 | extern void __libc_setenv_freemem (void) attribute_hidden; |
| 62 | #if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_31) |
| 63 | extern void __rpc_freemem (void) attribute_hidden; |
| 64 | extern void __rpc_thread_destroy (void) attribute_hidden; |
| 65 | #endif |
| 66 | extern void __libc_getaddrinfo_freemem (void) attribute_hidden; |
| 67 | extern void __libc_tzset_freemem (void) attribute_hidden; |
| 68 | extern void __libc_localealias_freemem (void) attribute_hidden; |
| 69 | extern void __libc_getutent_freemem (void) attribute_hidden; |
| 70 | extern void __libc_getutline_freemem (void) attribute_hidden; |
| 71 | /* From nss/nss_module.c */ |
| 72 | extern void __nss_module_freeres (void) attribute_hidden; |
| 73 | /* From nss/nss_action.c */ |
| 74 | extern void __nss_action_freeres (void) attribute_hidden; |
| 75 | /* From nss/nss_database.c */ |
| 76 | extern void __nss_database_freeres (void) attribute_hidden; |
| 77 | /* From libio/genops.c */ |
| 78 | extern int _IO_cleanup (void) attribute_hidden;; |
| 79 | /* From dlfcn/dlerror.c */ |
| 80 | extern void __libc_dlerror_result_free (void) attribute_hidden; |
| 81 | |
| 82 | /* From either libc.so or libpthread.so */ |
| 83 | extern void __libpthread_freeres (void) attribute_hidden; |
| 84 | /* From either libc.so or libanl.so */ |
| 85 | #if PTHREAD_IN_LIBC |
| 86 | extern void __gai_freemem (void) attribute_hidden; |
| 87 | /* From either libc.so or librt.so */ |
| 88 | extern void __aio_freemem (void) attribute_hidden; |
| 89 | #endif |
| 90 | |
| 91 | /* From libc.so */ |
| 92 | extern char * __libc_fgetgrent_freemem_ptr attribute_hidden; |
| 93 | extern char * __libc_fgetsgent_freeres_ptr attribute_hidden; |
| 94 | extern char * __libc_getnetgrent_freemem_ptr attribute_hidden; |
| 95 | extern char * __libc_rcmd_freemem_ptr attribute_hidden; |
| 96 | extern char * __libc_rexec_freemem_ptr attribute_hidden; |
| 97 | extern void * __libc_mntent_freemem_ptr attribute_hidden; |
| 98 | extern char * __libc_fgetpwent_freemem_ptr attribute_hidden; |
| 99 | extern struct netaddr * __libc_resolv_res_hconf_freemem_ptr attribute_hidden; |
| 100 | extern char * __libc_fgetspent_freemem_ptr attribute_hidden; |
| 101 | extern __time64_t * __libc_tzfile_freemem_ptr attribute_hidden; |
| 102 | extern char * __libc_getnameinfo_freemem_ptr attribute_hidden; |
| 103 | extern struct utmp * __libc_getutent_freemem_ptr attribute_hidden; |
| 104 | extern struct utmp * __libc_getutid_freemem_ptr attribute_hidden; |
| 105 | extern struct utmp * __libc_getutline_freemem_ptr attribute_hidden; |
| 106 | extern printf_arginfo_size_function ** __libc_reg_printf_freemem_ptr |
| 107 | attribute_hidden; |
| 108 | extern printf_va_arg_function ** __libc_reg_type_freemem_ptr |
| 109 | attribute_hidden; |
| 110 | /* From nss/getXXbyYY.c */ |
| 111 | extern char * __libc_getgrgid_freemem_ptr attribute_hidden; |
| 112 | extern char * __libc_getgrnam_freemem_ptr attribute_hidden; |
| 113 | extern char * __libc_getpwnam_freemem_ptr attribute_hidden; |
| 114 | extern char * __libc_getpwuid_freemem_ptr attribute_hidden; |
| 115 | extern char * __libc_getspnam_freemem_ptr attribute_hidden; |
| 116 | extern char * __libc_getaliasbyname_freemem_ptr attribute_hidden; |
| 117 | extern char * __libc_gethostbyaddr_freemem_ptr attribute_hidden; |
| 118 | extern char * __libc_gethostbyname_freemem_ptr attribute_hidden; |
| 119 | extern char * __libc_gethostbyname2_freemem_ptr attribute_hidden; |
| 120 | extern char * __libc_getnetbyaddr_freemem_ptr attribute_hidden; |
| 121 | extern char * __libc_getnetbyname_freemem_ptr attribute_hidden; |
| 122 | extern char * __libc_getprotobynumber_freemem_ptr attribute_hidden; |
| 123 | extern char * __libc_getprotobyname_freemem_ptr attribute_hidden; |
| 124 | extern char * __libc_getrpcbyname_freemem_ptr attribute_hidden; |
| 125 | extern char * __libc_getrpcbynumber_freemem_ptr attribute_hidden; |
| 126 | extern char * __libc_getservbyname_freemem_ptr attribute_hidden; |
| 127 | extern char * __libc_getservbyport_freemem_ptr attribute_hidden; |
| 128 | /* From nss/getXXent.c */ |
| 129 | extern char * __libc_getgrent_freemem_ptr attribute_hidden; |
| 130 | extern char * __libc_getpwent_freemem_ptr attribute_hidden; |
| 131 | extern char * __libc_getspent_freemem_ptr attribute_hidden; |
| 132 | extern char * __libc_getaliasent_freemem_ptr attribute_hidden; |
| 133 | extern char * __libc_gethostent_freemem_ptr attribute_hidden; |
| 134 | extern char * __libc_getnetent_freemem_ptr attribute_hidden; |
| 135 | extern char * __libc_getprotoent_freemem_ptr attribute_hidden; |
| 136 | extern char * __libc_getrpcent_freemem_ptr attribute_hidden; |
| 137 | extern char * __libc_getservent_freemem_ptr attribute_hidden; |
| 138 | /* From misc/efgcvt-template.c */ |
| 139 | extern char * __libc_efgcvt_freemem_ptr attribute_hidden; |
| 140 | extern char * __libc_qefgcvt_freemem_ptr attribute_hidden; |
| 141 | |
| 142 | #endif |
| 143 |