diff options
-rw-r--r-- | ChangeLog | 8 | ||||
-rw-r--r-- | Makefile.in | 12 | ||||
-rw-r--r-- | i386/Files | 1 | ||||
-rw-r--r-- | i386/Makefrag | 5 | ||||
-rw-r--r-- | i386/i386/_setjmp.S | 63 |
5 files changed, 88 insertions, 1 deletions
@@ -1,3 +1,11 @@ +Fri May 2 12:43:46 1997 Thomas Bushnell, n/BSG <thomas@gnu.ai.mit.edu> + + * 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. + 1997-04-30 Marcus G. Daniels <marcus@cathcart.sysc.pdx.edu> * Makefile.in (clib-routines): Add htons not because it is necessary, diff --git a/Makefile.in b/Makefile.in index b1c5421..7f1417c 100644 --- a/Makefile.in +++ b/Makefile.in @@ -36,6 +36,13 @@ ifeq ($(cross_linkable),yes) cross-migcom = cross-migcom endif +# Detect if the user wants KDB +ifeq ($(filter -DMACH_KDB,@DEFS@),-DMACH_KDB) +enable_kdb=yes +else +enable_kdb=no +endif + # Programs found by configure. AWK=@AWK@ INSTALL=@INSTALL@ @@ -230,7 +237,10 @@ other-headers := alloca.h # for sanity. objfiles += clib-routines.o -clib-routines = memcpy memset bcopy bzero htonl htons ntohl ntohs +clib-routines := memcpy memset bcopy bzero htonl htons ntohl ntohs +ifeq ($(enable_kdb),yes) +clib-routines += strstr +endif clib-routines.o: $(installed-clib) $(LD) -o clib-routines.o -r $(addprefix -u ,$(clib-routines)) $(installed-clib) @@ -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 <mach/machine/asm.h> + +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.... */ |