Skip to content

Commit c877418

Browse files
author
Roland McGrath
committed
* include/libc-symbols.h (__libc_freeres_fn_section, libc_freeres_fn):
New macros. * elf/dl-close.c (free_mem): Use libc_freeres_fn macro, remove text_set_element. * elf/dl-libc.c (free_mem): Likewise. * iconv/gconv_conf.c (free_mem): Likewise. * iconv/gconv_db.c (free_mem): Likewise. * iconv/gconv_dl.c (free_mem): Likewise. * iconv/gconv_cache.c (free_mem): Likewise. * intl/finddomain.c (free_mem): Likewise. * intl/dcigettext.c (free_mem): Likewise. * locale/setlocale.c (free_mem): Likewise. * misc/fstab.c (fstab_free): Likewise. * nss/nsswitch.c (free_mem): Likewise. * posix/regcomp.c (free_mem): Likewise. * resolv/gai_misc.c (free_res): Likewise. * stdlib/fmtmsg.c (free_mem): Likewise. * sunrpc/clnt_perr.c (free_mem): Likewise. * sysdeps/generic/setenv.c (free_mem): Likewise. * sysdeps/unix/sysv/linux/shm_open.c (freeit): Likewise. * sysdeps/pthread/aio_misc.c (free_res): Likewise. * time/tzset.c (free_mem): Likewise. * malloc/mtrace.c (release_libc_mem): Add __libc_freeres_fn_section. * locale/loadarchive.c (_nl_archive_subfreeres): Likewise. * malloc/set-freeres.c (__libc_freeres): Likewise. * login/getutent.c: Include stdlib.h instead of stddef.h. (buffer): Change into pointer to utmp, add libc_freeres_ptr. (__getutent): Allocate buffer the first time it is run. * login/getutid.c: Include stdlib.h instead of stddef.h. (buffer): Change into pointer to utmp, add libc_freeres_ptr. (__getutid): Allocate buffer the first time it is run. * login/getutline.c: Include stdlib.h instead of stddef.h. (buffer): Change into pointer to utmp, add libc_freeres_ptr. (__getutline): Allocate buffer the first time it is run. * malloc/mtrace.c (malloc_trace_buffer): Change into char *. (mtrace): Allocate malloc_trace_buffer. * resolv/nsap_addr.c (inet_nsap_ntoa): Decrease size of tmpbuf. * resolv/ns_print.c (ns_sprintrrf): Decrease size of t. * string/strerror.c: Include libintl.h and errno.h. (buf): New variable. (strerror): Only allocate buffer if actually needed (unknown error). * time/tzfile.c (transitions): Add libc_freeres_ptr. (freeres): Remove. 2002-10-25 Jakub Jelinek <jakub@redhat.com> * include/libc-symbols.h (libc_freeres_ptr): New macro. * malloc/set-freeres.c (__libc_freeres_ptrs): Define using symbol_set_define. (__libc_freeres): Free all pointers in that section. * Makerules (build-shlib): Add $(LDSEDCMD-$(@f:lib%.so=%).so) to sed commands when creating .lds script. (LDSEDCMD-c.so): New variable. * inet/rcmd.c (ahostbuf): Change into char *. Add libc_freeres_ptr. (rcmd_af): Use strdup to allocate ahostbuf. * inet/rexec.c (ahostbuf): Change into char *. Add libc_freeres_ptr. (rexec_af): Use strdup to allocate ahostbuf. * stdio-common/reg-printf.c (printf_funcs): Remove. (__printf_arginfo_table): Change into printf_arginfo_function **. Add libc_freeres_ptr. (__register_printf_function): Allocate __printf_arginfo_table and __printf_function_table the first time it is called. * stdio-common/printf-parse.h (__printf_arginfo_table): Change into printf_arginfo_function **. (parse_one_spec): Add __builtin_expect. * grp/fgetgrent.c (buffer): Add libc_freeres_ptr. (free_mem): Remove. * inet/getnetgrent.c (buffer): Add libc_freeres_ptr. (free_mem): Remove. * intl/localealias.c (libc_freeres_ptr): Define if !_LIBC. (string_space, map): Add libc_freeres_ptr. (free_mem): Remove. * misc/efgcvt.c (FCVT_BUFPTR): Add libc_freeres_ptr. (free_mem): Remove. * misc/mntent.c (getmntent_buffer): Add libc_freeres_ptr. (free_mem): Remove. * crypt/md5-crypt.c (libc_freeres_ptr): Define if !_LIBC. (buffer): Add libc_freeres_ptr. (free_mem): Remove for _LIBC. * nss/getXXbyYY.c (buffer): Add libc_freeres_ptr. (free_mem): Remove. * nss/getXXent.c (buffer): Add libc_freeres_ptr. (free_mem): Remove. * pwd/fgetpwent.c (buffer): Add libc_freeres_ptr. (free_mem): Remove. * resolv/res_hconf.c (ifaddrs): Add libc_freeres_ptr. (free_mem): Remove. * shadow/fgetspent.c (buffer): Add libc_freeres_ptr. (free_mem): Remove. * sysdeps/posix/ttyname.c (getttyname_name): Add libc_freeres_ptr. (free_mem): Remove. * sysdeps/unix/sysv/linux/getsysstats.c (mount_proc): Add libc_freeres_ptr. (free_mem): Remove. * sysdeps/unix/sysv/linux/ttyname.c (getttyname_name, ttyname_buf): Add libc_freeres_ptr. (free_mem): Remove. 2002-10-30 Jakub Jelinek <jakub@redhat.com> * malloc/obstack.c [_LIBC] (obstack_free): Change into strong_alias instead of duplicating the whole function in libc.
1 parent aa9937f commit c877418

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

