~ubuntu-branches/ubuntu/natty/eglibc/natty-security

« back to all changes in this revision

Viewing changes to ports/sysdeps/unix/sysv/linux/hppa/getcontext.S

  • Committer: Bazaar Package Importer
  • Author(s): Aurelien Jarno
  • Date: 2009-05-05 09:54:14 UTC
  • Revision ID: james.westby@ubuntu.com-20090505095414-c45qsg9ixjheohru
ImportĀ upstreamĀ versionĀ 2.9

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* Get current user context.
 
2
   Copyright (C) 2008 Free Software Foundation, Inc.
 
3
   This file is part of the GNU C Library.
 
4
   Contributed by Helge Deller <deller@gmx.de>, 2008.
 
5
 
 
6
   The GNU C Library is free software; you can redistribute it and/or
 
7
   modify it under the terms of the GNU Lesser General Public
 
8
   License as published by the Free Software Foundation; either
 
9
   version 2.1 of the License, or (at your option) any later version.
 
10
 
 
11
   The GNU C Library is distributed in the hope that it will be useful,
 
12
   but WITHOUT ANY WARRANTY; without even the implied warranty of
 
13
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 
14
   Lesser General Public License for more details.
 
15
 
 
16
   You should have received a copy of the GNU Lesser General Public
 
17
   License along with the GNU C Library; if not, write to the Free
 
18
   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
 
19
   02111-1307 USA.  */
 
20
 
 
21
#include <sysdep.h>
 
22
 
 
23
#include "ucontext_i.h"
 
24
 
 
25
 
 
26
        /* Trampoline function.  */
 
27
        /* Can not use ENTRY(__getcontext_ret) here.  */
 
28
        .type   __getcontext_ret, @function
 
29
        .hidden __getcontext_ret
 
30
__getcontext_ret:
 
31
        .proc
 
32
        .callinfo FRAME=0,NO_CALLS
 
33
        copy    %r23, %r3
 
34
        copy    %r24, %r4
 
35
        copy    %r25, %r5
 
36
        copy    %r26, %r6
 
37
        bv      0(%r20)
 
38
        copy    %r0, %ret0
 
39
        .procend
 
40
        .size   __getcontext_ret, .-__getcontext_ret
 
41
 
 
42
 
 
43
ENTRY(__getcontext)
 
44
        /* Save the registers.  */
 
45
        stw     %r0, oR0(%r26)
 
46
        stw     %r1, oR1(%r26)
 
47
        /* stw  %r2, oR2(%r26) - used for trampoline.  */
 
48
        stw     %r3, oR3(%r26)
 
49
        stw     %r4, oR4(%r26)
 
50
        stw     %r5, oR5(%r26)
 
51
        stw     %r6, oR6(%r26)
 
52
        stw     %r7, oR7(%r26)
 
53
        stw     %r8, oR8(%r26)
 
54
        stw     %r9, oR9(%r26)
 
55
        stw     %r10, oR10(%r26)
 
56
        stw     %r11, oR11(%r26)
 
57
        stw     %r12, oR12(%r26)
 
58
        stw     %r13, oR13(%r26)
 
59
        stw     %r14, oR14(%r26)
 
60
        stw     %r15, oR15(%r26)
 
61
        stw     %r16, oR16(%r26)
 
62
        stw     %r17, oR17(%r26)
 
63
        stw     %r18, oR18(%r26)
 
64
        stw     %r19, oR19(%r26)
 
65
        /* stw  %r20, oR20(%r26) - used for trampoline.  */
 
66
        stw     %r21, oR21(%r26)
 
67
        stw     %r22, oR22(%r26)
 
68
        /* stw  %r23, oR23(%r26) - used for trampoline.  */
 
69
        /* stw  %r24, oR24(%r26) - used for trampoline.  */
 
70
        /* stw  %r25, oR25(%r26) - used for trampoline.  */
 
71
        /* stw  %r26, oR26(%r26) - used for trampoline.  */
 
72
        stw     %r27, oR27(%r26)
 
73
        stw     %r28, oR28(%r26)
 
74
        stw     %r29, oR29(%r26)
 
75
        ldo     -64(%sp), %r1   /* Calculate %sp in %r1.  */
 
76
        stw     %r1, oR30(%r26) /* Save new %sp.  */
 
77
        stw     %r31, oR31(%r26)
 
78
 
 
79
        stw     %r0, oUC_FLAGS(%r26)
 
