Module Name: src
Committed By: matt
Date: Sun Jan 16 02:43:11 UTC 2011
Modified Files:
src/lib/libc/arch/powerpc: Makefile.inc
src/lib/libc/arch/powerpc/gen: swapcontext.S
src/lib/libc/arch/powerpc/string: bzero.S
src/lib/libc/arch/powerpc/sys: __clone.S brk.S cerror.S ptrace.S sbrk.S
Log Message:
Switch to the PIC_GOTSETUP/PIC_TOCSETUP macros for PIC code. Now libc
will be built to use secureplt by default.
To generate a diff of this commit:
cvs rdiff -u -r1.11 -r1.12 src/lib/libc/arch/powerpc/Makefile.inc
cvs rdiff -u -r1.5 -r1.6 src/lib/libc/arch/powerpc/gen/swapcontext.S
cvs rdiff -u -r1.8 -r1.9 src/lib/libc/arch/powerpc/string/bzero.S
cvs rdiff -u -r1.3 -r1.4 src/lib/libc/arch/powerpc/sys/__clone.S
cvs rdiff -u -r1.11 -r1.12 src/lib/libc/arch/powerpc/sys/brk.S
cvs rdiff -u -r1.7 -r1.8 src/lib/libc/arch/powerpc/sys/cerror.S
cvs rdiff -u -r1.5 -r1.6 src/lib/libc/arch/powerpc/sys/ptrace.S
cvs rdiff -u -r1.10 -r1.11 src/lib/libc/arch/powerpc/sys/sbrk.S
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/lib/libc/arch/powerpc/Makefile.inc
diff -u src/lib/libc/arch/powerpc/Makefile.inc:1.11 src/lib/libc/arch/powerpc/Makefile.inc:1.12
--- src/lib/libc/arch/powerpc/Makefile.inc:1.11 Sat Jan 15 07:31:12 2011
+++ src/lib/libc/arch/powerpc/Makefile.inc Sun Jan 16 02:43:10 2011
@@ -1,7 +1,8 @@
-# $NetBSD: Makefile.inc,v 1.11 2011/01/15 07:31:12 matt Exp $
+# $NetBSD: Makefile.inc,v 1.12 2011/01/16 02:43:10 matt Exp $
SRCS+= __sigaction14_sigtramp.c __sigtramp2.S
-CPPFLAGS+= -D_NOREGNAMES
+
+CPPFLAGS+= -I. -D_NOREGNAMES
.if defined(MKSOFTFLOAT) && (${MKSOFTFLOAT} != "no")
.include <softfloat/Makefile.inc>
Index: src/lib/libc/arch/powerpc/gen/swapcontext.S
diff -u src/lib/libc/arch/powerpc/gen/swapcontext.S:1.5 src/lib/libc/arch/powerpc/gen/swapcontext.S:1.6
--- src/lib/libc/arch/powerpc/gen/swapcontext.S:1.5 Sat Jan 15 07:31:12 2011
+++ src/lib/libc/arch/powerpc/gen/swapcontext.S Sun Jan 16 02:43:10 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: swapcontext.S,v 1.5 2011/01/15 07:31:12 matt Exp $ */
+/* $NetBSD: swapcontext.S,v 1.6 2011/01/16 02:43:10 matt Exp $ */
/*-
* Copyright (c) 2001 The NetBSD Foundation, Inc.
@@ -32,30 +32,39 @@
#include "SYS.h"
#include "assym.h"
-__RCSID("$NetBSD: swapcontext.S,v 1.5 2011/01/15 07:31:12 matt Exp $")
+__RCSID("$NetBSD: swapcontext.S,v 1.6 2011/01/16 02:43:10 matt Exp $")
-#define CALLFRAME_UCP (CALLFRAMELEN - 1*SZREG)
-#define CALLFRAME_OUCP (CALLFRAMELEN - 2*SZREG)
+#define XCALLFRAMELEN (((2+3)*SZREG + CALLFRAMELEN - 1) & -CALLFRAMELEN)
+#define XCALLFRAME_R30 (XCALLFRAMELEN-1*SZREG)
+#define XCALLFRAME_UCP (XCALLFRAMELEN-2*SZREG)
+#define XCALLFRAME_OUCP (XCALLFRAMELEN-3*SZREG)
ENTRY(swapcontext)
- stwu %r1,-CALLFRAMELEN(%r1) # set up new stack frame
+ stwu %r1,-XCALLFRAMELEN(%r1) # set up new stack frame
mflr %r0
- stw %r0,CALLFRAMELEN+CALLFRAME_LR(%r1) # save link register
- stw %r3,CALLFRAME_OUCP(%r1) # must save oucp
- stw %r4,CALLFRAME_UCP(%r1) # must save ucp
+ stw %r0,XCALLFRAMELEN+CALLFRAME_LR(%r1) # save link register
+ stw %r3,XCALLFRAME_OUCP(%r1) # must save oucp
+ stw %r4,XCALLFRAME_UCP(%r1) # must save ucp
+#ifdef PIC
+ stw %r30,XCALLFRAME_R30(%r1) # must save r30
+ PIC_TOCSETUP(swapcontext,%r30) # setup toc pointer
+#endif
bl PIC_PLT(_C_LABEL(_getcontext)) # getcontext(oucp)
cmpwi %r3,0
bne 1f
- lwz %r11,CALLFRAME_OUCP(%r1) # load oucp for adjustment
- lwz %r0,CALLFRAMELEN+CALLFRAME_LR(%r1)
+ lwz %r11,XCALLFRAME_OUCP(%r1) # load oucp for adjustment
+ lwz %r0,XCALLFRAMELEN+CALLFRAME_LR(%r1)
stw %r0,UC_GREGS_PC(%r11) # pc <- lr
- addi %r0,%r1,CALLFRAMELEN
- stw %r0,UC_GREGS_R1(%r11) # save adjusted sp
- lwz %r3,CALLFRAME_UCP(%r1) # load ucp
+ addi %r0,%r1,XCALLFRAMELEN
+ stw %r0,UC_GREGS_R1(%r11) # adjust sp
+ lwz %r3,XCALLFRAME_UCP(%r1) # load ucp
bl PIC_PLT(_C_LABEL(setcontext)) # setcontext(ucp)
1:
- lwz %r0,CALLFRAMELEN+CALLFRAME_LR(%r1)
+ lwz %r0,XCALLFRAMELEN+CALLFRAME_LR(%r1)
+#ifdef PIC
+ lwz %r30,XCALLFRAME_R30(%r1)
+#endif
mtlr %r0
- addi %r1,%r1,CALLFRAMELEN
+ addi %r1,%r1,XCALLFRAMELEN
blr
END(swapcontext)
Index: src/lib/libc/arch/powerpc/string/bzero.S
diff -u src/lib/libc/arch/powerpc/string/bzero.S:1.8 src/lib/libc/arch/powerpc/string/bzero.S:1.9
--- src/lib/libc/arch/powerpc/string/bzero.S:1.8 Sat Jan 15 07:31:12 2011
+++ src/lib/libc/arch/powerpc/string/bzero.S Sun Jan 16 02:43:10 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: bzero.S,v 1.8 2011/01/15 07:31:12 matt Exp $ */
+/* $NetBSD: bzero.S,v 1.9 2011/01/16 02:43:10 matt Exp $ */
/*-
* Copyright (C) 2001 Martin J. Laubach <[email protected]>
@@ -32,7 +32,7 @@
#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: bzero.S,v 1.8 2011/01/15 07:31:12 matt Exp $")
+__RCSID("$NetBSD: bzero.S,v 1.9 2011/01/16 02:43:10 matt Exp $")
#endif /* LIBC_SCCS && !lint */
#ifdef _KERNEL
@@ -76,8 +76,7 @@
/* First find out cache line size */
#ifdef PIC
mflr %r9
- bl _GLOBAL_OFFSET_TABLE_@local-4
- mflr %r10
+ PIC_GOTSETUP(%r10)
mtlr %r9
lwz %r5,cache_info@got(%r10)
#else
@@ -93,25 +92,34 @@
#define CPU_CACHELINE 1
#define CPU_CACHEINFO 5
-#define STKFRAME_SZ 48
+#define STKFRAME_SZ 64
#define MIB 8
#define OLDPLEN 16
#define R3_SAVE 20
#define R4_SAVE 24
#define R0_SAVE 28
#define R8_SAVE 32
+#define R31_SAVE 36
+#ifdef PIC
+#define R30_SAVE 40
+#endif
- mflr %r6
- stw %r6, 4(%r1)
+ stw %r9, 4(%r1)
stwu %r1, -STKFRAME_SZ(%r1)
+ stw %r31, R31_SAVE(%r1)
+ mr %r31, %r5 /* cache info */
+
+#ifdef PIC
+ stw %r30, R30_SAVE(%r1)
+ PIC_TOCSETUP(cb_memset,%r30)
+#endif
+
stw %r8, R8_SAVE(%r1)
stw %r3, R3_SAVE(%r1)
stw %r4, R4_SAVE(%r1)
stw %r0, R0_SAVE(%r1)
-
-
li %r0, CTL_MACHDEP /* Construct MIB */
stw %r0, MIB(%r1)
li %r0, CPU_CACHEINFO
@@ -133,7 +141,7 @@
/* Failure, try older sysctl */
- li %r0, CTL_MACHDEP /* Construct MIB */
+ li %r0, CTL_MACHDEP /* Construct MIB */
stw %r0, MIB(%r1)
li %r0, CPU_CACHELINE
stw %r0, MIB+4(%r1)
@@ -143,17 +151,7 @@
addi %r3, %r1, MIB
li %r4, 2 /* namelen */
-#ifdef PIC
- mflr %r9
- bl _GLOBAL_OFFSET_TABLE_@local-4
- mflr %r10
- mtlr %r9
- lwz %r5,cache_info@got(%r10)
- addi %r5, %r5, 4
-#else
- lis %r5,cache_info+4@h
- ori %r5,%r5,cache_info+4@l
-#endif
+ addi %r5, %r31, 4
addi %r6, %r1, OLDPLEN
li %r7, 0
li %r8, 0
@@ -163,15 +161,10 @@
lwz %r3, R3_SAVE(%r1)
lwz %r4, R4_SAVE(%r1)
lwz %r0, R0_SAVE(%r1)
-
+ lwz %r9, 4(%r31)
+ lwz %r31, R31_SAVE(%r1)
#ifdef PIC
- bl _GLOBAL_OFFSET_TABLE_@local-4
- mflr %r10
- lwz %r9, cache_info@got(%r10)
- lwz %r9, 4(%r9)
-#else
- lis %r5, cache_info+4@ha
- lwz %r9, cache_info+4@l(%r5)
+ lwz %r30, R30_SAVE(%r1)
#endif
la %r1, STKFRAME_SZ(%r1)
lwz %r5, 4(%r1)
Index: src/lib/libc/arch/powerpc/sys/__clone.S
diff -u src/lib/libc/arch/powerpc/sys/__clone.S:1.3 src/lib/libc/arch/powerpc/sys/__clone.S:1.4
--- src/lib/libc/arch/powerpc/sys/__clone.S:1.3 Sat Jan 15 07:31:12 2011
+++ src/lib/libc/arch/powerpc/sys/__clone.S Sun Jan 16 02:43:10 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: __clone.S,v 1.3 2011/01/15 07:31:12 matt Exp $ */
+/* $NetBSD: __clone.S,v 1.4 2011/01/16 02:43:10 matt Exp $ */
/*-
* Copyright (c) 2001 Tsubai Masanari. All rights reserved.
@@ -30,7 +30,7 @@
#include "SYS.h"
#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: __clone.S,v 1.3 2011/01/15 07:31:12 matt Exp $")
+__RCSID("$NetBSD: __clone.S,v 1.4 2011/01/16 02:43:10 matt Exp $")
#endif /* LIBC_SCCS && !lint */
#ifdef WEAK_ALIAS
@@ -61,6 +61,9 @@
mr %r3,%r6 /* arg */
blrl /* Call the clone's entry point. */
+#ifdef PIC
+ PIC_TOCSETUP(__clone, %r30) /* exit won't return so blow away r30 */
+#endif
bl PIC_PLT(_C_LABEL(_exit))
1:
Index: src/lib/libc/arch/powerpc/sys/brk.S
diff -u src/lib/libc/arch/powerpc/sys/brk.S:1.11 src/lib/libc/arch/powerpc/sys/brk.S:1.12
--- src/lib/libc/arch/powerpc/sys/brk.S:1.11 Sat Jan 15 07:31:12 2011
+++ src/lib/libc/arch/powerpc/sys/brk.S Sun Jan 16 02:43:10 2011
@@ -1,9 +1,9 @@
-/* $NetBSD: brk.S,v 1.11 2011/01/15 07:31:12 matt Exp $ */
+/* $NetBSD: brk.S,v 1.12 2011/01/16 02:43:10 matt Exp $ */
#include "SYS.h"
#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: brk.S,v 1.11 2011/01/15 07:31:12 matt Exp $")
+__RCSID("$NetBSD: brk.S,v 1.12 2011/01/16 02:43:10 matt Exp $")
#endif /* LIBC_SCCS && !lint */
.globl _C_LABEL(__curbrk)
@@ -19,12 +19,10 @@
.long _C_LABEL(_end) # XXX not used yet
.text
-
ENTRY(_brk)
-#ifdef PIC
+#if defined(PIC)
mflr %r10
- bl _GLOBAL_OFFSET_TABLE_@local-4
- mflr %r9
+ PIC_GOTSETUP(%r9)
mtlr %r10
lwz %r5,_C_LABEL(_end)@got(%r9)
#else
Index: src/lib/libc/arch/powerpc/sys/cerror.S
diff -u src/lib/libc/arch/powerpc/sys/cerror.S:1.7 src/lib/libc/arch/powerpc/sys/cerror.S:1.8
--- src/lib/libc/arch/powerpc/sys/cerror.S:1.7 Sat Jan 15 07:31:13 2011
+++ src/lib/libc/arch/powerpc/sys/cerror.S Sun Jan 16 02:43:10 2011
@@ -1,10 +1,10 @@
-/* $NetBSD: cerror.S,v 1.7 2011/01/15 07:31:13 matt Exp $ */
+/* $NetBSD: cerror.S,v 1.8 2011/01/16 02:43:10 matt Exp $ */
#include "SYS.h"
#include "assym.h"
#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: cerror.S,v 1.7 2011/01/15 07:31:13 matt Exp $")
+__RCSID("$NetBSD: cerror.S,v 1.8 2011/01/16 02:43:10 matt Exp $")
#endif /* LIBC_SCCS && !lint */
#ifndef _REENTRANT
@@ -19,19 +19,25 @@
mflr %r0
stwu %r1,-CALLFRAMELEN(%r1) # allocate new stack frame
stw %r0,CALLFRAMELEN+CALLFRAME_LR(%r1)
+#ifdef PIC
+ stw %r30,CALLFRAME_R30(%r1)
+ PIC_TOCSETUP(__cerror, %r30)
+#endif
stw %r31,CALLFRAME_R31(%r1)
- mr %r31,%r3 # stash away in callee-saved register
+ mr %r31,%r3 # stash away in callee-saved register
bl PIC_PLT(_C_LABEL(__errno))
stw %r31,0(%r3)
lwz %r0,CALLFRAMELEN+CALLFRAME_LR(%r1)
lwz %r31,CALLFRAME_R31(%r1)
+#ifdef PIC
+ lwz %r30,CALLFRAME_R30(%r1)
+#endif
mtlr %r0
addi %r1,%r1,CALLFRAMELEN
#else
#ifdef PIC
mflr %r10
- bl _GLOBAL_OFFSET_TABLE_@local-4
- mflr %r4
+ PIC_GOTSETUP(%r4)
lwz %r4,_C_LABEL(errno)@got(%r4)
stw %r3,0(%r4)
mtlr %r10
Index: src/lib/libc/arch/powerpc/sys/ptrace.S
diff -u src/lib/libc/arch/powerpc/sys/ptrace.S:1.5 src/lib/libc/arch/powerpc/sys/ptrace.S:1.6
--- src/lib/libc/arch/powerpc/sys/ptrace.S:1.5 Sat Jan 15 07:31:13 2011
+++ src/lib/libc/arch/powerpc/sys/ptrace.S Sun Jan 16 02:43:10 2011
@@ -1,17 +1,18 @@
-/* $NetBSD: ptrace.S,v 1.5 2011/01/15 07:31:13 matt Exp $ */
+/* $NetBSD: ptrace.S,v 1.6 2011/01/16 02:43:10 matt Exp $ */
#include "SYS.h"
#include "assym.h"
#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: ptrace.S,v 1.5 2011/01/15 07:31:13 matt Exp $")
+__RCSID("$NetBSD: ptrace.S,v 1.6 2011/01/16 02:43:10 matt Exp $")
#endif /* LIBC_SCCS && !lint */
-#define XCALLFRAMELEN ((((2+4)*SZREG) + CALLFRAMELEN - 1) & -CALLFRAMELEN)
+#define XCALLFRAMELEN ((((2+5)*SZREG) + CALLFRAMELEN - 1) & -CALLFRAMELEN)
#define XCALLFRAME_DATA (XCALLFRAMELEN - 1*SZREG)
#define XCALLFRAME_ADDR (XCALLFRAMELEN - 2*SZREG)
#define XCALLFRAME_PID (XCALLFRAMELEN - 3*SZREG)
#define XCALLFRAME_REQUEST (XCALLFRAMELEN - 4*SZREG)
+#define XCALLFRAME_R30 (XCALLFRAMELEN - 5*SZREG)
ENTRY(ptrace)
#ifdef _REENTRANT
@@ -22,11 +23,18 @@
stw %r4,XCALLFRAME_PID(%r1)
stw %r5,XCALLFRAME_ADDR(%r1)
stw %r6,XCALLFRAME_DATA(%r1)
+#ifdef PIC
+ stw %r30,XCALLFRAME_R30(%r1)
+ PIC_TOCSETUP(ptrace, %r30)
+#endif
bl PIC_PLT(_C_LABEL(__errno))
li %r7,0
stw %r7,0(%r3)
+#ifdef PIC
+ lwz %r30,XCALLFRAME_R30(%r1)
+#endif
lwz %r6,XCALLFRAME_DATA(%r1)
lwz %r4,XCALLFRAME_PID(%r1)
lwz %r5,XCALLFRAME_ADDR(%r1)
@@ -37,8 +45,7 @@
#else
#ifdef PIC
mflr %r0
- bl _GLOBAL_OFFSET_TABLE_@local-4
- mflr %r7
+ PIC_GOTSETUP(%r7)
lwz %r7,_C_LABEL(errno)@got(%r7)
li %r8,0
stw %r8,0(%r7)
@@ -50,8 +57,5 @@
#endif /* PIC */
#endif /* _REENTRANT */
_DOSYSCALL(ptrace)
- bso 1f
- blr
-1:
+ bnslr
b _C_LABEL(__cerror)
-END(ptrace)
Index: src/lib/libc/arch/powerpc/sys/sbrk.S
diff -u src/lib/libc/arch/powerpc/sys/sbrk.S:1.10 src/lib/libc/arch/powerpc/sys/sbrk.S:1.11
--- src/lib/libc/arch/powerpc/sys/sbrk.S:1.10 Sat Jan 15 07:31:13 2011
+++ src/lib/libc/arch/powerpc/sys/sbrk.S Sun Jan 16 02:43:10 2011
@@ -1,9 +1,9 @@
-/* $NetBSD: sbrk.S,v 1.10 2011/01/15 07:31:13 matt Exp $ */
+/* $NetBSD: sbrk.S,v 1.11 2011/01/16 02:43:10 matt Exp $ */
#include "SYS.h"
#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: sbrk.S,v 1.10 2011/01/15 07:31:13 matt Exp $")
+__RCSID("$NetBSD: sbrk.S,v 1.11 2011/01/16 02:43:10 matt Exp $")
#endif /* LIBC_SCCS && !lint */
.globl _C_LABEL(__curbrk)
@@ -21,8 +21,7 @@
ENTRY(_sbrk)
#ifdef PIC
mflr %r10
- bl _GLOBAL_OFFSET_TABLE_@local-4
- mflr %r5
+ PIC_GOTSETUP(%r5)
mtlr %r10
lwz %r5,_C_LABEL(__curbrk)@got(%r5)
lwz %r6,0(%r5)