51 files changed

+337
-298
lines changed

ChangeLog

+106
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,109 @@
1+
2002-10-30 Jakub Jelinek <jakub@redhat.com>
2+
3+
* include/libc-symbols.h (__libc_freeres_fn_section, libc_freeres_fn):
4+
New macros.
5+
* elf/dl-close.c (free_mem): Use libc_freeres_fn macro, remove
6+
text_set_element.
7+
* elf/dl-libc.c (free_mem): Likewise.
8+
* iconv/gconv_conf.c (free_mem): Likewise.
9+
* iconv/gconv_db.c (free_mem): Likewise.
10+
* iconv/gconv_dl.c (free_mem): Likewise.
11+
* iconv/gconv_cache.c (free_mem): Likewise.
12+
* intl/finddomain.c (free_mem): Likewise.
13+
* intl/dcigettext.c (free_mem): Likewise.
14+
* locale/setlocale.c (free_mem): Likewise.
15+
* misc/fstab.c (fstab_free): Likewise.
16+
* nss/nsswitch.c (free_mem): Likewise.
17+
* posix/regcomp.c (free_mem): Likewise.
18+
* resolv/gai_misc.c (free_res): Likewise.
19+
* stdlib/fmtmsg.c (free_mem): Likewise.
20+
* sunrpc/clnt_perr.c (free_mem): Likewise.
21+
* sysdeps/generic/setenv.c (free_mem): Likewise.
22+
* sysdeps/unix/sysv/linux/shm_open.c (freeit): Likewise.
23+
* sysdeps/pthread/aio_misc.c (free_res): Likewise.
24+
* time/tzset.c (free_mem): Likewise.
25+
* malloc/mtrace.c (release_libc_mem): Add __libc_freeres_fn_section.
26+
* locale/loadarchive.c (_nl_archive_subfreeres): Likewise.
27+
* malloc/set-freeres.c (__libc_freeres): Likewise.
28+
29+
* login/getutent.c: Include stdlib.h instead of stddef.h.
30+
(buffer): Change into pointer to utmp, add libc_freeres_ptr.
31+
(__getutent): Allocate buffer the first time it is run.
32+
* login/getutid.c: Include stdlib.h instead of stddef.h.
33+
(buffer): Change into pointer to utmp, add libc_freeres_ptr.
34+
(__getutid): Allocate buffer the first time it is run.
35+
* login/getutline.c: Include stdlib.h instead of stddef.h.
36+
(buffer): Change into pointer to utmp, add libc_freeres_ptr.
37+
(__getutline): Allocate buffer the first time it is run.
38+
* malloc/mtrace.c (malloc_trace_buffer): Change into char *.
39+
(mtrace): Allocate malloc_trace_buffer.
40+
* resolv/nsap_addr.c (inet_nsap_ntoa): Decrease size of tmpbuf.
41+
* resolv/ns_print.c (ns_sprintrrf): Decrease size of t.
42+
* string/strerror.c: Include libintl.h and errno.h.
43+
(buf): New variable.
44+
(strerror): Only allocate buffer if actually needed (unknown error).
45+
* time/tzfile.c (transitions): Add libc_freeres_ptr.
46+
(freeres): Remove.
47+
48+
2002-10-25 Jakub Jelinek <jakub@redhat.com>
49+
50+
* include/libc-symbols.h (libc_freeres_ptr): New macro.
51+
* malloc/set-freeres.c (__libc_freeres_ptrs): Define using
52+
symbol_set_define.
53+
(__libc_freeres): Free all pointers in that section.
54+
* Makerules (build-shlib): Add $(LDSEDCMD-$(@F:lib%.so=%).so) to sed
55+
commands when creating .lds script.
56+
(LDSEDCMD-c.so): New variable.
57+
* inet/rcmd.c (ahostbuf): Change into char *. Add libc_freeres_ptr.
58+
(rcmd_af): Use strdup to allocate ahostbuf.
59+
* inet/rexec.c (ahostbuf): Change into char *. Add libc_freeres_ptr.
60+
(rexec_af): Use strdup to allocate ahostbuf.
61+
* stdio-common/reg-printf.c (printf_funcs): Remove.
62+
(__printf_arginfo_table): Change into printf_arginfo_function **.
63+
Add libc_freeres_ptr.
64+
(__register_printf_function): Allocate __printf_arginfo_table
65+
and __printf_function_table the first time it is called.
66+
* stdio-common/printf-parse.h (__printf_arginfo_table): Change into
67+
printf_arginfo_function **.
68+
(parse_one_spec): Add __builtin_expect.
69+
* grp/fgetgrent.c (buffer): Add libc_freeres_ptr.
70+
(free_mem): Remove.
71+
* inet/getnetgrent.c (buffer): Add libc_freeres_ptr.
72+
(free_mem): Remove.
73+
* intl/localealias.c (libc_freeres_ptr): Define if !_LIBC.
74+
(string_space, map): Add libc_freeres_ptr.
75+
(free_mem): Remove.
76+
* misc/efgcvt.c (FCVT_BUFPTR): Add libc_freeres_ptr.
77+
(free_mem): Remove.
78+
* misc/mntent.c (getmntent_buffer): Add libc_freeres_ptr.
79+
(free_mem): Remove.
80+
* crypt/md5-crypt.c (libc_freeres_ptr): Define if !_LIBC.
81+
(buffer): Add libc_freeres_ptr.
82+
(free_mem): Remove for _LIBC.
83+
* nss/getXXbyYY.c (buffer): Add libc_freeres_ptr.
84+
(free_mem): Remove.
85+
* nss/getXXent.c (buffer): Add libc_freeres_ptr.
86+
(free_mem): Remove.
87+
* pwd/fgetpwent.c (buffer): Add libc_freeres_ptr.
88+
(free_mem): Remove.
89+
* resolv/res_hconf.c (ifaddrs): Add libc_freeres_ptr.
90+
(free_mem): Remove.
91+
* shadow/fgetspent.c (buffer): Add libc_freeres_ptr.
92+
(free_mem): Remove.
93+
* sysdeps/posix/ttyname.c (getttyname_name): Add libc_freeres_ptr.
94+
(free_mem): Remove.
95+
* sysdeps/unix/sysv/linux/getsysstats.c (mount_proc): Add
96+
libc_freeres_ptr.
97+
(free_mem): Remove.
98+
* sysdeps/unix/sysv/linux/ttyname.c (getttyname_name, ttyname_buf): Add
99+
libc_freeres_ptr.
100+
(free_mem): Remove.
101+
102+
2002-10-30 Jakub Jelinek <jakub@redhat.com>
103+
104+
* malloc/obstack.c [_LIBC] (obstack_free): Change into strong_alias
105+
instead of duplicating the whole function in libc.
106+
1107
2002-10-31 Roland McGrath <roland@redhat.com>
2108