80
        /* stw  %r0, oUC_LINK(%r26) - Do not overwrite.  */
 
81
        stw     %r1, oSS_SP(%r26)
 
82
        stw     %r0, oSS_FLAGS(%r26)
 
83
        stw     %r0, oSS_SIZE(%r26)
 
84
 
 
85
        stw     %r0, oSC_FLAGS(%r26)
 
86
 
 
87
        stw     %r0, oIASQ0(%r26)
 
88
        stw     %r0, oIASQ1(%r26)
 
89
        stw     %r0, oIAOQ0(%r26)
 
90
        stw     %r0, oIAOQ1(%r26)
 
91
        stw     %r0, oSAR(%r26) /* used as flag in swapcontext().  */
 
92
 
 
93
 
 
94
        /* Store floating-point regs.  */
 
95
        ldo     oFPREGS0(%r26),%r1
 
96
        fstds,ma %fr0, 8(%r1)
 
97
        fstds,ma %fr1, 8(%r1)
 
98
        fstds,ma %fr2, 8(%r1)
 
99
        fstds,ma %fr3, 8(%r1)
 
100
        fstds,ma %fr4, 8(%r1)
 
101
        fstds,ma %fr5, 8(%r1)
 
102
        fstds,ma %fr6, 8(%r1)
 
103
        fstds,ma %fr7, 8(%r1)
 
104
        fstds,ma %fr8, 8(%r1)
 
105
        fstds,ma %fr9, 8(%r1)
 
106
        fstds,ma %fr10, 8(%r1)
 
107
        fstds,ma %fr11, 8(%r1)
 
108
        fstds,ma %fr12, 8(%r1)
 
109
        fstds,ma %fr13, 8(%r1)
 
110
        fstds,ma %fr14, 8(%r1)
 
111
        fstds,ma %fr15, 8(%r1)
 
112
        fstds,ma %fr16, 8(%r1)
 
113
        fstds,ma %fr17, 8(%r1)
 
114
        fstds,ma %fr18, 8(%r1)
 
115
        fstds,ma %fr19, 8(%r1)
 
116
        fstds,ma %fr20, 8(%r1)
 
117
        fstds,ma %fr21, 8(%r1)
 
118
        fstds,ma %fr22, 8(%r1)
 
119
        fstds,ma %fr23, 8(%r1)
 
120
        fstds,ma %fr24, 8(%r1)
 
121
        fstds,ma %fr25, 8(%r1)
 
122
        fstds,ma %fr26, 8(%r1)
 
123
        fstds,ma %fr27, 8(%r1)
 
124
        fstds,ma %fr28, 8(%r1)
 
125
        fstds,ma %fr29, 8(%r1)
 
126
        fstds,ma %fr30, 8(%r1)
 
127
        fstds    %fr31, 0(%r1)
 
128
 
 
129
        /* Prologue */
 
130
        stwm    %r4, 64(%r30)
 
131
#ifdef PIC
 
132
        stw     %r19, -32(%r30)
 
133
#endif
 
134
 
 
135
        /* Set up the trampoline registers.
 
136
           r20, r23, r24, r25, r26 and r2 are clobbered
 
137
           by call to getcontext() anyway. Reuse them.  */
 
138
        stw     %r2, oR20(%r26)
 
139
        stw     %r3, oR23(%r26)
 
140
        stw     %r4, oR24(%r26)
 
141
        stw     %r5, oR25(%r26)
 
142
        stw     %r6, oR26(%r26)
 
143
        ldil    L%__getcontext_ret, %r1
 
144
        ldo     R%__getcontext_ret(%r1), %r1
 
145
        stw     %r1, oR2(%r26)
 
146
 
 
147
        /* Save the current signal mask.  */
 
148
        /* sigprocmask(SIG_BLOCK, NULL, &ucp->uc_sigmask);  */
 
149
        ldo     oSIGMASK(%r26), %r24
 
150
        copy    %r0, %r25
 
151
        bl      sigprocmask, %r2
 
152
        ldi     SIG_BLOCK, %r26
 
153
 
 
154
        /* Epilogue */
 
155
        ldw     -84(%r30), %r2
 
156
#ifdef PIC
 
157
        ldw     -96(%r30), %r19
 
158
#endif
 
159
        bv      %r0(%r2)
 
160
        ldwm    -64(%r30), %r4
 
161
END(__getcontext)
 
162
 
 
163
weak_alias (__getcontext, getcontext)