about summary refs log tree commit diff
path: root/elf
diff options
context:
space:
mode:
Diffstat (limited to 'elf')
-rw-r--r--elf/dl-load.c8
-rw-r--r--elf/ldsodefs.h23
-rw-r--r--elf/link.h4
3 files changed, 26 insertions, 9 deletions
diff --git a/elf/dl-load.c b/elf/dl-load.c
index c75a91392e..212b22307a 100644
--- a/elf/dl-load.c
+++ b/elf/dl-load.c
@@ -331,6 +331,10 @@ _dl_init_paths (const char *llp)
      variable.  */
   struct link_map *l;
 
+  /* Names of important hardware capabilities.  */
+  char **hwcap_names;
+  size_t nhwcap_names;
+
   /* Number of elements in the library path.  */
   size_t nllp;
 
@@ -347,6 +351,10 @@ _dl_init_paths (const char *llp)
   else
     nllp = 0;
 
+  /* Get the capabilities.  */
+  hwcap_names = _dl_important_hwcaps (&nhwcap_names,
+				      _dl_platform, _dl_platformlen);
+
   l = _dl_loaded;
   if (l != NULL)
     {
diff --git a/elf/ldsodefs.h b/elf/ldsodefs.h
index 3154bf2a2b..578e085d75 100644
--- a/elf/ldsodefs.h
+++ b/elf/ldsodefs.h
@@ -53,20 +53,22 @@ enum r_dir_status { unknown, nonexisting, existing };
 
 struct r_search_path_elem
   {
-    const char *dirname;
-
-    size_t dirnamelen;
-    enum r_dir_status dirstatus;
-
-    size_t machdirnamelen;
-    enum r_dir_status machdirstatus;
+    /* This link is only used in the `all_dirs' member of `r_search_path'.  */
+    struct r_search_path_elem *next;
 
     /* Strings saying where the definition came from.  */
     const char *what;
     const char *where;
 
-    /* This link is only used in the `all_dirs' member of `r_search_path'.  */
-    struct r_search_path_elem *next;
+    const char *dirname;
+
+    enum r_dir_status exists[0];
+  };
+
+struct r_strlenpair
+  {
+    const char *str;
+    size_t len;
   };
 
 
@@ -383,6 +385,9 @@ extern void _dl_show_auxv (void);
    other.  */
 extern char *_dl_next_ld_env_entry (char ***position);
 
+/* Return an array with the names of the important hardware capabilities.  */
+extern char **_dl_important_hwcap (size_t *sz);
+
 __END_DECLS
 
 #endif /* ldsodefs.h */
diff --git a/elf/link.h b/elf/link.h
index 30efa0ed25..edf1303595 100644
--- a/elf/link.h
+++ b/elf/link.h
@@ -156,6 +156,10 @@ struct link_map
     /* Collected information about own RPATH directories.  */
     struct r_search_path_elem **l_rpath_dirs;
 
+    /* Directory names composed from capability names.  */
+    struct r_strlenpair *l_capstrs;
+    size_t l_ncapstrs;
+
     /* Collected results of relocation while profiling.  */
     ElfW(Addr) *l_reloc_result;