1/* Macros for internal resource Freeing Hooks.
2 Copyright (C) 2022-2024 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. */
41extern void __dl_libc_freemem (void) attribute_hidden;
42extern void __hdestroy (void) attribute_hidden;
43extern void __gconv_cache_freemem (void) attribute_hidden;
44extern void __gconv_conf_freemem (void) attribute_hidden;
45extern void __gconv_db_freemem (void) attribute_hidden;
46extern void __gconv_dl_freemem (void) attribute_hidden;
47extern void __intl_freemem (void) attribute_hidden;
48extern void __libio_freemem (void) attribute_hidden;
49extern void __libc_fstab_freemem (void) attribute_hidden;
50extern void __nscd_gr_map_freemem (void) attribute_hidden;
51extern void __nscd_hst_map_freemem (void) attribute_hidden;
52extern void __nscd_pw_map_freemem (void) attribute_hidden;
53extern void __nscd_serv_map_freemem (void) attribute_hidden;
54extern void __nscd_group_map_freemem (void) attribute_hidden;
55extern void __libc_regcomp_freemem (void) attribute_hidden;
56extern void __libc_atfork_freemem (void) attribute_hidden;
57extern void __libc_resolv_conf_freemem (void) attribute_hidden;
58extern void __res_thread_freeres (void) attribute_hidden;
59extern void __libc_printf_freemem (void) attribute_hidden;
60extern void __libc_fmtmsg_freemem (void) attribute_hidden;
61extern void __libc_setenv_freemem (void) attribute_hidden;
62#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_31)
63extern void __rpc_freemem (void) attribute_hidden;
64extern void __rpc_thread_destroy (void) attribute_hidden;
65#endif
66extern void __libc_getaddrinfo_freemem (void) attribute_hidden;
67extern void __libc_tzset_freemem (void) attribute_hidden;
68extern void __libc_localealias_freemem (void) attribute_hidden;
69extern void __libc_getutent_freemem (void) attribute_hidden;
70extern void __libc_getutline_freemem (void) attribute_hidden;
71/* From nss/nss_module.c */
72extern void __nss_module_freeres (void) attribute_hidden;
73/* From nss/nss_action.c */
74extern void __nss_action_freeres (void) attribute_hidden;
75/* From nss/nss_database.c */
76extern void __nss_database_freeres (void) attribute_hidden;
77/* From libio/genops.c */
78extern int _IO_cleanup (void) attribute_hidden;;
79/* From dlfcn/dlerror.c */
80extern void __libc_dlerror_result_free (void) attribute_hidden;
81
82/* From either libc.so or libpthread.so */
83extern void __libpthread_freeres (void) attribute_hidden;
84/* From either libc.so or libanl.so */
85#if PTHREAD_IN_LIBC
86extern void __gai_freemem (void) attribute_hidden;
87/* From either libc.so or librt.so */
88extern void __aio_freemem (void) attribute_hidden;
89#endif
90
91/* From libc.so */
92extern char * __libc_fgetgrent_freemem_ptr attribute_hidden;
93extern char * __libc_fgetsgent_freeres_ptr attribute_hidden;
94extern char * __libc_getnetgrent_freemem_ptr attribute_hidden;
95extern char * __libc_rcmd_freemem_ptr attribute_hidden;
96extern char * __libc_rexec_freemem_ptr attribute_hidden;
97extern void * __libc_mntent_freemem_ptr attribute_hidden;
98extern char * __libc_fgetpwent_freemem_ptr attribute_hidden;
99extern struct netaddr * __libc_resolv_res_hconf_freemem_ptr attribute_hidden;
100extern char * __libc_fgetspent_freemem_ptr attribute_hidden;
101extern __time64_t * __libc_tzfile_freemem_ptr attribute_hidden;
102extern char * __libc_getnameinfo_freemem_ptr attribute_hidden;
103extern struct utmp * __libc_getutent_freemem_ptr attribute_hidden;
104extern struct utmp * __libc_getutid_freemem_ptr attribute_hidden;
105extern struct utmp * __libc_getutline_freemem_ptr attribute_hidden;
106extern printf_arginfo_size_function ** __libc_reg_printf_freemem_ptr
107 attribute_hidden;
108extern printf_va_arg_function ** __libc_reg_type_freemem_ptr
109 attribute_hidden;
110/* From nss/getXXbyYY.c */
111extern char * __libc_getgrgid_freemem_ptr attribute_hidden;
112extern char * __libc_getgrnam_freemem_ptr attribute_hidden;
113extern char * __libc_getpwnam_freemem_ptr attribute_hidden;
114extern char * __libc_getpwuid_freemem_ptr attribute_hidden;
115extern char * __libc_getspnam_freemem_ptr attribute_hidden;
116extern char * __libc_getaliasbyname_freemem_ptr attribute_hidden;
117extern char * __libc_gethostbyaddr_freemem_ptr attribute_hidden;
118extern char * __libc_gethostbyname_freemem_ptr attribute_hidden;
119extern char * __libc_gethostbyname2_freemem_ptr attribute_hidden;
120extern char * __libc_getnetbyaddr_freemem_ptr attribute_hidden;
121extern char * __libc_getnetbyname_freemem_ptr attribute_hidden;
122extern char * __libc_getprotobynumber_freemem_ptr attribute_hidden;
123extern char * __libc_getprotobyname_freemem_ptr attribute_hidden;
124extern char * __libc_getrpcbyname_freemem_ptr attribute_hidden;
125extern char * __libc_getrpcbynumber_freemem_ptr attribute_hidden;
126extern char * __libc_getservbyname_freemem_ptr attribute_hidden;
127extern char * __libc_getservbyport_freemem_ptr attribute_hidden;
128/* From nss/getXXent.c */
129extern char * __libc_getgrent_freemem_ptr attribute_hidden;
130extern char * __libc_getpwent_freemem_ptr attribute_hidden;
131extern char * __libc_getspent_freemem_ptr attribute_hidden;
132extern char * __libc_getaliasent_freemem_ptr attribute_hidden;
133extern char * __libc_gethostent_freemem_ptr attribute_hidden;
134extern char * __libc_getnetent_freemem_ptr attribute_hidden;
135extern char * __libc_getprotoent_freemem_ptr attribute_hidden;
136extern char * __libc_getrpcent_freemem_ptr attribute_hidden;
137extern char * __libc_getservent_freemem_ptr attribute_hidden;
138/* From misc/efgcvt-template.c */
139extern char * __libc_efgcvt_freemem_ptr attribute_hidden;
140extern char * __libc_qefgcvt_freemem_ptr attribute_hidden;
141
142#endif
143

source code of glibc/include/set-freeres.h