diff options
author | Filippo Arcidiacono <filippo.arcidiacono@st.com> | 2012-05-08 15:42:48 +0200 |
---|---|---|
committer | Carmelo Amoroso <carmelo.amoroso@st.com> | 2012-05-18 09:04:11 +0200 |
commit | f8111809bae5bfe384bbbf59d59eb6ee4b16ec7f (patch) | |
tree | d45cbb1190ad7c856d35961c61832b47440fd6f1 /ldso | |
parent | ca2223f6b74b03d285370a92849af7cdf059ffb2 (diff) |
ldso: sh: handle _dl_skip_args in linker startup instead of __uClibc_main
Handle _dl_skip_args in the asm part of the dynamic linker startup,
to skip the ldso arguments, so we can keep this symbol hidden as other archs do.
Signed-off-by: Filippo Arcidiacono <filippo.arcidiacono@st.com>
Signed-off-by: Carmelo Amoroso <carmelo.amoroso@st.com>
Diffstat (limited to 'ldso')
-rw-r--r-- | ldso/ldso/ldso.c | 10 | ||||
-rw-r--r-- | ldso/ldso/sh/dl-startup.h | 10 |
2 files changed, 10 insertions, 10 deletions
diff --git a/ldso/ldso/ldso.c b/ldso/ldso/ldso.c index 85d27a3d1..8cfb03f9a 100644 --- a/ldso/ldso/ldso.c +++ b/ldso/ldso/ldso.c @@ -77,17 +77,7 @@ char *_dl_debug_bindings = NULL; int _dl_debug_file = 2; #endif -#if defined (__LDSO_STANDALONE_SUPPORT__) && defined (__sh__) -/* Not hidden, needed for standalone execution. */ -/* - * FIXME: align dl_start for SH to other archs so that we can keep this symbol - * hidden and we don't need to handle in __uClibc_main - */ - -unsigned long _dl_skip_args = 0; -#else unsigned long attribute_hidden _dl_skip_args = 0; -#endif const char *_dl_progname = UCLIBC_LDSO; /* The name of the executable being run */ #include "dl-startup.c" diff --git a/ldso/ldso/sh/dl-startup.h b/ldso/ldso/sh/dl-startup.h index 3222e0933..b0b9b021d 100644 --- a/ldso/ldso/sh/dl-startup.h +++ b/ldso/ldso/sh/dl-startup.h @@ -17,12 +17,22 @@ __asm__( " mov.l .L_got, r12 ! Load the GOT on r12\n" " mova .L_got, r0\n" " add r0, r12\n" + " mov.l .L_dl_skip_args,r0\n" + " mov.l @(r0,r12),r0\n" + " mov.l @r0,r0\n" + " mov.l @r15,r5 ! Get the original argument count\n" + " sub r0,r5 ! Subtract _dl_skip_args from it\n" + " shll2 r0\n" + " add r0,r15 ! Adjust the stack pointer to skip _dl_skip_args words\n" + " mov.l r5,@r15 ! Store back the modified argument count\n" " mov.l .L_dl_fini, r0\n" " mov.l @(r0,r12), r4 ! Pass the finalizer in r4\n" " jmp @r8\n" " nop\n" ".L_dl_start:\n" " .long _dl_start-.jmp_loc\n" + ".L_dl_skip_args:\n" + " .long _dl_skip_args@GOT\n" ".L_dl_fini:\n" " .long _dl_fini@GOT\n" ".L_got:\n" |