[uClibc-cvs] svn commit: trunk/uClibc: ldso/ldso/mips libc/sysdeps/linux/mips

andersen at uclibc.org andersen at uclibc.org
Fri Jun 10 07:22:28 UTC 2005


Author: andersen
Date: 2005-06-10 01:22:28 -0600 (Fri, 10 Jun 2005)
New Revision: 10498

Log:
Finish updating mips for the new ABI


Modified:
   trunk/uClibc/ldso/ldso/mips/dl-startup.h
   trunk/uClibc/ldso/ldso/mips/resolve.S
   trunk/uClibc/libc/sysdeps/linux/mips/crt1.S


Changeset:
Modified: trunk/uClibc/ldso/ldso/mips/dl-startup.h
===================================================================
--- trunk/uClibc/ldso/ldso/mips/dl-startup.h	2005-06-09 20:21:05 UTC (rev 10497)
+++ trunk/uClibc/ldso/ldso/mips/dl-startup.h	2005-06-10 07:22:28 UTC (rev 10498)
@@ -2,40 +2,64 @@
  * will work as expected and cope with whatever platform specific wierdness is
  * needed for this architecture.
  * Copyright (C) 2005 by Joakim Tjernlund
+ * Copyright (C) 2005 by Erik Andersen
  */
 
+
 asm(""
     "	.text\n"
     "	.globl	_start\n"
+    "	.ent	_start\n"
     "	.type	_start, at function\n"
     "_start:\n"
     "	.set noreorder\n"
-    "	bltzal $0, 0f\n"
+    "	move	$25, $31\n"
+    "	bal	0f\n"
     "	nop\n"
-    "0:	.cpload $31\n"
+    "0:\n"
+    "	.cpload	$31\n"
+    "	move	$31, $25\n"
     "	.set reorder\n"
-    "	la $4, _DYNAMIC\n"
-    "	sw $4, -0x7ff0($28)\n"
-    "	move $4, $29\n"
-    "	la $8, coff\n"
-    "	.set noreorder\n"
-    "	bltzal $0, coff\n"
-    "	nop\n"
-    "coff:	subu $8, $31, $8\n"
-    "	.set reorder\n"
-    "	la $25, _dl_start\n"
-    "	addu $25, $8\n"
-    "	jalr $25\n"
-    "	move $17, $2\n"
-    "	lw $4, 0($29)\n"
-    "	la $5, 4($29)\n"
-    "	sll $6, $4, 2\n"
-    "	addu $6, $6, $5\n"
-    "	addu $6, $6, 4\n"
-    "	move $25, $17\n"
-    "	jr $25\n"
-    "	.size	_start,.-_start\n"
-    "	.previous\n"
+    "	la	$4, _DYNAMIC\n"
+    "	sw	$4, -0x7ff0($28)\n"
+    "	move	$4, $29\n"
+    "	subu	$29, 16\n"
+    "	la	$8, .coff\n"
+    "	bltzal	$8, .coff\n"
+    ".coff:\n"
+    "	subu	$8, $31, $8\n"
+    "	la	$25, _dl_start\n"
+    "	addu	$25, $8\n"
+    "	jalr	$25\n"
+    "	addiu	$29, 16\n"
+    "	move	$16, $28\n"
+    "	move	$17, $2\n"
+    "	lw	$2, _dl_skip_args\n"
+    "	beq	$2, $0, 1f\n"
+    "	lw	$4, 0($29)\n"
+    "	subu	$4, $2\n"
+    "	sll	$2, 2\n"
+    "	addu	$29, $2\n"
+    "	sw	$4, 0($29)\n"
+    "1:\n"
+    "	lw	$5, 0($29)\n"
+    "	la	$6, 4 ($29)\n"
+    "	sll	$7, $5, 2\n"
+    "	addu	$7, $7, $6\n"
+    "	addu	$7, $7, 4\n"
+    "	and	$2, $29, -2 * 4\n"
+    "	sw	$29, -4($2)\n"
+    "	subu	$29, $2, 32\n"
+    "	.cprestore 16\n"
+    "	lw	$29, 28($29)\n"
+    "	la	$2, _dl_fini\n"
+    "	move	$25, $17\n"
+    "	jr	$25\n"
+    ".end	_start\n"
+    ".size	_start, . -_start\n"
+    "\n\n"
+    "\n\n"
+    ".previous\n"
 );
 
 /*

Modified: trunk/uClibc/ldso/ldso/mips/resolve.S
===================================================================
--- trunk/uClibc/ldso/ldso/mips/resolve.S	2005-06-09 20:21:05 UTC (rev 10497)
+++ trunk/uClibc/ldso/ldso/mips/resolve.S	2005-06-10 07:22:28 UTC (rev 10498)
@@ -11,6 +11,7 @@
  * Copyright (C) 2002 Steven J. Hill <sjhill at realitydiluted.com>
  *
  */
