summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Frysinger <vapier@gentoo.org>2006-11-17 06:07:30 +0000
committerMike Frysinger <vapier@gentoo.org>2006-11-17 06:07:30 +0000
commita9f3bfe7dd2f2b3f690ff88d9ce83858f9b85b6d (patch)
treee935de25cdf4e47de3302afe959d1acc4d45e44f
parent82334a1ba05ac2d3098df9018a20474f7771bcfc (diff)
Bernd Schmidt writes:
This reintroduces a mechanism identical to the DL_BOOT macro present in older versions of uClibc. On Blackfin and FRV, we want to pass more than one argument to _dl_start. We also want to do something special before returning, so delete the warning when the START macro is defined.
-rw-r--r--ldso/include/dl-defs.h6
-rw-r--r--ldso/ldso/dl-startup.c3
2 files changed, 7 insertions, 2 deletions
diff --git a/ldso/include/dl-defs.h b/ldso/include/dl-defs.h
index 18eff43c1..a8f6d6aae 100644
--- a/ldso/include/dl-defs.h
+++ b/ldso/include/dl-defs.h
@@ -66,6 +66,12 @@ typedef struct {
#endif
+/* Provide a means for a port to pass additional arguments to the _dl_start
+ function. */
+#ifndef DL_START
+# define DL_START(X) static void * __attribute_used__ _dl_start(X)
+#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
diff --git a/ldso/ldso/dl-startup.c b/ldso/ldso/dl-startup.c
index 69398268b..5cf1d049e 100644
--- a/ldso/ldso/dl-startup.c
+++ b/ldso/ldso/dl-startup.c
@@ -110,7 +110,7 @@ strong_alias(__rtld_stack_end, __libc_stack_end) /* Exported version of __rtld_s
NULL
auxvt[0...N] Auxiliary Vector Table elements (mixed types)
*/
-static void * __attribute_used__ _dl_start(unsigned long args)
+DL_START(unsigned long args)
{
unsigned int argc;
char **argv, **envp;
@@ -313,7 +313,6 @@ static void * __attribute_used__ _dl_start(unsigned long args)
#ifndef START
return _dl_elf_main;
#else
-#warning You need to update your arch ldso code
START();
#endif
}