ARM: Use GCC-emitted frame pointer.

* lib/linux/arm-mes-gcc/crt1.c (_start): Use GCC-emitted frame pointer.
This commit is contained in:
Danny Milosavljevic 2019-03-11 11:26:50 +01:00 committed by Jan Nieuwenhuizen
parent 5199db9d8e
commit a1217d71c1
No known key found for this signature in database
GPG Key ID: F3C1A0D9C1D65273
1 changed files with 6 additions and 3 deletions

View File

@ -21,6 +21,10 @@
#include <mes/lib-mini.h>
//int main (int argc, char *argv[], char *envp[]);
/* Note: GCC automatically emits a preable in order to set up the frame pointer:
"push {fp}"
"add fp, sp, 0"
*/
// *INDENT-OFF*
void
_start ()
@ -48,9 +52,8 @@ _start ()
/* environ = argv + argc + 1 */
asm (
"pop {r7}\n\t" /* gcc has a strange preable pushing r7. FIXME: Be nicer. */
"ldr r0,[sp]\n\t" /* r0 = argc */
"add r1,sp,#4\n\t" /* r1 = &argv[0] */
"ldr r0,[fp,#4]\n\t" /* r0 = argc */
"add r1,fp,#8\n\t" /* r1 = &argv[0] */
"add r2,r1,#1\n\t" /* r2 = r1 + 1 */
"lsl r2,#2\n\t" /* r2 = (r1 + 1) << 2 */
"push {r2}\n\t" /* envp */