1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
|
#include "linux.h"
#ifdef IN_GBC
/* #undef MPROTECT_ACTION_FLAGS */
/* #define MPROTECT_ACTION_FLAGS SA_RESTART|SA_SIGINFO */
/* #define GET_FAULT_ADDR(sig,code,sv,a) \ */
/* ((siginfo_t *)code)->si_addr */
/* the following two files have changed back
and forth in recent versions of linux...
Include both if they both exist, otherwise
include whatever one exists...
basically one wants the
struct sigcontext_struct { ... } ;
so as to get the fault address.
*/
#if !defined(SIGNAL_H_HAS_SIGCONTEXT) && !defined(HAVE_SIGCONTEXT)
#error Need sigcontext on 386 linux
#else
#include <signal.h>
#ifndef SIGNAL_H_HAS_SIGCONTEXT
#ifdef HAVE_ASM_SIGCONTEXT_H
#include <asm/sigcontext.h>
#endif
#ifdef HAVE_ASM_SIGNAL_H
#include <asm/signal.h>
#endif
#endif
#endif
#undef MPROTECT_ACTION_FLAGS
#define MPROTECT_ACTION_FLAGS SA_RESTART|SA_SIGINFO
#define GET_FAULT_ADDR(sig,code,sv,a) ((siginfo_t *)code)->si_addr
/* #define GET_FAULT_ADDR(sig,code,sv,a) ((void *)(((struct sigcontext *)(&code))->cr2)) */
#endif
/*#define NULL_OR_ON_C_STACK(x) ((x)==0 || ((unsigned int)x) > (unsigned int)(pagetochar(MAXPAGE+1)))*/
#define ADDITIONAL_FEATURES \
ADD_FEATURE("BSD386"); \
ADD_FEATURE("MC68020")
#define I386
#define SGC
#ifdef IN_SFASL
#include <sys/mman.h>
#define CLEAR_CACHE {\
void *p,*pe; \
p=(void *)((unsigned long)memory->cfd.cfd_start & ~(PAGESIZE-1)); \
pe=(void *)((unsigned long)(memory->cfd.cfd_start+memory->cfd.cfd_size) & ~(PAGESIZE-1)) + PAGESIZE-1; \
if (mprotect(p,pe-p,PROT_READ|PROT_WRITE|PROT_EXEC)) {\
fprintf(stderr,"%p %p\n",p,pe);\
perror("");\
FEerror("Cannot mprotect", 0);\
}\
}
#endif
#define RELOC_H "elf32_i386_reloc.h"
|