3109
* sysdeps/i386/bits/byteswap.h [__GNUC__ < 2] (__bswap_32):

Makerules

+2-1
Original file line numberDiff line numberDiff line change
@@ -447,7 +447,7 @@ $(build-shlib-helper) \
447447
$(LDLIBS-$(@F:lib%.so=%).so) 2>&1 | \
448448
sed -e '/^=========/,/^=========/!d;/^=========/d' \
449449
-e 's/^.*\.hash[ ]*:.*$$/ .note.ABI-tag : { *(.note.ABI-tag) } &/' \
450-
> $@.lds
450+
$(LDSEDCMD-$(@F:lib%.so=%).so) > $@.lds
451451
rm -f $@.new
452452
$(build-shlib-helper) -o $@ -T $@.lds \
453453
$(csu-objpfx)abi-note.o $(build-shlib-objlist)
@@ -548,6 +548,7 @@ ifeq ($(elf),yes)
548548
$(common-objpfx)libc_pic.os: $(common-objpfx)libc_pic.a
549549
$(LINK.o) -nostdlib -nostartfiles -r -o $@ \
550550
$(LDFLAGS-c_pic.os) -Wl,-d -Wl,--whole-archive $^
551+
LDSEDCMD-c.so = -e 's/^.*\*(\.dynbss).*$$/& __start___libc_freeres_ptrs = .; *(__libc_freeres_ptrs) __stop___libc_freeres_ptrs = .;/'
551552
# Use our own special initializer and finalizer files for libc.so.
552553
$(common-objpfx)libc.so: $(elfobjdir)/soinit.os \
553554
$(common-objpfx)libc_pic.os \

