diff options
author | Dale Rahn <drahn@cvs.openbsd.org> | 2005-05-10 03:36:08 +0000 |
---|---|---|
committer | Dale Rahn <drahn@cvs.openbsd.org> | 2005-05-10 03:36:08 +0000 |
commit | ba63d6cf60afa1d91d7be6764afb5b1f24ff1978 (patch) | |
tree | 93b1be5065fbd0e57d61d97a66a0c99e47da6b96 /libexec/ld.so/resolve.h | |
parent | 045f394f80448de62bdad4a1efa368d3c4e8ca9c (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.h | 21 |
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; |