summaryrefslogtreecommitdiff
path: root/ldso/ldso/ld_hash.h
diff options
context:
space:
mode:
authorEric Andersen <andersen@codepoet.org>2002-08-08 14:35:49 +0000
committerEric Andersen <andersen@codepoet.org>2002-08-08 14:35:49 +0000
commit9cba52f0aedbb95671e8a14e3fd5ff98381ff2b0 (patch)
treedd82b29998103d7d8ba34351e6fc3a12dc0ed7ac /ldso/ldso/ld_hash.h
parent4c69b9f793fc1eae9190d8ba26dba25db616272f (diff)
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
Diffstat (limited to 'ldso/ldso/ld_hash.h')
-rw-r--r--ldso/ldso/ld_hash.h26
1 files changed, 15 insertions, 11 deletions
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