about summary refs log tree commit diff
path: root/sysdeps/mips/start.S
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/mips/start.S')
-rw-r--r--sysdeps/mips/start.S8
1 files changed, 6 insertions, 2 deletions
diff --git a/sysdeps/mips/start.S b/sysdeps/mips/start.S
index a454941e55..3c012f1987 100644
--- a/sysdeps/mips/start.S
+++ b/sysdeps/mips/start.S
@@ -106,7 +106,8 @@ ENTRY_POINT:
 	move $9, $2		/* rtld_fini */
 	move $10, $29		/* stack_end */
 # endif
-	jal __libc_start_main
+	PTR_LA $25, __libc_start_main
+	jalr   $25
 hlt:	b hlt			/* Crash if somehow it does return.  */
 
 #elif _MIPS_SIM == _ABIO32 /* __mips16 */
@@ -157,7 +158,9 @@ ENTRY_POINT:
 	sw	$4, 16($sp)			/* fini */
 	lw	$4, 3f				/* main */
 	sw	$2, 20($sp)			/* rtld_fini */
-	jal	__libc_start_main
+	/* Load and call __libc_start_main().  */
+	lw	$3, 4f
+	jalr	$3
 # endif
 hlt:	b	hlt		/* Crash if somehow it does return.  */
 # ifndef __PIC__
@@ -165,6 +168,7 @@ hlt:	b	hlt		/* Crash if somehow it does return.  */
 1:	.word	__libc_csu_fini
 2:	.word	__libc_csu_init
 3:	.word	main
+4:	.word	__libc_start_main
 # endif
 
 #else /* __mips16 && _MIPS_SIM != _ABIO32 */