diff options
author | Florian Weimer <fweimer@redhat.com> | 2017-08-14 11:44:24 +0200 |
---|---|---|
committer | Florian Weimer <fweimer@redhat.com> | 2017-08-14 15:08:48 +0200 |
commit | 9fa7449b35244645acaa450046b37678f46fe0f1 (patch) | |
tree | 83a87696a1e4ae4fad80f9167bb25e02c91dfe53 | |
parent | 73322d5ff6ad71c65f875095c4801771cff9ab2d (diff) | |
download | glibc-9fa7449b35244645acaa450046b37678f46fe0f1.tar.gz |
_dl_fini: Remove internal_function attribute
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).
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | elf/dl-fini.c | 1 | ||||
-rw-r--r-- | sysdeps/generic/ldsodefs.h | 2 |
3 files changed, 6 insertions, 2 deletions
@@ -1,3 +1,8 @@ +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. 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, |