summaryrefslogtreecommitdiff
path: root/libexec/ld.so/resolve.h
diff options
context:
space:
mode:
authorDale Rahn <drahn@cvs.openbsd.org>2005-05-10 03:36:08 +0000
committerDale Rahn <drahn@cvs.openbsd.org>2005-05-10 03:36:08 +0000
commitba63d6cf60afa1d91d7be6764afb5b1f24ff1978 (patch)
tree93b1be5065fbd0e57d61d97a66a0c99e47da6b96 /libexec/ld.so/resolve.h
parent045f394f80448de62bdad4a1efa368d3c4e8ca9c (diff)
Recommit the destructor order fix, now that the amd64 bug was fixed.
'no problem' pval@
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 64009996094..fd60b1444a3 100644
--- a/libexec/ld.so/resolve.h
+++ b/libexec/ld.so/resolve.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: resolve.h,v 1.35 2005/04/06 00:16:53 deraadt Exp $ */
+/* $OpenBSD: resolve.h,v 1.36 2005/05/10 03:36:07 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;