summaryrefslogtreecommitdiff
path: root/ldso/include/dl-hash.h
diff options
context:
space:
mode:
authorCarmelo Amoroso <carmelo.amoroso@st.com>2007-11-07 15:14:50 +0000
committerCarmelo Amoroso <carmelo.amoroso@st.com>2007-11-07 15:14:50 +0000
commit6630516b0a000e0ac9769eceda72881f788b23b0 (patch)
treebe45d000f7fcc15236d67c0c0703ee10645518ed /ldso/include/dl-hash.h
parent15e6cdf87ac378107dbbe096f1b09917733b0240 (diff)
Added support for GNU hash style into dynamic linker
Diffstat (limited to 'ldso/include/dl-hash.h')
-rw-r--r--ldso/include/dl-hash.h25
1 files changed, 25 insertions, 0 deletions
diff --git a/ldso/include/dl-hash.h b/ldso/include/dl-hash.h
index c21094020..5239467c1 100644
--- a/ldso/include/dl-hash.h
+++ b/ldso/include/dl-hash.h
@@ -40,14 +40,39 @@ struct elf_resolve {
unsigned short int init_flag;
unsigned long rtld_flags; /* RTLD_GLOBAL, RTLD_NOW etc. */
Elf_Symndx nbucket;
+
+#ifdef __LDSO_GNU_HASH_SUPPORT__
+ /* Data needed to support GNU hash style */
+ Elf32_Word l_gnu_bitmask_idxbits;
+ Elf32_Word l_gnu_shift;
+ const ElfW(Addr) *l_gnu_bitmask;
+
+ union
+ {
+ const Elf32_Word *l_gnu_chain_zero;
+ const Elf_Symndx *elf_buckets;
+ };
+#else
Elf_Symndx *elf_buckets;
+#endif
+
struct init_fini_list *init_fini;
struct init_fini_list *rtld_local; /* keep tack of RTLD_LOCAL libs in same group */
/*
* These are only used with ELF style shared libraries
*/
Elf_Symndx nchain;
+
+#ifdef __LDSO_GNU_HASH_SUPPORT__
+ union
+ {
+ const Elf32_Word *l_gnu_buckets;
+ const Elf_Symndx *chains;
+ };
+#else
Elf_Symndx *chains;
+#endif
+
unsigned long dynamic_info[DYNAMIC_SIZE];
unsigned long n_phent;