diff options
Diffstat (limited to 'libc')
| -rw-r--r-- | libc/misc/internals/__uClibc_main.c | 18 | 
1 files changed, 17 insertions, 1 deletions
| diff --git a/libc/misc/internals/__uClibc_main.c b/libc/misc/internals/__uClibc_main.c index 58f6643b2..36c0c6c63 100644 --- a/libc/misc/internals/__uClibc_main.c +++ b/libc/misc/internals/__uClibc_main.c @@ -153,6 +153,10 @@ extern void (*__fini_array_end []) (void) attribute_hidden;  # endif  #endif +#if defined (__LDSO_STANDALONE_SUPPORT__) && defined (SHARED) && defined __sh__ +extern unsigned long _dl_skip_args; +#endif +  attribute_hidden const char *__uclibc_progname = "";  #ifdef __UCLIBC_HAS_PROGRAM_INVOCATION_NAME__  const char *program_invocation_short_name = ""; @@ -341,11 +345,23 @@ void __uClibc_main(int (*main)(int, char **, char **), int argc,      __rtld_fini = rtld_fini; +#if defined __LDSO_STANDALONE_SUPPORT__ && defined SHARED && defined __sh__ +	/* +	 * Skip ld.so and its arguments +	 * Other archs except for SH do this in _dl_start before passing +	 * control to the application. +	 * FIXME: align SH _dl_start to other archs and remove this from here, +	 *        so that we can keep the visibility hidden. +	 */ +	argc -= _dl_skip_args; +	argv += _dl_skip_args; +#endif +      /* The environment begins right after argv.  */      __environ = &argv[argc + 1];      /* If the first thing after argv is the arguments -     * the the environment is empty. */ +     * then the environment is empty. */      if ((char *) __environ == *argv) {  	/* Make __environ point to the NULL at argv[argc] */  	__environ = &argv[argc]; | 
