Author: gonzo
Date: Mon Mar 12 20:24:59 2012
New Revision: 232884
URL: http://svn.freebsd.org/changeset/base/232884

Log:
  - Although we pass first 4 arguments in registers, function callinf ABI 
requires
     space to be reserved for them in stack. _rtld() prologue saves a1 and a2 in
     this space.
  
  - Whitespace cleanup while I'm at it

Modified:
  head/libexec/rtld-elf/mips/rtld_start.S

Modified: head/libexec/rtld-elf/mips/rtld_start.S
==============================================================================
--- head/libexec/rtld-elf/mips/rtld_start.S     Mon Mar 12 19:29:35 2012        
(r232883)
+++ head/libexec/rtld-elf/mips/rtld_start.S     Mon Mar 12 20:24:59 2012        
(r232884)
@@ -58,28 +58,30 @@ LEAF(rtld_start)
 
        PTR_LA  a1, 1f
        bal     1f
-        PTR_LA t0, _C_LABEL(_rtld_relocate_nonplt_self)
+       PTR_LA  t0, _C_LABEL(_rtld_relocate_nonplt_self)
 1:     PTR_SUBU a1, ra, a1             /* relocbase */
        PTR_LA  a0, _DYNAMIC
        PTR_ADDU t9, a1, t0
        jalr    t9                      /* _rtld_relocate_nonplt_self(dynp, 
relocabase) */
-        PTR_ADDU a0, a1, a0            /* &_DYNAMIC */
+       PTR_ADDU a0, a1, a0             /* &_DYNAMIC */
 
        move    a0, s0                  /* sp */
        PTR_ADDU a1, sp, 2*PTR_SIZE     /* &our atexit function */
        PTR_ADDU a2, sp, 3*PTR_SIZE     /* obj_main entry */
+       subu    sp, 4*SZREG             /* ABI requires to reserve memory for 4 
regs */
        PTR_LA  t9, _C_LABEL(_rtld)
        jalr    t9                      /* v0 = _rtld(sp, cleanup, objp) */
-        nop
+       nop
+       addu    sp, 4*SZREG
 
        PTR_L   a1, 2*PTR_SIZE(sp)      /* our atexit function */
        PTR_L   a2, 3*PTR_SIZE(sp)      /* obj_main entry */
        PTR_ADDU sp, 4*PTR_SIZE         /* readjust stack */
        move    a0, s0                  /* stack pointer */
        move    t9, v0
+       subu    sp, 4*SZREG             /* ABI requires to reserve memory for 4 
regs */
        jr      t9                      /* _start(sp, cleanup, obj); */
-        move   a3, s3                  /* restore ps_strings */
-
+       move    a3, s3                  /* restore ps_strings */
 END(rtld_start)
 
 #define        XCALLFRAME_SIZ          (12*SZREG)
@@ -140,7 +142,7 @@ _rtld_bind_start:
 
        PTR_LA  t9, _C_LABEL(_mips_rtld_bind)
        jalr    t9
-        nop
+       nop
 
        move    sp, s0
        REG_L   ra, XCALLFRAME_RA(sp)
@@ -159,5 +161,5 @@ _rtld_bind_start:
        PTR_ADDU sp, XCALLFRAME_SIZ
        move    t9, v0
        jr      t9
-        nop
+       nop
 END(_rtld_bind_start)
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to