diff options
author | Steve Ellcey <sellcey@caviumnetworks.com> | 2017-03-15 16:46:26 -0700 |
---|---|---|
committer | Steve Ellcey <sellcey@caviumnetworks.com> | 2017-03-15 16:46:26 -0700 |
commit | d2e4346a30683cc42c57bd1bfd457897d78c6d7e (patch) | |
tree | 3f6933eeba1b30fe0da795ca6cd7db50f792b55d /sysdeps/aarch64 | |
parent | fbe355fbd1973d6e29561084b3eaeb4bfe9d515a (diff) | |
download | glibc-d2e4346a30683cc42c57bd1bfd457897d78c6d7e.tar glibc-d2e4346a30683cc42c57bd1bfd457897d78c6d7e.tar.gz glibc-d2e4346a30683cc42c57bd1bfd457897d78c6d7e.tar.bz2 glibc-d2e4346a30683cc42c57bd1bfd457897d78c6d7e.zip |
Add ifunc support for aarch64.
* sysdeps/aarch64/dl-machine.h: Include cpu-features.c.
(DL_PLATFORM_INIT): New define.
(dl_platform_init): New function.
* sysdeps/aarch64/ldsodefs.h: Include cpu-features.h.
* sysdeps/unix/sysv/linux/aarch64/cpu-features.c: New file.
* sysdeps/unix/sysv/linux/aarch64/cpu-features.h: Likewise.
* sysdeps/unix/sysv/linux/aarch64/dl-procinfo.c: Likewise.
* sysdeps/unix/sysv/linux/aarch64/libc-start.c: Likewise.
Diffstat (limited to 'sysdeps/aarch64')
-rw-r--r-- | sysdeps/aarch64/dl-machine.h | 18 | ||||
-rw-r--r-- | sysdeps/aarch64/ldsodefs.h | 1 |
2 files changed, 19 insertions, 0 deletions
diff --git a/sysdeps/aarch64/dl-machine.h b/sysdeps/aarch64/dl-machine.h index 84b8aecfb8..15d79a6961 100644 --- a/sysdeps/aarch64/dl-machine.h +++ b/sysdeps/aarch64/dl-machine.h @@ -25,6 +25,7 @@ #include <tls.h> #include <dl-tlsdesc.h> #include <dl-irel.h> +#include <cpu-features.c> /* Return nonzero iff ELF header is compatible with the running host. */ static inline int __attribute__ ((unused)) @@ -225,6 +226,23 @@ _dl_start_user: \n\ #define ELF_MACHINE_NO_REL 1 #define ELF_MACHINE_NO_RELA 0 +#define DL_PLATFORM_INIT dl_platform_init () + +static inline void __attribute__ ((unused)) +dl_platform_init (void) +{ + if (GLRO(dl_platform) != NULL && *GLRO(dl_platform) == '\0') + /* Avoid an empty string which would disturb us. */ + GLRO(dl_platform) = NULL; + +#ifdef SHARED + /* init_cpu_features has been called early from __libc_start_main in + static executable. */ + init_cpu_features (&GLRO(dl_aarch64_cpu_features)); +#endif +} + + static inline ElfW(Addr) elf_machine_fixup_plt (struct link_map *map, lookup_t t, const ElfW(Rela) *reloc, diff --git a/sysdeps/aarch64/ldsodefs.h b/sysdeps/aarch64/ldsodefs.h index f277074194..ba4ada3a04 100644 --- a/sysdeps/aarch64/ldsodefs.h +++ b/sysdeps/aarch64/ldsodefs.h @@ -20,6 +20,7 @@ #define _AARCH64_LDSODEFS_H 1 #include <elf.h> +#include <cpu-features.h> struct La_aarch64_regs; struct La_aarch64_retval; |