Assembler code passes the address of _dl_fini to __libc_start_main,
whose function pointer argument lacks the attribute. This means
that calls could use the wrong ABI. Fortunately, for zero-parameter
void-returning functions, internal_function does not change ABI
on i386 (the only architecture which uses internal_function), so
this inconsistency was harmless (which is why it had not been
noticed so far).
+2017-08-14 Florian Weimer <fweimer@redhat.com>
+
+ * elf/dl-fini.c (_dl_fini): Remove internal_function
+ * sysdeps/generic/ldsodefs.h (_dl_fini): Likewise.
+
2017-08-14 H.J. Lu <hongjiu.lu@intel.com>
* sysdeps/x86/cpu-features.h (bit_cpu_BIT): New.
void
-internal_function
_dl_fini (void)
{
/* Lots of fun ahead. We have to call the destructors for all still
/* Call the finalizer functions of all shared objects whose
initializer functions have completed. */
-extern void _dl_fini (void) internal_function;
+extern void _dl_fini (void);
/* Sort array MAPS according to dependencies of the contained objects. */
extern void _dl_sort_fini (struct link_map **maps, size_t nmaps, char *used,