From 4136ca46e391faf1a6ce58b9a1a709b248213fb4 Mon Sep 17 00:00:00 2001 From: Filippo Arcidiacono Date: Fri, 30 Jul 2010 09:17:58 +0200 Subject: ldso: Add support for LD_WARN and LD_TRACE_PRELINKING Added support for the following tracing capabilities: - LD_WARN to warn about undefined symbols during the lookup stage. - LD_TRACE_PRELINKING to trace the needed libraries of the object that we are prelinking. Signed-off-by: Filippo Arcidiacono Signed-off-by: Carmelo Amoroso --- ldso/include/dl-hash.h | 12 ++++++++---- ldso/include/ldso.h | 6 ++++++ 2 files changed, 14 insertions(+), 4 deletions(-) (limited to 'ldso/include') diff --git a/ldso/include/dl-hash.h b/ldso/include/dl-hash.h index f47384c31..e138e1d4b 100644 --- a/ldso/include/dl-hash.h +++ b/ldso/include/dl-hash.h @@ -25,6 +25,10 @@ struct dyn_elf { struct dyn_elf * prev; }; +struct sym_val { + const ElfW(Sym) *s; + struct elf_resolve *m; +}; /* Structure to describe a single list of scope elements. The lookup functions get passed an array of pointers to such structures. */ @@ -154,17 +158,17 @@ extern struct elf_resolve * _dl_add_elf_hash_table(const char * libname, /* Only need extra arg with some configurations */ #if !((defined(USE_TLS) && USE_TLS) || defined __FDPIC__) -# define _dl_lookup_hash(n, r, m, c, t) _dl_lookup_hash(n, r, m, c) +# define _dl_lookup_hash(n, r, m, s, c, t) _dl_lookup_hash(n, r, m, s, c) #endif extern char *_dl_lookup_hash(const char *name, struct r_scope_elem *scope, - struct elf_resolve *mytpnt, int type_class, + struct elf_resolve *mytpnt, struct sym_val *symbol, int type_class, struct elf_resolve **tpntp); static __always_inline char *_dl_find_hash(const char *name, struct r_scope_elem *scope, - struct elf_resolve *mytpnt, int type_class, + struct elf_resolve *mytpnt, struct sym_val *symbol, int type_class, struct elf_resolve **tpntp) { - return _dl_lookup_hash(name, scope, mytpnt, type_class, tpntp); + return _dl_lookup_hash(name, scope, mytpnt, symbol, type_class, tpntp); } extern int _dl_linux_dynamic_link(void); diff --git a/ldso/include/ldso.h b/ldso/include/ldso.h index 536f7d266..9aa610e7b 100644 --- a/ldso/include/ldso.h +++ b/ldso/include/ldso.h @@ -73,6 +73,12 @@ extern char *_dl_preload; /* Things to be loaded before the libs */ extern char *_dl_ldsopath; /* Where the shared lib loader was found */ extern const char *_dl_progname; /* The name of the executable being run */ extern size_t _dl_pagesize; /* Store the page size for use later */ +#ifdef __LDSO_PRELINK_SUPPORT__ +extern char *_dl_trace_prelink; /* Library for prelinking trace */ +extern struct elf_resolve *_dl_trace_prelink_map; /* Library map for prelinking trace */ +#else +#define _dl_trace_prelink 0 +#endif #if defined(USE_TLS) && USE_TLS extern void _dl_add_to_slotinfo (struct link_map *l); -- cgit v1.2.3