PatchSet 7161 Date: 2006/03/23 18:29:18 Author: robilad Branch: HEAD Tag: (none) Log: fixes for openbsd stack handling
2006-03-23 Kurt Miller <[EMAIL PROTECTED]> Fixes for OpenBSD stack handling. * config/i386/openbsd2/md.c (mdGetStackEnd, mdGetStackSize): Added. * config/i386/openbsd2/md.h (KAFFEMD_STACK_ERROR, KAFFEMD_STACK_INFINITE, KAFFEMD_STACKSIZE, mdSetStackSize, KAFFEMD_STACKEND) Added. Members: ChangeLog:1.4679->1.4680 config/i386/openbsd2/md.c:1.1->1.2 config/i386/openbsd2/md.h:INITIAL->1.12 Index: kaffe/ChangeLog diff -u kaffe/ChangeLog:1.4679 kaffe/ChangeLog:1.4680 --- kaffe/ChangeLog:1.4679 Thu Mar 23 01:33:17 2006 +++ kaffe/ChangeLog Thu Mar 23 18:29:18 2006 @@ -1,3 +1,13 @@ +2006-03-23 Kurt Miller <[EMAIL PROTECTED]> + + Fixes for OpenBSD stack handling. + + * config/i386/openbsd2/md.c (mdGetStackEnd, mdGetStackSize): + Added. + + * config/i386/openbsd2/md.h (KAFFEMD_STACK_ERROR, KAFFEMD_STACK_INFINITE, + KAFFEMD_STACKSIZE, mdSetStackSize, KAFFEMD_STACKEND) Added. + 2006-03-22 Dalibor Topic <[EMAIL PROTECTED]> Fix for #30. Index: kaffe/config/i386/openbsd2/md.c diff -u kaffe/config/i386/openbsd2/md.c:1.1 kaffe/config/i386/openbsd2/md.c:1.2 --- kaffe/config/i386/openbsd2/md.c:1.1 Tue Mar 31 19:10:53 1998 +++ kaffe/config/i386/openbsd2/md.c Thu Mar 23 18:29:24 2006 @@ -8,3 +8,34 @@ * See the file "license.terms" for information on usage and redistribution * of this file. */ + +#include <sys/signal.h> +#include <pthread.h> +#include <pthread_np.h> +#include <stdio.h> + +void *mdGetStackEnd(void) +{ + stack_t stack; + if (pthread_stackseg_np(pthread_self(), &stack) != 0) + { + fprintf(stderr, + "Kaffe VM has not been able to retrieve the pointer to the stack base\n" + "Aborting...\n"); + exit(1); + } + return stack.ss_sp; +} + +size_t mdGetStackSize(void) +{ + stack_t stack; + if (pthread_stackseg_np(pthread_self(), &stack) != 0) + { + fprintf(stderr, + "Kaffe VM has not been able to retrieve the stack size\n" + "Aborting...\n"); + exit(1); + } + return stack.ss_size; +} =================================================================== Checking out kaffe/config/i386/openbsd2/md.h RCS: /home/cvs/kaffe/kaffe/config/i386/openbsd2/md.h,v VERS: 1.12 *************** --- /dev/null Sun Aug 4 19:57:58 2002 +++ kaffe/config/i386/openbsd2/md.h Thu Mar 23 19:08:46 2006 @@ -0,0 +1,68 @@ +/* + * i386/openbsd2/md.h + * OpenBSD i386 configuration information. + * + * Copyright (c) 1996, 1997 + * Transvirtual Technologies, Inc. All rights reserved. + * + * Copyright (c) 2003, 2004 + * Kaffe.org contributors. See ChangeLog for details. + * + * See the file "license.terms" for information on usage and redistribution + * of this file. + */ + +#ifndef __i386_openbsd2_md_h +#define __i386_openbsd2_md_h + +#include "i386/common.h" +#include "i386/threads.h" + +#if defined(HAVE_SYS_TIME_H) +#include <sys/time.h> +#endif +#if defined(HAVE_SYS_RESOURCE_H) +#include <sys/resource.h> +#endif +#if defined(HAVE_UNISTD_H) +#include <unistd.h> +#endif + +/* + * Redefine stack pointer offset. + */ +#undef SP_OFFSET +#define SP_OFFSET 2 + +/* Define signal context macros for xprofiling */ +#define SIGNAL_ARGS(sig, sc) int sig, int __code, struct sigcontext *sc +#define SIGNAL_CONTEXT_POINTER(scp) struct sigcontext *scp +#define GET_SIGNAL_CONTEXT_POINTER(sc) (sc) +#define SIGNAL_PC(scp) (scp)->sc_pc +#define STACK_POINTER(scp) (scp)->sc_sp + +#if defined(TRANSLATOR) +#include "jit-md.h" +#endif + +#define KAFFEMD_STACK_ERROR 0 +#define KAFFEMD_STACK_INFINITE KAFFEMD_STACK_ERROR + +#define KAFFEMD_STACKSIZE +extern size_t mdGetStackSize(void); + +/* this is only used for the main thread and is ok for that */ +/* this may change with rthreads when thats done */ +static inline void mdSetStackSize(rlim_t limit) +{ + struct rlimit rl; + + getrlimit(RLIMIT_STACK, &rl); + rl.rlim_cur = limit; + setrlimit(RLIMIT_STACK, &rl); +} + +#define KAFFEMD_STACKEND +extern void *mdGetStackEnd(void); + +#endif _______________________________________________ kaffe mailing list kaffe@kaffe.org http://kaffe.org/cgi-bin/mailman/listinfo/kaffe