~ubuntu-branches/ubuntu/precise/eglibc/precise-201308281639

« back to all changes in this revision

Viewing changes to ports/sysdeps/unix/sysv/irix4/__handler.S

  • Committer: Package Import Robot
  • Author(s): Matthias Klose
  • Date: 2012-02-08 01:58:09 UTC
  • mfrom: (1.5.3) (288.1.12 precise)
  • Revision ID: package-import@ubuntu.com-20120208015809-ulscst7uteq3e22z
Tags: 2.15~pre6-0ubuntu10
Merge from Debian (r5151, 2.13-26).

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/* Copyright (C) 1992, 1997 Free Software Foundation, Inc.
2
 
   This file is part of the GNU C Library.
3
 
   Contributed by Brendan Kehoe (brendan@cs.widener.edu).
4
 
   Also hacked by Ian Lance Taylor (ian@airs.com).
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
 
/* This function saves all the registers, calls the
24
 
   user function, and then executes a sigreturn system call.  The
25
 
   sigreturn call wants the address of a sigcontext structure.  This
26
 
   is all hideously system dependent and, for all intents and
27
 
   purposes, undocumented.
28
 
 
29
 
   When we enter here, a3 holds the user's signal handler.  We are
30
 
   supposed to fill in the context given in a2, and then pass it and
31
 
   the first two arguments to the user's function.  If the user's
32
 
   function returns, we execute a sigreturn system call.
33
 
 
34
 
   The sc_onstack, sc_mask and sc_pc elements of the context are
35
 
   already set by the kernel.  For some reason we don't have to save
36
 
   the floating point state or the coprocessor state; the kernel may
37
 
   have saved them for us, or it doesn't use them.  */
38
 
 
39
 
.set noat
40
 
ENTRY (__handler)
41
 
#if 0
42
 
        /* Store zero and the asm temp reg.  */
43
 
        sw $0, 12(a2)
44
 
        sw AT, 16(a2)
45
 
 
46
 
        /* Put v1 in sc_regs[3].  */
47
 
        sw v1, 24(a2)
48
 
 
49
 
        /* Save the caller saved registers in sc_regs[8..15].  */
50
 
        sw t0, 44(a2)
51
 
        sw t1, 48(a2)
52
 
        sw t2, 52(a2)
53
 
        sw t3, 56(a2)
54
 
        sw t4, 60(a2)
55
 
        sw t5, 64(a2)
56
 
        sw t6, 68(a2)
57
 
        sw t7, 72(a2)
58
 
 
59
 
        /* Save the callee saved registers in sc_regs[16..23].  */
60
 
        sw s0, 76(a2)
61
 
        sw s1, 80(a2)
62
 
        sw s2, 84(a2)
63
 
        sw s3, 88(a2)
64
 
        sw s4, 92(a2)
65
 
        sw s5, 96(a2)
66
 
        sw s6, 100(a2)
67
 
        sw s7, 104(a2)
68
 
 
69
 
        /* Save the code generator registers in sc_regs[24] & sc_regs[25].  */
70
 
        sw t8, 108(a2)
71
 
        sw t9, 112(a2)
72
 
 
73
 
        /* Save the kernel temp regs in sc_regs[26] & sc_regs[27]. */
74
 
        sw k0, 116(a2)
75
 
        sw k1, 120(a2)
76
 
 
77
 
        /* Save the global pointer in sc_regs[28].  */
78
 
        sw gp, 124(a2)
79
 
 
80
 
        /* ... and also the return address in sc_regs[31].  */
81
 
        sw ra, 136(a2)
82
 
 
83
 
        /* Note: we don't save the stack pointer in sc_regs[29];
84
 
           instead, we use the one that was already there.  */
85
 
#if 0
86
 
        sw sp, 128(a2)
87
 
#endif
88
 
 
89
 
        /* Save the floating pointer in sc_regs[30].  */
90
 
        sw fp, 132(a2)
91
 
 
92
 
        /* Save the mul/div stuff in sc_mdlo and sc_mdhi.  */
93
 
        mflo t0
94
 
        sw t0, 140(a2)
95
 
        mfhi t0
96
 
        sw t0, 144(a2)
97
 
 
98
 
#endif
99
 
        /* Move the stack up six.  This will save the context.  */
100
 
        addu sp, sp, -24
101
 
        sw a2, 16(sp)
102
 
 
103
 
        /* Call their handler with the signal, code, and context; note
104
 
           this will clobber the context.  */
105
 
        .set noreorder
106
 
        jal ra, a3
107
 
        nop
108
 
        .set reorder
109
 
 
110
 
        /* When we come back, restore the context and pass it right
111
 
           on into sigreturn().  */
112
 
        lw a0, 16(sp)
113
 
 
114
 
        /* Do a sigreturn syscall; this doesn't return.  */
115
 
        li v0, SYS_sigreturn
116
 
        syscall
117
 
        nop