From 9cba52f0aedbb95671e8a14e3fd5ff98381ff2b0 Mon Sep 17 00:00:00 2001 From: Eric Andersen Date: Thu, 8 Aug 2002 14:35:49 +0000 Subject: Patch from Stefan Allius and Edie C. Dost to add SuperH shared library support. This also adds some cleaner error handling, which I (Erik) then ported over to x86 and arm. In addition Stefan added the following fixes: - in hash.c was the lvalue handling of global library functions wrong. To fix this I had to change the prototype of _dl_find_hash. (==> TIS and ELF spec. Vers. 1.2) - in ldso.c was the order of the .init sections calls wrong. Before we call the initialization code of a library we have to check that all dependend libraries are already initialized. This can easily made by calling it in the revers loading order. For this I added a previous pointer chain. - in ldso.c the ELF magics wasn't checked fo PPC, MIPS and SH architecture --- ldso/ldso/ld_hash.h | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) (limited to 'ldso/ldso/ld_hash.h') diff --git a/ldso/ldso/ld_hash.h b/ldso/ldso/ld_hash.h index 639ae4510..b19d680a2 100644 --- a/ldso/ldso/ld_hash.h +++ b/ldso/ldso/ld_hash.h @@ -43,6 +43,7 @@ struct dyn_elf{ struct elf_resolve * dyn; struct dyn_elf * next_handle; /* Used by dlopen et al. */ struct dyn_elf * next; + struct dyn_elf * prev; }; struct elf_resolve{ @@ -113,8 +114,11 @@ extern struct elf_resolve * _dl_check_hashed_files(char * libname); extern struct elf_resolve * _dl_add_elf_hash_table(char * libname, char * loadaddr, unsigned long * dynamic_info, unsigned long dynamic_addr, unsigned long dynamic_size); + +enum caller_type{symbolrel=0,copyrel=1,resolver=2}; extern char * _dl_find_hash(char * name, struct dyn_elf * rpnt1, - struct elf_resolve * f_tpnt, int copyrel); + struct elf_resolve * f_tpnt, enum caller_type); + extern int _dl_linux_dynamic_link(void); extern char * _dl_library_path; @@ -129,16 +133,16 @@ static inline int _dl_symbol(char * name) } -#define DL_ERROR_NOFILE 1 -#define DL_ERROR_NOZERO 2 -#define DL_ERROR_NOTELF 3 -#define DL_ERROR_NOTMAGIC 4 -#define DL_ERROR_NOTDYN 5 -#define DL_ERROR_MMAP_FAILED 6 -#define DL_ERROR_NODYNAMIC 7 -#define DL_WRONG_RELOCS 8 -#define DL_BAD_HANDLE 9 -#define DL_NO_SYMBOL 10 +#define LD_ERROR_NOFILE 1 +#define LD_ERROR_NOZERO 2 +#define LD_ERROR_NOTELF 3 +#define LD_ERROR_NOTMAGIC 4 +#define LD_ERROR_NOTDYN 5 +#define LD_ERROR_MMAP_FAILED 6 +#define LD_ERROR_NODYNAMIC 7 +#define LD_WRONG_RELOCS 8 +#define LD_BAD_HANDLE 9 +#define LD_NO_SYMBOL 10 -- cgit v1.2.3