Module Name:    src
Committed By:   matt
Date:           Wed Sep  2 17:46:48 UTC 2009

Modified Files:
        src/libexec/ld.elf_so/arch/mips [matt-nb5-mips64]: rtld_start.S

Log Message:
Fix a typo and make dynamic libraries work on N32 (and N64?)


To generate a diff of this commit:
cvs rdiff -u -r1.9.44.2 -r1.9.44.3 \
    src/libexec/ld.elf_so/arch/mips/rtld_start.S

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/libexec/ld.elf_so/arch/mips/rtld_start.S
diff -u src/libexec/ld.elf_so/arch/mips/rtld_start.S:1.9.44.2 src/libexec/ld.elf_so/arch/mips/rtld_start.S:1.9.44.3
--- src/libexec/ld.elf_so/arch/mips/rtld_start.S:1.9.44.2	Wed Sep  2 15:49:42 2009
+++ src/libexec/ld.elf_so/arch/mips/rtld_start.S	Wed Sep  2 17:46:48 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: rtld_start.S,v 1.9.44.2 2009/09/02 15:49:42 matt Exp $	*/
+/*	$NetBSD: rtld_start.S,v 1.9.44.3 2009/09/02 17:46:48 matt Exp $	*/
 
 /*
  * Copyright 1997 Michael L. Hitch <[email protected]>
@@ -33,14 +33,18 @@
 .globl _C_LABEL(_rtld_relocate_nonplt_self)
 .globl _C_LABEL(_rtld)
 
+#define	PTR_SIZE	(1<<PTR_SCALESHIFT)
+
 LEAF(rtld_start)
+	.frame	sp, 4*PTR_SIZE, ra
+	.mask	0x10090000,-PTR_SIZE
 	.set	noreorder
 	SETUP_GP
-	PTR_SUBU sp, 2*SZREG		# adjust stack pointer
+	PTR_SUBU sp, 4*PTR_SIZE		# adjust stack pointer
 	SETUP_GP64(s4, rtld_start)
-	SAVE_GP(s4)
-					# -> 0*SZREG(sp) for atexit
-					# -> 1*SZREG(sp) for obj_main
+	SAVE_GP(0)
+					# -> 1*PTR_SIZE(sp) for atexit
+					# -> 2*PTR_SIZE(sp) for obj_main
 	move	s0, a0			# save stack pointer from a0
 	move	s3, a3			# save ps_strings pointer
 
@@ -48,20 +52,20 @@
 	bal	1f
 	 PTR_LA	t9, _C_LABEL(_rtld_relocate_nonplt_self)
 1:	PTR_SUBU a1, ra, a1		# relocbase
-	move	s2,a1
+	move	s2, a1			# save for _rtld
 	PTR_LA	a0,_DYNAMIC
 	PTR_ADDU t9, a1, t9
 	jalr	t9			# _rtld_relocate_nonplt_self(dynp, relocabase)
 	 PTR_ADDU a0, a1, a0		# &_DYNAMIC
 
 	move	a1, s2			# relocbase
-	move	a0, sp			# sp
+	PTR_ADDU a0, sp, 2*PTR_SIZE	# sp
 	jal	_C_LABEL(_rtld)		# v0 = _rtld(sp, relocbase)
 	 nop
 
-	PTR_L	a1, 0*SZREG(sp)		# our atexit function
-	PTR_L	a2, 1*SZREG(sp)		# obj_main entry
-	PTR_ADDU sp, 2*SZREG		# readjust stack
+	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
 	jr	t9			# _start(sp, cleanup, obj);
@@ -87,8 +91,9 @@
 	.globl	_rtld_bind_start
 	.ent	_rtld_bind_start
 _rtld_bind_start:
-#if defined(__mips_o32) || defined(__mips_o64)
+	.frame	sp, XCALLFRAME_SIZ, $15
 	move	v1, gp			# save old GP
+#if defined(__mips_o32) || defined(__mips_o64)
 	PTR_ADDU t9, 8			# modify T9 to point at .cpload
 #endif
 	SETUP_GP
@@ -106,7 +111,7 @@
 	REG_S	a2,  XCALLFRAME_A2(sp)
 	REG_S	a3,  XCALLFRAME_A3(sp)
 	REG_S	$15,  XCALLFRAME_RA(sp)	# ra is in t7/t3
-	REG_S	s0,  XCALLFRAME_SP(sp)
+	REG_S	s0,  XCALLFRAME_S0(sp)
 	move	s0, sp
 	move	a0, t8			# symbol index
 	move	a1, $15			# old RA

Reply via email to