|
@@ -24,6 +24,11 @@
|
|
|
|
|
|
At this entry point, most registers' values are unspecified, except:
|
|
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:
|
|
sp The stack contains the arguments and environment:
|
|
0(sp) argc
|
|
0(sp) argc
|
|
4(sp) argv[0]
|
|
4(sp) argv[0]
|
|
@@ -48,7 +53,8 @@ _start:
|
|
mov.l @r15+,r5
|
|
mov.l @r15+,r5
|
|
mov r15, r6
|
|
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 r4,@-r15
|
|
mov.l L_fini,r0
|
|
mov.l L_fini,r0
|
|
mov.l r0,@-r15
|
|
mov.l r0,@-r15
|
|
@@ -57,7 +63,7 @@ _start:
|
|
mov.l L_main,r4
|
|
mov.l L_main,r4
|
|
mov.l L_init,r7
|
|
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. */
|
|
/* Let the libc call main and exit with its return code. */
|
|
mov.l L_uClibc_main,r1
|
|
mov.l L_uClibc_main,r1
|