Code sub-loading working.
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@15377 27425a3e-05d8-49a3-a47f-9c15f0e5edd8
This commit is contained in:
parent
d0a8340472
commit
916876b01f
|
@ -107,11 +107,11 @@ __sandbox: .long 0xFE9154C0
|
||||||
.bss
|
.bss
|
||||||
|
|
||||||
.align 2
|
.align 2
|
||||||
.global __sb_parameters
|
.global __sb_parameters
|
||||||
__sb_parameters:
|
__sb_parameters:
|
||||||
.ds.l 1
|
.ds.l 1
|
||||||
.ds.l 1
|
.ds.l 1
|
||||||
.global environ /* Required by newlib.*/
|
.global environ /* Required by newlib.*/
|
||||||
environ:
|
environ:
|
||||||
.ds.l 1
|
.ds.l 1
|
||||||
.ds.l 1
|
.ds.l 1
|
||||||
|
@ -227,7 +227,7 @@ finiloop:
|
||||||
endfiniloop:
|
endfiniloop:
|
||||||
#endif /* CRT0_CALL_DESTRUCTORS == TRUE */
|
#endif /* CRT0_CALL_DESTRUCTORS == TRUE */
|
||||||
ldr r1, =__sandbox
|
ldr r1, =__sandbox
|
||||||
ldr r2, [r1], #16 /* Predefined exit vector.*/
|
ldr r2, [r1, #16] /* Predefined exit vector.*/
|
||||||
bx r2
|
bx r2
|
||||||
|
|
||||||
#endif /* !defined(__DOXYGEN__) */
|
#endif /* !defined(__DOXYGEN__) */
|
||||||
|
|
|
@ -52,14 +52,14 @@ __callelf_data:
|
||||||
.global __callelf
|
.global __callelf
|
||||||
__callelf:
|
__callelf:
|
||||||
ldr r4, =__callelf_data
|
ldr r4, =__callelf_data
|
||||||
str sp, [r4], #0
|
str sp, [r4, #0]
|
||||||
str lr, [r4], #4
|
str lr, [r4, #4]
|
||||||
|
|
||||||
/* Setting up the call stack for the loaded module.*/
|
/* Setting up the call stack for the loaded module.*/
|
||||||
ldr r5, [r0], #20 /* Placed by runelf(). */
|
ldr r5, [r0, #20] /* Placed by runelf(). */
|
||||||
mov sp, r5
|
mov sp, r5
|
||||||
push {r1, r2, r3, r5} /* argc, argv, envp, top. */
|
push {r1, r2, r3, r5} /* argc, argv, envp, top. */
|
||||||
ldr r6, [r0], #16
|
ldr r6, [r0, #12]
|
||||||
bx r6 /* Jumping to entry point. */
|
bx r6 /* Jumping to entry point. */
|
||||||
|
|
||||||
/* Call elf return code.*/
|
/* Call elf return code.*/
|
||||||
|
@ -68,9 +68,9 @@ __callelf:
|
||||||
.global __returnelf
|
.global __returnelf
|
||||||
__returnelf:
|
__returnelf:
|
||||||
ldr r4, =__callelf_data
|
ldr r4, =__callelf_data
|
||||||
ldmdb r4, {r5, lr}
|
ldmia r4, {r5, r6}
|
||||||
mov sp, r5
|
mov sp, r5
|
||||||
bx lr
|
bx r6
|
||||||
|
|
||||||
#endif /* !defined(__DOXYGEN__) */
|
#endif /* !defined(__DOXYGEN__) */
|
||||||
|
|
||||||
|
|
|
@ -56,5 +56,6 @@ int runelf(const char *fname, int argc, char *argv[], char *envp[]) {
|
||||||
|
|
||||||
/* Setting up the exit vector for the loaded elf file.*/
|
/* Setting up the exit vector for the loaded elf file.*/
|
||||||
sbhp->hdr_exit = (uint32_t)__returnelf;
|
sbhp->hdr_exit = (uint32_t)__returnelf;
|
||||||
|
sbhp->user[0] = (uint32_t)bufend;
|
||||||
return __callelf(sbhp, argc, argv, envp);
|
return __callelf(sbhp, argc, argv, envp);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue