diff options
Diffstat (limited to 'libc')
| -rw-r--r-- | libc/sysdeps/linux/sh/crt1.S | 10 | 
1 files changed, 8 insertions, 2 deletions
| diff --git a/libc/sysdeps/linux/sh/crt1.S b/libc/sysdeps/linux/sh/crt1.S index fc0ce355d..1c3c54447 100644 --- a/libc/sysdeps/linux/sh/crt1.S +++ b/libc/sysdeps/linux/sh/crt1.S @@ -24,6 +24,11 @@  	At this entry point, most registers' values are unspecified, except: +   r4	Contains a function pointer to be registered with `atexit'. +		This is how the dynamic linker arranges to have DT_FINI +		functions called for shared libraries that have been loaded +		before this code runs. +     sp		The stack contains the arguments and environment:     		0(sp)			argc  		4(sp)			argv[0] @@ -48,7 +53,8 @@ _start:  	mov.l @r15+,r5  	mov r15, r6 -	/* Push the fini func onto the stack */ +	/* Push the stack_end, rtld_fini and fini func onto the stack */ +	mov.l r6,@-r15  	mov.l r4,@-r15  	mov.l L_fini,r0  	mov.l r0,@-r15 @@ -57,7 +63,7 @@ _start:  	mov.l L_main,r4  	mov.l L_init,r7 -	/* __uClibc_main (main, argc, argv, init, fini) */ +	/* __uClibc_main (main, argc, argv, init, fini, rtld_fini, stack_end) */  	/* Let the libc call main and exit with its return code.  */  	mov.l L_uClibc_main,r1 | 