crypt/md5-crypt.c

+7-4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/* One way encryption based on MD5 sum.
2-
Copyright (C) 1996, 1997, 1999, 2000, 2001 Free Software Foundation, Inc.
2+
Copyright (C) 1996,1997,1999,2000,2001,2002 Free Software Foundation, Inc.
33
This file is part of the GNU C Library.
44
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
55
@@ -233,8 +233,10 @@ __md5_crypt_r (key, salt, buffer, buflen)
233233
return buffer;
234234
}
235235

236-
237-
static char *buffer;
236+
#ifndef _LIBC
237+
# define libc_freeres_ptr(decl) decl
238+
#endif
239+
libc_freeres_ptr (static char *buffer);
238240

239241
char *
240242
__md5_crypt (const char *key, const char *salt)
@@ -261,10 +263,11 @@ __md5_crypt (const char *key, const char *salt)
261263
return __md5_crypt_r (key, salt, buffer, buflen);
262264
}
263265

264-
266+
#ifndef _LIBC
265267
static void
266268
__attribute__ ((__destructor__))
267269
free_mem (void)
268270
{
269271
free (buffer);
270272
}
273+
#endif

elf/dl-close.c

+38-7
Original file line numberDiff line numberDiff line change
@@ -247,6 +247,11 @@ _dl_close (void *_map)
247247
_r_debug.r_state = RT_DELETE;
248248
_dl_debug_state ();
249249

250+
#ifdef USE_TLS
251+
size_t tls_free_start, tls_free_end;
252+
tls_free_start = tls_free_end = GL(dl_tls_static_used);
253+
#endif
254+
250255
/* Check each element of the search list to see if all references to
251256
it are gone. */
252257
for (i = 0; list[i] != NULL; ++i)
@@ -286,6 +291,30 @@ _dl_close (void *_map)
286291
imap->l_init_called))
287292
/* All dynamically loaded modules with TLS are unloaded. */
288293
GL(dl_tls_max_dtv_idx) = GL(dl_tls_static_nelem);
294+
295+
if (imap->l_tls_offset != 0)
296+
{
297+
/* Collect a contiguous chunk built from the objects in
298+
this search list, going in either direction. When the
299+
whole chunk is at the end of the used area then we can
300+
reclaim it. */
301+
if (imap->l_tls_offset == tls_free_end)
302+
/* Extend the contiguous chunk being reclaimed. */
303+
tls_free_end += imap->l_tls_blocksize;
304+
else if (imap->l_tls_offset + imap->l_tls_blocksize
305+
== tls_free_start)
306+
/* Extend the chunk backwards. */
307+
tls_free_start = imap->l_tls_offset;
308+
else
309+
{
310+
/* This isn't contiguous with the last chunk freed.
311+
One of them will be leaked. */
312+
if (tls_free_end == GL(dl_tls_static_used))
313+
GL(dl_tls_static_used) = tls_free_start;
314+
tls_free_start = imap->l_tls_offset;
315+
tls_free_end = tls_free_start + imap->l_tls_blocksize;
316+
}
317+
}
289318
}
290319
#endif
291320

