Tue Mar 13 17:27:39 2018 UTC ()
Pull up following revision(s) (requested by uwe in ticket #1534):
	lib/libc/arch/powerpc/genassym.cf: 1.5 via patch
	lib/libc/arch/powerpc/gen/swapcontext.S: 1.8 via patch
PIC code clobbers %r30 so we need to update the saved oucp with
caller's %r30 manually.  Makes old context happy when it needs to do
more function calls after restore.


(snj)
diff -r1.3 -r1.3.8.1 src/lib/libc/arch/powerpc/genassym.cf
diff -r1.6 -r1.6.8.1 src/lib/libc/arch/powerpc/gen/swapcontext.S

cvs diff -r1.3 -r1.3.8.1 src/lib/libc/arch/powerpc/genassym.cf (expand / switch to unified diff)

--- src/lib/libc/arch/powerpc/genassym.cf 2011/01/18 01:23:24 1.3
+++ src/lib/libc/arch/powerpc/genassym.cf 2018/03/13 17:27:39 1.3.8.1
@@ -1,14 +1,14 @@ @@ -1,14 +1,14 @@
1# $NetBSD: genassym.cf,v 1.3 2011/01/18 01:23:24 matt Exp $ 1# $NetBSD: genassym.cf,v 1.3.8.1 2018/03/13 17:27:39 snj Exp $
2 2
3# 3#
4# Copyright (c) 2001 The NetBSD Foundation, Inc. 4# Copyright (c) 2001 The NetBSD Foundation, Inc.
5# All rights reserved. 5# All rights reserved.
6# 6#
7# This code is derived from software contributed to The NetBSD Foundation 7# This code is derived from software contributed to The NetBSD Foundation
8# by Matt Thomas <matt@3am-sfotware.com>. 8# by Matt Thomas <matt@3am-sfotware.com>.
9# 9#
10# Redistribution and use in source and binary forms, with or without 10# Redistribution and use in source and binary forms, with or without
11# modification, are permitted provided that the following conditions 11# modification, are permitted provided that the following conditions
12# are met: 12# are met:
13# 1. Redistributions of source code must retain the above copyright 13# 1. Redistributions of source code must retain the above copyright
14# notice, this list of conditions and the following disclaimer. 14# notice, this list of conditions and the following disclaimer.
@@ -32,17 +32,18 @@ @@ -32,17 +32,18 @@
32include <sys/types.h> 32include <sys/types.h>
33include <sys/signal.h> 33include <sys/signal.h>
34include <sys/ucontext.h> 34include <sys/ucontext.h>
35 35
36include <machine/frame.h> 36include <machine/frame.h>
37 37
38define CALLFRAMELEN sizeof(struct callframe) 38define CALLFRAMELEN sizeof(struct callframe)
39define CALLFRAME_LR offsetof(struct callframe, cf_lr) 39define CALLFRAME_LR offsetof(struct callframe, cf_lr)
40define CALLFRAME_R30 offsetof(struct callframe, cf_r30) 40define CALLFRAME_R30 offsetof(struct callframe, cf_r30)
41define CALLFRAME_R31 offsetof(struct callframe, cf_r31) 41define CALLFRAME_R31 offsetof(struct callframe, cf_r31)
42 42
43define UC_GREGS_R1 offsetof(ucontext_t, uc_mcontext.__gregs[_REG_R1]) 43define UC_GREGS_R1 offsetof(ucontext_t, uc_mcontext.__gregs[_REG_R1])
44define UC_GREGS_R3 offsetof(ucontext_t, uc_mcontext.__gregs[_REG_R3]) 44define UC_GREGS_R3 offsetof(ucontext_t, uc_mcontext.__gregs[_REG_R3])
 45define UC_GREGS_R30 offsetof(ucontext_t, uc_mcontext.__gregs[_REG_R30])
45define UC_GREGS_PC offsetof(ucontext_t, uc_mcontext.__gregs[_REG_PC]) 46define UC_GREGS_PC offsetof(ucontext_t, uc_mcontext.__gregs[_REG_PC])
46 47
47define SIG_BLOCK SIG_BLOCK 48define SIG_BLOCK SIG_BLOCK
48define SIG_SETMASK SIG_SETMASK 49define SIG_SETMASK SIG_SETMASK

cvs diff -r1.6 -r1.6.8.1 src/lib/libc/arch/powerpc/gen/swapcontext.S (expand / switch to unified diff)

--- src/lib/libc/arch/powerpc/gen/swapcontext.S 2011/01/16 02:43:10 1.6
+++ src/lib/libc/arch/powerpc/gen/swapcontext.S 2018/03/13 17:27:39 1.6.8.1
@@ -1,14 +1,14 @@ @@ -1,14 +1,14 @@
1/* $NetBSD: swapcontext.S,v 1.6 2011/01/16 02:43:10 matt Exp $ */ 1/* $NetBSD: swapcontext.S,v 1.6.8.1 2018/03/13 17:27:39 snj Exp $ */
2 2
3/*- 3/*-
4 * Copyright (c) 2001 The NetBSD Foundation, Inc. 4 * Copyright (c) 2001 The NetBSD Foundation, Inc.
5 * All rights reserved. 5 * All rights reserved.
6 * 6 *
7 * This code is derived from software contributed to The NetBSD Foundation 7 * This code is derived from software contributed to The NetBSD Foundation
8 * by Klaus Klein. 8 * by Klaus Klein.
9 * 9 *
10 * Redistribution and use in source and binary forms, with or without 10 * Redistribution and use in source and binary forms, with or without
11 * modification, are permitted provided that the following conditions 11 * modification, are permitted provided that the following conditions
12 * are met: 12 * are met:
13 * 1. Redistributions of source code must retain the above copyright 13 * 1. Redistributions of source code must retain the above copyright
14 * notice, this list of conditions and the following disclaimer. 14 * notice, this list of conditions and the following disclaimer.
@@ -22,49 +22,53 @@ @@ -22,49 +22,53 @@
22 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 22 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
23 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 23 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 24 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 25 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 26 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 27 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 28 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29 * POSSIBILITY OF SUCH DAMAGE. 29 * POSSIBILITY OF SUCH DAMAGE.
30 */ 30 */
31 31
32#include "SYS.h" 32#include "SYS.h"
33#include "assym.h" 33#include "assym.h"
34 34
35__RCSID("$NetBSD: swapcontext.S,v 1.6 2011/01/16 02:43:10 matt Exp $") 35__RCSID("$NetBSD: swapcontext.S,v 1.6.8.1 2018/03/13 17:27:39 snj Exp $")
36 36
37#define XCALLFRAMELEN (((2+3)*SZREG + CALLFRAMELEN - 1) & -CALLFRAMELEN) 37#define XCALLFRAMELEN (((2+3)*SZREG + CALLFRAMELEN - 1) & -CALLFRAMELEN)
38#define XCALLFRAME_R30 (XCALLFRAMELEN-1*SZREG) 38#define XCALLFRAME_R30 (XCALLFRAMELEN-1*SZREG)
39#define XCALLFRAME_UCP (XCALLFRAMELEN-2*SZREG) 39#define XCALLFRAME_UCP (XCALLFRAMELEN-2*SZREG)
40#define XCALLFRAME_OUCP (XCALLFRAMELEN-3*SZREG) 40#define XCALLFRAME_OUCP (XCALLFRAMELEN-3*SZREG)
41 41
42ENTRY(swapcontext) 42ENTRY(swapcontext)
43 stwu %r1,-XCALLFRAMELEN(%r1) # set up new stack frame 43 stwu %r1,-XCALLFRAMELEN(%r1) # set up new stack frame
44 mflr %r0 44 mflr %r0
45 stw %r0,XCALLFRAMELEN+CALLFRAME_LR(%r1) # save link register 45 stw %r0,XCALLFRAMELEN+CALLFRAME_LR(%r1) # save link register
46 stw %r3,XCALLFRAME_OUCP(%r1) # must save oucp 46 stw %r3,XCALLFRAME_OUCP(%r1) # must save oucp
47 stw %r4,XCALLFRAME_UCP(%r1) # must save ucp 47 stw %r4,XCALLFRAME_UCP(%r1) # must save ucp
48#ifdef PIC 48#ifdef PIC
49 stw %r30,XCALLFRAME_R30(%r1) # must save r30 49 stw %r30,XCALLFRAME_R30(%r1) # must save r30
50 PIC_TOCSETUP(swapcontext,%r30) # setup toc pointer 50 PIC_TOCSETUP(swapcontext,%r30) # setup toc pointer
51#endif 51#endif
52 bl PIC_PLT(_C_LABEL(_getcontext)) # getcontext(oucp) 52 bl PIC_PLT(_C_LABEL(_getcontext)) # getcontext(oucp)
53 cmpwi %r3,0 53 cmpwi %r3,0
54 bne 1f 54 bne 1f
55 lwz %r11,XCALLFRAME_OUCP(%r1) # load oucp for adjustment 55 lwz %r11,XCALLFRAME_OUCP(%r1) # load oucp for adjustment
56 lwz %r0,XCALLFRAMELEN+CALLFRAME_LR(%r1) 56 lwz %r0,XCALLFRAMELEN+CALLFRAME_LR(%r1)
57 stw %r0,UC_GREGS_PC(%r11) # pc <- lr 57 stw %r0,UC_GREGS_PC(%r11) # pc <- lr
58 addi %r0,%r1,XCALLFRAMELEN 58 addi %r0,%r1,XCALLFRAMELEN
59 stw %r0,UC_GREGS_R1(%r11) # adjust sp 59 stw %r0,UC_GREGS_R1(%r11) # adjust sp
 60#ifdef PIC
 61 lwz %r0,XCALLFRAME_R30(%r1)
 62 stw %r0,UC_GREGS_R30(%r11) # caller's r30
 63#endif
60 lwz %r3,XCALLFRAME_UCP(%r1) # load ucp 64 lwz %r3,XCALLFRAME_UCP(%r1) # load ucp
61 bl PIC_PLT(_C_LABEL(setcontext)) # setcontext(ucp) 65 bl PIC_PLT(_C_LABEL(setcontext)) # setcontext(ucp)
621: 661:
63 lwz %r0,XCALLFRAMELEN+CALLFRAME_LR(%r1) 67 lwz %r0,XCALLFRAMELEN+CALLFRAME_LR(%r1)
64#ifdef PIC 68#ifdef PIC
65 lwz %r30,XCALLFRAME_R30(%r1) 69 lwz %r30,XCALLFRAME_R30(%r1)
66#endif 70#endif
67 mtlr %r0 71 mtlr %r0
68 addi %r1,%r1,XCALLFRAMELEN 72 addi %r1,%r1,XCALLFRAMELEN
69 blr 73 blr
70END(swapcontext) 74END(swapcontext)