Kaynağa Gözat

Clean up the _dl_boot code and make it similar to arm and sh.

Joakim Tjernlund 20 yıl önce
ebeveyn
işleme
eb4a096054
1 değiştirilmiş dosya ile 18 ekleme ve 26 silme
  1. 18 26
      ldso/ldso/powerpc/dl-startup.h

+ 18 - 26
ldso/ldso/powerpc/dl-startup.h

@@ -4,20 +4,25 @@
 
 /* Overrive the default _dl_boot function, and replace it with a bit of asm.
  * Then call the real _dl_boot function, which is now named _dl_boot2. */
-
-asm("" \
-"	.text\n"			\
-"	.globl	_dl_boot\n"		\
-"_dl_boot:\n"				\
-"	mr	3,1\n"		\
-"	li	4,0\n"			\
-"	addi	1,1,-16\n"		\
-"	stw	4,0(1)\n"		\
-"	bl      _dl_boot2\n"		\
-".previous\n"				\
+asm(
+    "	.text\n"
+    "	.globl	_dl_boot\n"
+    "	.type	_dl_boot,@function\n"
+    "_dl_boot:\n"
+    "	mr	3,1\n" /* Pass SP to _dl_boot2 in r3 */
+    "	addi	1,1,-16\n" /* Make room on stack for _dl_boot2 to store LR */
+    "	li	4,0\n"
+    "	stw	4,0(1)\n" /* Clear Stack frame */
+    "	bl	_dl_boot2@local\n" /* Perform relocation */
+    "	addi	1,1,16\n" /* Restore SP */
+    "	mtctr	3\n" /* Load applications entry point */
+    "	bctr\n" /* Jump to entry point */
+    "	.size	_dl_boot,.-_dl_boot\n"
+    "	.previous\n"
 );
 
-#define DL_BOOT(X) static void __attribute_used__ _dl_boot2(X)
+
+#define DL_BOOT(X) static void* __attribute_used__ _dl_boot2(X)
 
 /*
  * Get a pointer to the argv array.  On many platforms this can be just
@@ -53,17 +58,4 @@ asm("" \
  * is done.  This routine has to exit the current function, then
  * call the _dl_elf_main function.
  */
-
-/*
- * Use "b"(Address base register) operand for %1 since "b" excludes
- * r0 which is important for the addi instruction in this case. 
- */
-#define START()		\
-	__asm__ volatile ( \
-		    "addi 1,%1,0\n\t" \
-		    "mtlr %0\n\t" \
-		    "blrl\n\t"	\
-		    : : "r" (_dl_elf_main), "b" (args))
-
-
-
+#define START()	    return _dl_elf_main