svn commit: trunk/uClibc/ldso: include ldso
vapier at uclibc.org
vapier at uclibc.org
Wed Jul 5 19:17:22 UTC 2006
Author: vapier
Date: 2006-07-05 12:17:19 -0700 (Wed, 05 Jul 2006)
New Revision: 15641
Log:
patch from Bernd Schmidt to abstract away load address types
Modified:
trunk/uClibc/ldso/include/dl-defs.h
trunk/uClibc/ldso/include/dl-elf.h
trunk/uClibc/ldso/include/dl-hash.h
trunk/uClibc/ldso/include/ldso.h
trunk/uClibc/ldso/ldso/dl-elf.c
trunk/uClibc/ldso/ldso/dl-hash.c
trunk/uClibc/ldso/ldso/dl-startup.c
trunk/uClibc/ldso/ldso/ldso.c
Changeset:
Modified: trunk/uClibc/ldso/include/dl-defs.h
===================================================================
--- trunk/uClibc/ldso/include/dl-defs.h 2006-07-05 19:05:55 UTC (rev 15640)
+++ trunk/uClibc/ldso/include/dl-defs.h 2006-07-05 19:17:19 UTC (rev 15641)
@@ -66,6 +66,15 @@
#endif
+/* Machines in which different sections may be relocated by different
+ * amounts should define this and LD_RELOC_ADDR. If you change this,
+ * make sure you change struct link_map in include/link.h accordingly
+ * such that it matches a prefix of struct elf_resolve.
+ */
+#ifndef DL_LOADADDR_TYPE
+# define DL_LOADADDR_TYPE ElfW(Addr)
+#endif
+
/* Initialize a LOADADDR representing the loader itself. It's only
* called from DL_BOOT, so additional arguments passed to it may be
* referenced.
Modified: trunk/uClibc/ldso/include/dl-elf.h
===================================================================
--- trunk/uClibc/ldso/include/dl-elf.h 2006-07-05 19:05:55 UTC (rev 15640)
+++ trunk/uClibc/ldso/include/dl-elf.h 2006-07-05 19:17:19 UTC (rev 15641)
@@ -94,10 +94,12 @@
#define DYNAMIC_SIZE (DT_NUM+OS_NUM+ARCH_NUM)
-extern void _dl_parse_dynamic_info(ElfW(Dyn) *dpnt, unsigned long dynamic_info[], void *debug_addr, ElfW(Addr) load_off);
+extern void _dl_parse_dynamic_info(ElfW(Dyn) *dpnt, unsigned long dynamic_info[],
+ void *debug_addr, DL_LOADADDR_TYPE load_off);
static __always_inline
-void __dl_parse_dynamic_info(ElfW(Dyn) *dpnt, unsigned long dynamic_info[], void *debug_addr, ElfW(Addr) load_off)
+void __dl_parse_dynamic_info(ElfW(Dyn) *dpnt, unsigned long dynamic_info[],
+ void *debug_addr, DL_LOADADDR_TYPE load_off)
{
for (; dpnt->d_tag; dpnt++) {
if (dpnt->d_tag < DT_NUM) {
Modified: trunk/uClibc/ldso/include/dl-hash.h
===================================================================
--- trunk/uClibc/ldso/include/dl-hash.h 2006-07-05 19:05:55 UTC (rev 15640)
+++ trunk/uClibc/ldso/include/dl-hash.h 2006-07-05 19:17:19 UTC (rev 15641)
@@ -28,7 +28,7 @@
struct elf_resolve {
/* These entries must be in this order to be compatible with the interface used
by gdb to obtain the list of symbols. */
- ElfW(Addr) loadaddr; /* Base address shared object is loaded at. */
+ DL_LOADADDR_TYPE loadaddr; /* Base address shared object is loaded at. */
char *libname; /* Absolute file name object was found in. */
ElfW(Dyn) *dynamic_addr; /* Dynamic section of the shared object. */
struct elf_resolve * next;
@@ -77,7 +77,7 @@
extern struct dyn_elf * _dl_handles;
extern struct elf_resolve * _dl_add_elf_hash_table(const char * libname,
- ElfW(Addr) loadaddr, unsigned long * dynamic_info,
+ DL_LOADADDR_TYPE loadaddr, unsigned long * dynamic_info,
unsigned long dynamic_addr, unsigned long dynamic_size);
extern char * _dl_find_hash(const char * name, struct dyn_elf * rpnt1,
Modified: trunk/uClibc/ldso/include/ldso.h
===================================================================
--- trunk/uClibc/ldso/include/ldso.h 2006-07-05 19:05:55 UTC (rev 15640)
+++ trunk/uClibc/ldso/include/ldso.h 2006-07-05 19:17:19 UTC (rev 15641)
@@ -88,7 +88,7 @@
extern char *_dl_strdup(const char *string);
extern void _dl_dprintf(int, const char *, ...);
-extern void _dl_get_ready_to_run(struct elf_resolve *tpnt, ElfW(Addr) load_addr,
- ElfW(auxv_t) auxvt[AT_EGID + 1], char **envp, char **argv);
+extern void _dl_get_ready_to_run(struct elf_resolve *tpnt, DL_LOADADDR_TYPE load_addr,
+ ElfW(auxv_t) auxvt[AT_EGID + 1], char **envp, char **argv);
#endif /* _LDSO_H_ */
Modified: trunk/uClibc/ldso/ldso/dl-elf.c
===================================================================
--- trunk/uClibc/ldso/ldso/dl-elf.c 2006-07-05 19:05:55 UTC (rev 15640)
+++ trunk/uClibc/ldso/ldso/dl-elf.c 2006-07-05 19:17:19 UTC (rev 15641)
@@ -801,7 +801,8 @@
return retval;
}
-void _dl_parse_dynamic_info(ElfW(Dyn) *dpnt, unsigned long dynamic_info[], void *debug_addr, ElfW(Addr) load_off)
+void _dl_parse_dynamic_info(ElfW(Dyn) *dpnt, unsigned long dynamic_info[],
+ void *debug_addr, DL_LOADADDR_TYPE load_off)
{
__dl_parse_dynamic_info(dpnt, dynamic_info, debug_addr, load_off);
}
Modified: trunk/uClibc/ldso/ldso/dl-hash.c
===================================================================
--- trunk/uClibc/ldso/ldso/dl-hash.c 2006-07-05 19:05:55 UTC (rev 15640)
+++ trunk/uClibc/ldso/ldso/dl-hash.c 2006-07-05 19:17:19 UTC (rev 15641)
@@ -83,7 +83,7 @@
* externals properly.
*/
struct elf_resolve *_dl_add_elf_hash_table(const char *libname,
- ElfW(Addr) loadaddr, unsigned long *dynamic_info, unsigned long dynamic_addr,
+ DL_LOADADDR_TYPE loadaddr, unsigned long *dynamic_info, unsigned long dynamic_addr,
attribute_unused unsigned long dynamic_size)
{
Elf_Symndx *hash_addr;
Modified: trunk/uClibc/ldso/ldso/dl-startup.c
===================================================================
--- trunk/uClibc/ldso/ldso/dl-startup.c 2006-07-05 19:05:55 UTC (rev 15640)
+++ trunk/uClibc/ldso/ldso/dl-startup.c 2006-07-05 19:17:19 UTC (rev 15641)
@@ -114,7 +114,7 @@
{
unsigned int argc;
char **argv, **envp;
- ElfW(Addr) load_addr;
+ DL_LOADADDR_TYPE load_addr;
ElfW(Addr) got;
unsigned long *aux_dat;
ElfW(Ehdr) *header;
Modified: trunk/uClibc/ldso/ldso/ldso.c
===================================================================
--- trunk/uClibc/ldso/ldso/ldso.c 2006-07-05 19:05:55 UTC (rev 15640)
+++ trunk/uClibc/ldso/ldso/ldso.c 2006-07-05 19:17:19 UTC (rev 15641)
@@ -102,7 +102,7 @@
#endif
static void _dl_run_array_forward(unsigned long array, unsigned long size,
- ElfW(Addr) loadaddr)
+ DL_LOADADDR_TYPE loadaddr)
{
if (array != 0) {
unsigned int j;
@@ -173,9 +173,9 @@
}
}
-void _dl_get_ready_to_run(struct elf_resolve *tpnt, ElfW(Addr) load_addr,
- ElfW(auxv_t) auxvt[AT_EGID + 1], char **envp,
- char **argv)
+void _dl_get_ready_to_run(struct elf_resolve *tpnt, DL_LOADADDR_TYPE load_addr,
+ ElfW(auxv_t) auxvt[AT_EGID + 1], char **envp,
+ char **argv)
{
ElfW(Phdr) *ppnt;
ElfW(Dyn) *dpnt;
More information about the uClibc-cvs
mailing list