summaryrefslogtreecommitdiff
path: root/libexec/ld.so/resolve.h
diff options
context:
space:
mode:
authorDale Rahn <drahn@cvs.openbsd.org>2005-04-05 19:29:10 +0000
committerDale Rahn <drahn@cvs.openbsd.org>2005-04-05 19:29:10 +0000
commit89c5196820bb38412fa7d291f3a10dd4dfbda71d (patch)
tree6687cb51539366828e7a33bcb0229a721a47b267 /libexec/ld.so/resolve.h
parentec2a10f3444e39a36e94bccf99c9b3ffaf76695e (diff)
Do a better job of running destructors in the right order.
Diffstat (limited to 'libexec/ld.so/resolve.h')
-rw-r--r--libexec/ld.so/resolve.h21
1 files changed, 16 insertions, 5 deletions
diff --git a/libexec/ld.so/resolve.h b/libexec/ld.so/resolve.h
index 1f583fe23ad..af303fae8d9 100644
--- a/libexec/ld.so/resolve.h
+++ b/libexec/ld.so/resolve.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: resolve.h,v 1.33 2005/03/23 19:48:05 drahn Exp $ */
+/* $OpenBSD: resolve.h,v 1.34 2005/04/05 19:29:09 drahn Exp $ */
/*
* Copyright (c) 1998 Per Fogelstrom, Opsycon AB
@@ -99,9 +99,11 @@ typedef struct elf_object {
struct elf_object *dep_next; /* Shadow objects for resolve search */
int status;
-#define STAT_RELOC_DONE 1
-#define STAT_GOT_DONE 2
-#define STAT_INIT_DONE 4
+#define STAT_RELOC_DONE 0x01
+#define STAT_GOT_DONE 0x02
+#define STAT_INIT_DONE 0x04
+#define STAT_FINI_DONE 0x08
+#define STAT_FINI_READY 0x10
Elf_Phdr *phdrp;
int phdrc;
@@ -118,7 +120,7 @@ typedef struct elf_object {
u_int32_t nbuckets;
Elf_Word *chains;
u_int32_t nchains;
- Elf_Dyn *dynamic;
+ Elf_Dyn *dynamic;
struct dep_node *first_child;
struct dep_node *last_child;
@@ -180,8 +182,13 @@ Elf_Addr _dl_find_symbol_bysym(elf_object_t *req_obj, unsigned int symidx,
void _dl_rtld(elf_object_t *object);
void _dl_call_init(elf_object_t *object);
void _dl_link_sub(elf_object_t *dep, elf_object_t *p);
+void _dl_link_dlopen(elf_object_t *dep);
+void _dl_unlink_dlopen(elf_object_t *dep);
+void _dl_notify_unload_shlib(elf_object_t *object);
+void _dl_unload_dlopen(void);
void _dl_run_dtors(elf_object_t *object);
+void _dl_run_all_dtors(void);
Elf_Addr _dl_bind(elf_object_t *object, int index);
@@ -189,6 +196,9 @@ int _dl_match_file(struct sod *sodp, char *name, int namelen);
char *_dl_find_shlib(struct sod *sodp, const char *searchpath, int nohints);
void _dl_load_list_free(struct load_list *load_list);
+void _dl_thread_kern_go(void);
+void _dl_thread_kern_stop(void);
+
extern elf_object_t *_dl_objects;
extern elf_object_t *_dl_last_object;
@@ -197,6 +207,7 @@ extern struct r_debug *_dl_debug_map;
extern int _dl_pagesz;
extern int _dl_errno;
+extern int _dl_exiting;
extern char *_dl_libpath;
extern char *_dl_preload;