diff mbox

_dl_fini: Remove internal_function attribute

Message ID 20170814102910.29E294016719B@oldenburg.str.redhat.com
State New
Headers show

Commit Message

Florian Weimer Aug. 14, 2017, 10:29 a.m. UTC
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.

Comments

H.J. Lu Aug. 14, 2017, 12:27 p.m. UTC | #1
On Mon, Aug 14, 2017 at 3:29 AM, Florian Weimer <fweimer@redhat.com> wrote:
> 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.
>
>

LGTM.

Thanks.
diff mbox

Patch

diff --git a/elf/dl-fini.c b/elf/dl-fini.c
index 93b337bea1..d6201b2c81 100644
--- a/elf/dl-fini.c
+++ b/elf/dl-fini.c
@@ -125,7 +125,6 @@  _dl_sort_fini (struct link_map **maps, size_t nmaps, char *used, Lmid_t ns)
 
 
 void
-internal_function
 _dl_fini (void)
 {
   /* Lots of fun ahead.  We have to call the destructors for all still
diff --git a/sysdeps/generic/ldsodefs.h b/sysdeps/generic/ldsodefs.h
index 3c92a296cd..4540096688 100644
--- a/sysdeps/generic/ldsodefs.h
+++ b/sysdeps/generic/ldsodefs.h
@@ -968,7 +968,7 @@  extern void _dl_init (struct link_map *main_map, int argc, char **argv,
 
 /* 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,