+
 .text
 .align	2
 .globl	_dl_runtime_resolve
@@ -19,27 +20,48 @@
 _dl_runtime_resolve:
 	.frame	$29, 40, $31
 	.set noreorder
-	move	$3, $28		# Save GP
-	addu	$25, 8		# t9 ($25) now points at .cpload instruction
-	.cpload	$25		# Compute GP
+
+	# Save GP.
+	move	$3, $28
+
+	# Save arguments and sp value on stack.
+	subu	$29, 40
+
+	# Modify t9 ($25) so as to point .cpload instruction.
+	addiu	$25, 12
+
+	# Compute GP.
+	.set noreorder
+	.cpload $25
 	.set reorder
-	subu	$29, 40
+
+	# Save slot call pc.
+	move	$2, $31
 	.cprestore 32
+
+	# Store function arguments from registers to stack
 	sw	$15, 36($29)
 	sw	$4, 16($29)
 	sw	$5, 20($29)
 	sw	$6, 24($29)
 	sw	$7, 28($29)
+
+	# Setup functions args and call __dl_runtime_resolve
 	move	$4, $24
 	move	$5, $3
-	jal     __dl_runtime_resolve
+	jal	__dl_runtime_resolve
+
+	# Restore function arguments from stack to registers
 	lw	$31, 36($29)
 	lw	$4, 16($29)
 	lw	$5, 20($29)
 	lw	$6, 24($29)
 	lw	$7, 28($29)
-	addu	$29, 40
+
+	# Do a tail call to the original function
+	addiu	$29, 40
 	move	$25, $2
 	jr	$25
-.size _dl_runtime_resolve,.-_dl_runtime_resolve
-.end _dl_runtime_resolve
+.end	_dl_runtime_resolve
+.previous
+

Modified: trunk/uClibc/libc/sysdeps/linux/mips/crt1.S
===================================================================
--- trunk/uClibc/libc/sysdeps/linux/mips/crt1.S	2005-06-09 20:21:05 UTC (rev 10497)
+++ trunk/uClibc/libc/sysdeps/linux/mips/crt1.S	2005-06-10 07:22:28 UTC (rev 10498)
@@ -70,12 +70,12 @@
 */
 
 .text
-	.global	__start
-	.type	__start,%function
-	.type	_init,%function
-	.type	_fini,%function
-	.type	main,%function
-	.type	__uClibc_main,%function
+	.globl	    __start
+	.type	    __start, at function
+	.type	    _init, at function
+	.type	    _fini, at function
+	.type	    main, at function
+	.type	    __uClibc_start_main, at function
 
 __start:
 #ifdef __PIC__
@@ -84,8 +84,8 @@
 	bal 10f			/* Find addr of cpload.  */
         nop
 10:
-	.cpload $31;
-	move $31, $0;
+	.cpload $31
+	move $31, $0
 	.set reorder
 #else
 	la $28, _gp             /* Setup GP correctly if we're non-PIC.  */
@@ -97,9 +97,9 @@
 	lw $5, 0($29)		/* argc */
 	addiu $6, $29, 4	/* argv  */
 
-	/* Allocate space on the stack for seven arguments (o32 only)
-	   and make sure the stack is aligned to double words (8 bytes)
-	   on o32 and quad words (16 bytes) on n32 and n64.  */
+	/* Allocate space on the stack for seven arguments and
+	 * make sure the stack is aligned to double words (8 bytes) */
+
 	and $29, -2 * 4
 	subu $29, 32
 	la $7, _init		/* init */




More information about the uClibc-cvs mailing list