Module Name:    src
Committed By:   matt
Date:           Sat Feb 26 17:11:23 UTC 2011

Modified Files:
        src/lib/csu/powerpc: crt0.c

Log Message:
When loading r13 and r2 with _SDA_BASE_ and _SDA2_BASE, do so in a PIC
manner.  With this change, simple programs can now run with MKPIE=yes


To generate a diff of this commit:
cvs rdiff -u -r1.27 -r1.28 src/lib/csu/powerpc/crt0.c

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

Modified files:

Index: src/lib/csu/powerpc/crt0.c
diff -u src/lib/csu/powerpc/crt0.c:1.27 src/lib/csu/powerpc/crt0.c:1.28
--- src/lib/csu/powerpc/crt0.c:1.27	Tue Feb 22 05:45:07 2011
+++ src/lib/csu/powerpc/crt0.c	Sat Feb 26 17:11:23 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: crt0.c,v 1.27 2011/02/22 05:45:07 joerg Exp $ */
+/* $NetBSD: crt0.c,v 1.28 2011/02/26 17:11:23 matt Exp $ */
 
 /*
  * Copyright (c) 1997 Jason R. Thorpe.
@@ -63,11 +63,17 @@
 	 * Initialize the Small Data Area registers.
 	 * _SDA_BASE is defined in the SVR4 ABI for PPC.
 	 * _SDA2_BASE is defined in the E[mbedded] ABI for PPC.
+	 *
+	 * Do the initialization in a PIC manner.
 	 */
-	__asm(  "lis %r13,rtld_SDA_BASE_@ha;"
-		"addi %r13,%r13,rtld_SDA_BASE_@l;"
-		"lis %r2,rtld_SDA2_BASE_@ha;"
-		"addi %r2,%r2,rtld_SDA2_BASE_@l" );
+	__asm(
+		"bcl 20,31,1f;"
+		"1: mflr 11;"
+		"addis 13,11,rtld_SDA_BASE_-1b@ha;"
+		"addi 13,13,rtld_SDA_BASE_-1b@l;"
+		"addis 2,11,rtld_SDA2_BASE_-1b@ha;"
+		"addi 2,2,rtld_SDA2_BASE_-1b@l"
+	    ::: "lr" );
 
 	if ((namep = argv[0]) != NULL) {	/* NULL ptr if argc = 0 */
 		if ((__progname = _strrchr(namep, '/')) == NULL)
@@ -101,7 +107,7 @@
  * NOTE: Leave the RCS ID _after_ __start(), in case it gets placed in .text.
  */
 #if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: crt0.c,v 1.27 2011/02/22 05:45:07 joerg Exp $");
+__RCSID("$NetBSD: crt0.c,v 1.28 2011/02/26 17:11:23 matt Exp $");
 #endif /* LIBC_SCCS and not lint */
 
 #include "common.c"

Reply via email to