4
0
mirror of git://sourceware.org/git/newlib-cygwin.git synced 2025-01-15 11:00:04 +08:00
Jeff Johnston ee37ede1d3 2001-02-22 Jeff Johnston <jjohnstn@redhat.com>
* libc/include/machine/setjmp-dj.h: With DJ Delorie's permission,
        changed the copyright information to allow free modification of the
        file with no reference to "copying.dj".
        * libc/include/sys/stat-dj.h: Ditto.
        * libc/machine/i386/setjmp.S: Ditto.
        * libc/sys/h8300hms/sys/file.h: Ditto.
        * libc/sys/sysmec/access.c: Ditto.
        * libc/sys/sysnecv850/access.c: Ditto.
        * libc/stdio/mktemp.c: Fixed typo for the word copyright.
        * libc/stdlib/getenv_r.c: Ditto.
        * libc/stdlib/putenv_r.c: Ditto.
        * libc/stdlib/setenv_r.c: Ditto.
        * libc/stdlib/getenv.c: Removed DJ reference since any possible
        modifications will now be in the _r version of this file.
        * libc/stdlib/putenv.c: Ditto.
        * libc/stdlib/setenv.c: Ditto.
        * libc/sys/go32/copying.dj: Removed DJ's address which is no longer
        valid.  Added a reference to DJ's web page that contains his address.
        * libc/sys/go32/*.s: Removed references to DJ's old address.
        * libc/sys/go32/*.c: Ditto.
        * libc/sys/go32/*.h: Ditto.
        * libc/sys/go32/*.S: Ditto.
        * libc/sys/go32/sys/*.h: Ditto.
2001-02-22 22:12:43 +00:00

66 lines
1.4 KiB
ArmAsm

/* This is file LONGJMP.S */
/*
** Copyright (C) 1993 DJ Delorie
**
** This file is distributed under the terms listed in the document
** "copying.dj".
** A copy of "copying.dj" should accompany this file; if not, a copy
** should be available from where this file was obtained. This file
** may not be distributed without a verbatim copy of "copying.dj".
**
** This file is distributed WITHOUT ANY WARRANTY; without even the implied
** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*/
/*
** jmp_buf:
** eax ebx ecx edx esi edi ebp esp eip es fs gs ss
** 0 4 8 12 16 20 24 28 32 36 38 40 42
*/
.globl _longjmp /* jmp_buf, int */
_longjmp:
pushl %ebp
movl %esp,%ebp
movl 8(%ebp),%edi /* get jmp_buf */
movl 12(%ebp),%eax /* store retval in j->eax */
testl %eax,%eax
jne 0f
incl %eax
0:
movl %eax,0(%edi)
movl 24(%edi),%ebp
pushfl /* get flags so will only re-enable */
popl %ebx /* interrupts if they were previously */
/* enabled */
cli
movw 42(%edi),%ax
movw %ax,%ss
movl 28(%edi),%esp
pushl 32(%edi) /* for a ret! */
pushl %ebx /* save flags that contain previous */
/* interrupt state */
movw 36(%edi),%ax
movw %ax,%es
movw 38(%edi),%ax
movw %ax,%fs
movw 40(%edi),%ax
movw %ax,%gs
movl 0(%edi),%eax
movl 4(%edi),%ebx
movl 8(%edi),%ecx
movl 12(%edi),%edx
movl 16(%edi),%esi
movl 20(%edi),%edi
popfl /* restore previous interrupt state */
ret /* actually jump to new eip */