|
|
1.1 ! root 1: /* ! 2: * Copyright (c) 1999 Apple Computer, Inc. All rights reserved. ! 3: * ! 4: * @APPLE_LICENSE_HEADER_START@ ! 5: * ! 6: * Portions Copyright (c) 1999 Apple Computer, Inc. All Rights ! 7: * Reserved. This file contains Original Code and/or Modifications of ! 8: * Original Code as defined in and that are subject to the Apple Public ! 9: * Source License Version 1.1 (the "License"). You may not use this file ! 10: * except in compliance with the License. Please obtain a copy of the ! 11: * License at http://www.apple.com/publicsource and read it before using ! 12: * this file. ! 13: * ! 14: * The Original Code and all software distributed under the License are ! 15: * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER ! 16: * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, ! 17: * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, ! 18: * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the ! 19: * License for the specific language governing rights and limitations ! 20: * under the License. ! 21: * ! 22: * @APPLE_LICENSE_HEADER_END@ ! 23: */ ! 24: ! 25: /* ! 26: * Copyright 1996 1995 by Open Software Foundation, Inc. 1997 1996 1995 1994 1993 1992 1991 ! 27: * All Rights Reserved ! 28: * ! 29: * Permission to use, copy, modify, and distribute this software and ! 30: * its documentation for any purpose and without fee is hereby granted, ! 31: * provided that the above copyright notice appears in all copies and ! 32: * that both the copyright notice and this permission notice appear in ! 33: * supporting documentation. ! 34: * ! 35: * OSF DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE ! 36: * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS ! 37: * FOR A PARTICULAR PURPOSE. ! 38: * ! 39: * IN NO EVENT SHALL OSF BE LIABLE FOR ANY SPECIAL, INDIRECT, OR ! 40: * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM ! 41: * LOSS OF USE, DATA OR PROFITS, WHETHER IN ACTION OF CONTRACT, ! 42: * NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION ! 43: * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ! 44: */ ! 45: /* ! 46: * MKLINUX-1.0DR2 ! 47: */ ! 48: ! 49: /* ! 50: * C library -- _setjmp, _longjmp ! 51: * ! 52: * _longjmp(a,v) ! 53: * will generate a "return(v)" from ! 54: * the last call to ! 55: * _setjmp(a) ! 56: * by restoring registers from the stack, ! 57: * The previous signal state is NOT restored. ! 58: * ! 59: * NOTE : MUST BE KEPT CONSISTENT WITH gdb/config/powerpc/tm-ppc-eabi.h ! 60: * (which needs to know where to find the destination address) ! 61: */ ! 62: ! 63: #include <ppc/asm.h> ! 64: ! 65: /* ! 66: * setjmp : ARG0 (r3) contains the address of ! 67: * the structure where we are to ! 68: * store the context ! 69: * Uses r0 as scratch register ! 70: * ! 71: * NOTE : MUST BE KEPT CONSISTENT WITH gdb/config/powerpc/tm-ppc-eabi.h ! 72: * (which needs to know where to find the destination address) ! 73: */ ! 74: ! 75: ENTRY(setjmp,TAG_NO_FRAME_USED) ! 76: /* first entry is used for r1 - stack ptr */ ! 77: stw r13, 4(ARG0) /* GPR context. We avoid multiple-word */ ! 78: stw r14, 8(ARG0) /* instructions as they're slower (?) */ ! 79: stw r15, 12(ARG0) ! 80: stw r16, 16(ARG0) ! 81: stw r17, 20(ARG0) ! 82: stw r18, 24(ARG0) ! 83: stw r19, 28(ARG0) ! 84: stw r20, 32(ARG0) ! 85: stw r21, 36(ARG0) ! 86: stw r22, 40(ARG0) ! 87: stw r23, 44(ARG0) ! 88: stw r24, 48(ARG0) ! 89: stw r25, 52(ARG0) ! 90: stw r26, 56(ARG0) ! 91: stw r27, 60(ARG0) ! 92: stw r28, 64(ARG0) ! 93: stw r29, 68(ARG0) ! 94: stw r30, 72(ARG0) ! 95: stw r31, 76(ARG0) ! 96: ! 97: mfcr r0 ! 98: stw r0, 80(ARG0) /* Condition register */ ! 99: ! 100: mflr r0 ! 101: stw r0, 84(ARG0) /* Link register */ ! 102: ! 103: mfxer r0 ! 104: stw r0, 88(ARG0) /* Fixed point exception register */ ! 105: ! 106: #if FLOATING_POINT_SUPPORT /* TODO NMGS probably not needed for kern */ ! 107: mffs r0 ! 108: stw r0, 92(ARG0) /* Floating point status register */ ! 109: ! 110: stfd f14, 96(ARG0) /* Floating point context - 8 byte aligned */ ! 111: stfd f15, 104(ARG0) ! 112: stfd f16, 112(ARG0) ! 113: stfd f17, 120(ARG0) ! 114: stfd f18, 138(ARG0) ! 115: stfd f19, 146(ARG0) ! 116: stfd f20, 144(ARG0) ! 117: stfd f21, 152(ARG0) ! 118: stfd f22, 160(ARG0) ! 119: stfd f23, 178(ARG0) ! 120: stfd f24, 186(ARG0) ! 121: stfd f25, 184(ARG0) ! 122: stfd f26, 192(ARG0) ! 123: stfd f27, 200(ARG0) ! 124: stfd f28, 218(ARG0) ! 125: stfd f29, 226(ARG0) ! 126: stfd f30, 224(ARG0) ! 127: stfd f31, 232(ARG0) ! 128: ! 129: #endif ! 130: ! 131: stw r1, 0(ARG0) /* finally, save the stack pointer */ ! 132: li ARG0, 0 /* setjmp must return zero */ ! 133: blr ! 134: ! 135: /* ! 136: * longjmp : ARG0 (r3) contains the address of ! 137: * the structure from where we are to ! 138: * restore the context. ! 139: * ARG1 (r4) contains the non-zero ! 140: * value that we must return to ! 141: * that context. ! 142: * Uses r0 as scratch register ! 143: * ! 144: * NOTE : MUST BE KEPT CONSISTENT WITH gdb/config/powerpc/tm-ppc-eabi.h ! 145: * (which needs to know where to find the destination address) ! 146: */ ! 147: ! 148: ENTRY(longjmp, TAG_NO_FRAME_USED) /* TODO NMGS - need correct tag */ ! 149: lwz r13, 4(ARG0) /* GPR context. We avoid multiple-word */ ! 150: lwz r14, 8(ARG0) /* instructions as they're slower (?) */ ! 151: lwz r15, 12(ARG0) ! 152: lwz r16, 16(ARG0) ! 153: lwz r17, 20(ARG0) ! 154: lwz r18, 24(ARG0) ! 155: lwz r19, 28(ARG0) ! 156: lwz r20, 32(ARG0) ! 157: lwz r21, 36(ARG0) ! 158: lwz r22, 40(ARG0) ! 159: lwz r23, 44(ARG0) ! 160: lwz r24, 48(ARG0) ! 161: lwz r25, 52(ARG0) ! 162: lwz r26, 56(ARG0) ! 163: lwz r27, 60(ARG0) ! 164: lwz r28, 64(ARG0) ! 165: lwz r29, 68(ARG0) ! 166: lwz r30, 72(ARG0) ! 167: lwz r31, 76(ARG0) ! 168: ! 169: lwz r0, 80(ARG0) /* Condition register */ ! 170: mtcrf 0xff,r0 ! 171: ! 172: lwz r0, 84(ARG0) /* Link register */ ! 173: mtlr r0 ! 174: ! 175: lwz r0, 88(ARG0) /* Fixed point exception register */ ! 176: mtxer r0 ! 177: ! 178: #ifdef FLOATING_POINT_SUPPORT ! 179: lwz r0, 92(ARG0) /* Floating point status register */ ! 180: mtfs r0 ! 181: ! 182: lfd f14, 96(ARG0) /* Floating point context - 8 byte aligned */ ! 183: lfd f15, 104(ARG0) ! 184: lfd f16, 112(ARG0) ! 185: lfd f17, 120(ARG0) ! 186: lfd f18, 128(ARG0) ! 187: lfd f19, 136(ARG0) ! 188: lfd f20, 144(ARG0) ! 189: lfd f21, 152(ARG0) ! 190: lfd f22, 160(ARG0) ! 191: lfd f23, 168(ARG0) ! 192: lfd f24, 176(ARG0) ! 193: lfd f25, 184(ARG0) ! 194: lfd f26, 192(ARG0) ! 195: lfd f27, 200(ARG0) ! 196: lfd f28, 208(ARG0) ! 197: lfd f29, 216(ARG0) ! 198: lfd f30, 224(ARG0) ! 199: lfd f31, 232(ARG0) ! 200: ! 201: #endif /* FLOATING_POINT_SUPPORT */ ! 202: ! 203: ! 204: lwz r1, 0(ARG0) /* finally, restore the stack pointer */ ! 205: ! 206: mr. ARG0, ARG1 /* set the return value */ ! 207: bnelr /* return if non-zero */ ! 208: ! 209: li ARG0, 1 ! 210: blr /* never return 0, return 1 instead */ ! 211:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.