From 16ca07b00a4144acb018e0543377e357612b8e77 Mon Sep 17 00:00:00 2001 From: Thomas Bushnell Date: Fri, 2 May 1997 17:09:57 +0000 Subject: Fri May 2 12:43:46 1997 Thomas Bushnell, n/BSG * Makefile.in (enable_kdb): New variable. (clib-routines): If enable_kdb, then add strstr. * i386/i386/_setjmp.S: New file, from UK22 libmach. * i386/Files: Add i386/i386/_setjmp.S. * i386/Makefrag (objfiles): Add _setjmp.o if enable_kdb. --- i386/Files | 1 + i386/Makefrag | 5 +++++ i386/i386/_setjmp.S | 63 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 69 insertions(+) create mode 100644 i386/i386/_setjmp.S (limited to 'i386') diff --git a/i386/Files b/i386/Files index a55e410..a8e85f2 100644 --- a/i386/Files +++ b/i386/Files @@ -54,6 +54,7 @@ i386/dos/i16/i16_vcpi.c i386/dos/i16/i16_xms.c i386/dos/i16/idt.h i386/dos/i16/phys_mem_sources.h +i386/i368/_setjmp.S i386/i386/ast.h i386/i386/ast_check.c i386/i386/ast_types.h diff --git a/i386/Makefrag b/i386/Makefrag index 979365f..0171130 100644 --- a/i386/Makefrag +++ b/i386/Makefrag @@ -46,6 +46,11 @@ objfiles += fpe.o # Mig-generated objfiles += mach_i386_server.o +# This file is only needed for KDB support. +ifeq ($(enable_kdb),yes) +objfiles += _setjmp.o +endif + ### Linux device drivers (make this Better, Please) linux-gen-files = $(addprefix linux_,$(linux-gen-names)) diff --git a/i386/i386/_setjmp.S b/i386/i386/_setjmp.S new file mode 100644 index 0000000..efabeb6 --- /dev/null +++ b/i386/i386/_setjmp.S @@ -0,0 +1,63 @@ +/* + * Mach Operating System + * Copyright (c) 1991,1990,1989 Carnegie Mellon University + * All Rights Reserved. + * + * Permission to use, copy, modify and distribute this software and its + * documentation is hereby granted, provided that both the copyright + * notice and this permission notice appear in all copies of the + * software, derivative works or modified versions, and any portions + * thereof, and that both notices appear in supporting documentation. + * + * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" + * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR + * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. + * + * Carnegie Mellon requests users of this software to return to + * + * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU + * School of Computer Science + * Carnegie Mellon University + * Pittsburgh PA 15213-3890 + * + * any improvements or extensions that they make and grant Carnegie Mellon + * the rights to redistribute these changes. + */ +/* + * C library -- _setjmp, _longjmp + * + * _longjmp(a,v) + * will generate a "return(v)" from + * the last call to + * _setjmp(a) + * by restoring registers from the stack, + * The previous signal state is NOT restored. + * + */ + +#include + +ENTRY(_setjmp) + movl 4(%esp),%ecx /* fetch buffer */ + movl %ebx,0(%ecx) + movl %esi,4(%ecx) + movl %edi,8(%ecx) + movl %ebp,12(%ecx) /* save frame pointer of caller */ + popl %edx + movl %esp,16(%ecx) /* save stack pointer of caller */ + movl %edx,20(%ecx) /* save pc of caller */ + xorl %eax,%eax + jmp *%edx + +ENTRY(_longjmp) + movl 8(%esp),%eax /* return(v) */ + movl 4(%esp),%ecx /* fetch buffer */ + movl 0(%ecx),%ebx + movl 4(%ecx),%esi + movl 8(%ecx),%edi + movl 12(%ecx),%ebp + movl 16(%ecx),%esp + orl %eax,%eax + jnz 0f + incl %eax +0: jmp *20(%ecx) /* done, return.... */ -- cgit v1.2.3