summaryrefslogtreecommitdiff
path: root/ldso/include
diff options
context:
space:
mode:
authorJoakim Tjernlund <joakim.tjernlund@transmode.se>2004-09-08 09:43:25 +0000
committerJoakim Tjernlund <joakim.tjernlund@transmode.se>2004-09-08 09:43:25 +0000
commit90c50876acd1339310fd7002a872655819ced3e4 (patch)
treed2a18f7b56e5af53ead0a9cbe5de7431f1b092f7 /ldso/include
parent4910b36d0447deb57fe15cf13cf904c46fe70899 (diff)
Second attempt to fix the INIT/FINI order. This time I think I got it right :)
This needs testing with apps that have complex dependencies.
Diffstat (limited to 'ldso/include')
-rw-r--r--ldso/include/dl-hash.h9
-rw-r--r--ldso/include/ldso.h3
2 files changed, 9 insertions, 3 deletions
diff --git a/ldso/include/dl-hash.h b/ldso/include/dl-hash.h
index a30c78afb..38b50bc65 100644
--- a/ldso/include/dl-hash.h
+++ b/ldso/include/dl-hash.h
@@ -5,10 +5,15 @@
#define RTLD_NEXT ((void*)-1)
#endif
+struct init_fini {
+ struct elf_resolve **init_fini;
+ unsigned long nlist; /* Number of entries in init_fini */
+};
+
struct dyn_elf{
struct elf_resolve * dyn;
struct dyn_elf * next_handle; /* Used by dlopen et al. */
- struct init_fini_list *init_fini;
+ struct init_fini init_fini;
struct dyn_elf * next;
struct dyn_elf * prev;
};
@@ -29,6 +34,8 @@ struct elf_resolve{
unsigned long rtld_flags; /* RTLD_GLOBAL, RTLD_NOW etc. */
unsigned int nbucket;
unsigned long * elf_buckets;
+ struct init_fini_list *init_fini;
+
/*
* These are only used with ELF style shared libraries
*/
diff --git a/ldso/include/ldso.h b/ldso/include/ldso.h
index 37ec439cb..2b803f2fe 100644
--- a/ldso/include/ldso.h
+++ b/ldso/include/ldso.h
@@ -31,10 +31,9 @@
#include <dl-elf.h>
#include <dl-hash.h>
-/* For INIT/FINI handling */
+/* For INIT/FINI dependency sorting. */
struct init_fini_list {
struct init_fini_list *next;
- struct init_fini_list *prev;
struct elf_resolve *tpnt;
};