@@ -363,11 +392,15 @@ _dl_close (void *_map)
363392
}
364393

365394
#ifdef USE_TLS
366-
/* If we removed any object which uses TLS bumnp the generation
367-
counter. */
395+
/* If we removed any object which uses TLS bump the generation counter. */
368396
if (any_tls)
369-
if (__builtin_expect (++GL(dl_tls_generation) == 0, 0))
370-
__libc_fatal (_("TLS generation counter wrapped! Please send report with the 'glibcbug' script."));
397+
{
398+
if (__builtin_expect (++GL(dl_tls_generation) == 0, 0))
399+
__libc_fatal (_("TLS generation counter wrapped! Please send report with the 'glibcbug' script."));
400+
401+
if (tls_free_end == GL(dl_tls_static_used))
402+
GL(dl_tls_static_used) = tls_free_start;
403+
}
371404
#endif
372405

373406
/* Notify the debugger those objects are finalized and gone. */
@@ -424,8 +457,7 @@ free_slotinfo (struct dtv_slotinfo_list *elemp)
424457
#endif
425458

426459

427-
static void
428-
free_mem (void)
460+
libc_freeres_fn (free_mem)
429461
{
430462
if (__builtin_expect (GL(dl_global_scope_alloc), 0) != 0
431463
&& GL(dl_main_searchlist)->r_nlist == GL(dl_initial_searchlist).r_nlist)
@@ -453,4 +485,3 @@ free_mem (void)
453485
GL(dl_tls_dtv_slotinfo_list)->next = NULL;
454486
#endif
455487
}
456-
text_set_element (__libc_subfreeres, free_mem);

elf/dl-libc.c

+1-3
Original file line numberDiff line numberDiff line change
@@ -123,8 +123,7 @@ __libc_dlclose (void *__map)
123123
}
124124

125125

126-
static void
127-
free_mem (void)
126+
libc_freeres_fn (free_mem)
128127
{
129128
struct link_map *l;
130129
struct r_search_path_elem *d;
@@ -154,4 +153,3 @@ free_mem (void)
154153
}
155154
}
156155
}
157-
text_set_element (__libc_subfreeres, free_mem);

grp/fgetgrent.c

+2-12
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
/* Copyright (C) 1991, 1996, 1997, 1999, 2000 Free Software Foundation, Inc.
1+
/* Copyright (C) 1991,1996,1997,1999,2000,2002 Free Software Foundation, Inc.
22
This file is part of the GNU C Library.
33
44
The GNU C Library is free software; you can redistribute it and/or
@@ -26,7 +26,7 @@
2626
/* We need to protect the dynamic buffer handling. */
2727
__libc_lock_define_initialized (static, lock);
2828

29-
static char *buffer;
29+
libc_freeres_ptr (static char *buffer);
3030

3131
/* Read one entry from the given stream. */
3232
struct group *
@@ -83,13 +83,3 @@ fgetgrent (FILE *stream)
8383

8484
return result;
8585
}
86-
87-
88-
/* Free all resources if necessary. */
89-
static void __attribute__ ((unused))
90-
free_mem (void)
91-
{
92-
free (buffer);
93-
}
94-
95-
text_set_element (__libc_subfreeres, free_mem);

iconv/gconv_cache.c

+1-4
Original file line numberDiff line numberDiff line change
@@ -445,8 +445,7 @@ __gconv_release_cache (struct __gconv_step *steps, size_t nsteps)
445445

446446

447447
/* Free all resources if necessary. */
448-
static void __attribute__ ((unused))
449-
free_mem (void)
448+
libc_freeres_fn (free_mem)
450449
{
451450
if (cache_malloced)
452451
free (gconv_cache);
@@ -455,5 +454,3 @@ free_mem (void)
455454
__munmap (gconv_cache, cache_size);
456455
#endif
457456
}
458-
459-
text_set_element (__libc_subfreeres, free_mem);

iconv/gconv_conf.c

+1-4
Original file line numberDiff line numberDiff line change
@@ -597,11 +597,8 @@ __gconv_read_conf (void)
597597

598598

599599
/* Free all resources if necessary. */
600-
static void __attribute__ ((unused))
601-
free_mem (void)
600+
libc_freeres_fn (free_mem)
602601
{
603602
if (__gconv_path_elem != NULL && __gconv_path_elem != &empty_path_elem)
604603
free ((void *) __gconv_path_elem);
605604
}
606-
607-
text_set_element (__libc_subfreeres, free_mem);

iconv/gconv_db.c

+1-4
Original file line numberDiff line numberDiff line change
@@ -778,8 +778,7 @@ free_modules_db (struct gconv_module *node)
778778

779779

780780
/* Free all resources if necessary. */
781-
static void __attribute__ ((unused))
782-
free_mem (void)
781+
libc_freeres_fn (free_mem)
783782
{
784783
if (__gconv_alias_db != NULL)
785784
__tdestroy (__gconv_alias_db, free);
@@ -790,5 +789,3 @@ free_mem (void)
790789
if (known_derivations != NULL)
791790
__tdestroy (known_derivations, free_derivation);
792791
}
793-
794-
text_set_element (__libc_subfreeres, free_mem);

iconv/gconv_dl.c

+1-3
Original file line numberDiff line numberDiff line change
@@ -203,12 +203,10 @@ do_release_all (void *nodep)
203203
free (obj);
204204
}
205205

206-
static void __attribute__ ((unused))
207-
free_mem (void)
206+
libc_freeres_fn (free_mem)
208207
{
209208
__tdestroy (loaded, do_release_all);
210209
}
211-
text_set_element (__libc_subfreeres, free_mem);
212210

213211

214212
#ifdef DEBUG

include/libc-symbols.h

+19-8
Original file line numberDiff line numberDiff line change
@@ -253,17 +253,20 @@
253253
/* Tacking on "\n\t#" to the section name makes gcc put it's bogus
254254
section attributes on what looks like a comment to the assembler. */
255255
# ifdef HAVE_SECTION_QUOTES
256-
# define link_warning(symbol, msg) \
257-
__make_section_unallocated (".gnu.warning." #symbol) \
258-
static const char __evoke_link_warning_##symbol[] \
259-
__attribute__ ((unused, section (".gnu.warning." #symbol "\"\n\t#\""))) \
260-
= msg;
256+
# define __sec_comment "\"\n\t#\""
261257
# else
262-
# define link_warning(symbol, msg) \
258+
# define __sec_comment "\n\t#"
259+
# endif
260+
# define link_warning(symbol, msg) \
263261
__make_section_unallocated (".gnu.warning." #symbol) \
264262
static const char __evoke_link_warning_##symbol[] \
265-
__attribute__ ((unused, section (".gnu.warning." #symbol "\n\t#"))) = msg;
266-
# endif
263+
__attribute__ ((unused, section (".gnu.warning." #symbol __sec_comment))) \
264+
= msg;
265+
# define libc_freeres_ptr(decl) \
266+
__make_section_unallocated ("__libc_freeres_ptrs, \"aw\", @nobits") \
267+
decl __attribute__ ((section ("__libc_freeres_ptrs" __sec_comment)))
268+
# define __libc_freeres_fn_section \
269+
__attribute__ ((section ("__libc_freeres_fn")))
267270
# else /* Not ELF: a.out */
268271
# ifdef HAVE_XCOFF
269272
/* XCOFF does not support .stabs.
@@ -276,11 +279,19 @@
276279
asm (".stabs \"" msg "\",30,0,0,0\n\t" \
277280
".stabs \"" __SYMBOL_PREFIX #symbol "\",1,0,0,0\n");
278281
# endif /* XCOFF */
282+
# define libc_freeres_ptr(decl) decl
283+
# define __libc_freeres_fn_section
279284
# endif
280285
#else
281286
/* We will never be heard; they will all die horribly. */
282287
# define link_warning(symbol, msg)
288+
# define libc_freeres_ptr(decl) decl
289+
# define __libc_freeres_fn_section
283290
#endif
291+
#define libc_freeres_fn(name) \
292+
static void name (void) __attribute_used__ __libc_freeres_fn_section; \
293+
text_set_element (__libc_subfreeres, name); \
294+
static void name (void)
284295

285296
/* A canned warning for sysdeps/stub functions. */
286297
#define stub_warning(name) \

0 commit comments

Comments
 (0)