This is 386-linux.h in view mode; [Download] [Up]
#define BSD386
#include "bsd.h"
#ifdef __ELF__
/* #if ! defined(IN_UNIXFASL) */
#undef HAVE_AOUT
#define HAVE_AOUT <elf.h>
#define HAVE_ELF
/* Seeking to the end of ELF data is a little messy... */
#define SEEK_TO_END_OFILE(fp)\
do { \
long offset = 0, endofelf; int j; \
Elf32_Ehdr eheader; Elf32_Shdr shdr; \
fseek(fp, 0, SEEK_SET); \
fread(&eheader, sizeof(eheader), 1, fp); \
/* in case the headers themselves come AFTER the actual sections */ \
endofelf=offset = eheader.e_shoff+ eheader.e_shentsize *eheader.e_shnum;\
fseek(fp, eheader.e_shoff, SEEK_SET); \
if ( eheader.e_shentsize != sizeof(Elf32_Shdr) ) \
{ FEerror("Bad ELF section header size",0); } \
for ( j = 0; j < eheader.e_shnum; j++ ) \
{ fread(&shdr,eheader.e_shentsize,1,fp); \
if ( (shdr.sh_offset > offset) && (shdr.sh_type != SHT_NOBITS) ) \
{ offset = shdr.sh_offset; endofelf = offset+shdr.sh_size; } \
} \
if ( fseek(fp, endofelf, SEEK_SET) ) \
FEerror("Bad ELF file",0); \
} while(0)
#ifdef IN_GBC
/* Based upon sun4.h */
#define INSTALL_MPROTECT_HANDLER \
do {static struct sigaction action; \
action.sa_handler = memprotect_handler; \
action.sa_flags = SA_RESTART; \
action.sa_restorer = 0; \
sigemptyset(&action.sa_mask); \
sigaddset(&action.sa_mask,SIGINT); \
sigaddset(&action.sa_mask,SIGALRM); \
sigaction(SIGSEGV,&action,0); \
sigaction(SIGBUS,&action,0);} while (0)
#include <asm/sigcontext.h>
#define GET_FAULT_ADDR(sig,code,sv,a) \
((void *)(((struct sigcontext_struct *)(&code))->cr2))
#endif
#define ELF_TEXT_BASE 0x8000000 /* Later Linux ELF releases may change this */
#define DBEGIN ELF_TEXT_BASE
#undef SET_REAL_MAXPAGE
#define SET_REAL_MAXPAGE do { struct rlimit data_rlimit; \
real_maxpage = MAXPAGE ;\
getrlimit(RLIMIT_DATA, &data_rlimit); \
real_maxpage = ((unsigned int)&etext \
+ data_rlimit.rlim_cur - ELF_TEXT_BASE)/PAGESIZE; \
if (real_maxpage > MAXPAGE) \
real_maxpage = MAXPAGE ; } while(0)
#define SPECIAL_RSYM "rsym_elf.c"
#define SEPARATE_SFASL_FILE "sfaslelf.c"
#define UNIXSAVE "unexelf.c"
/* end ELF */
#else
#define RELOC_FILE "rel_sun3.c"
#define UNIXSAVE "unexec.c"
#define start_of_data() &etext
#define start_of_text() ( (char *) 0 )
#define A_TEXT_OFFSET(hdr) (N_MAGIC(hdr) == QMAGIC ? sizeof (struct exec) : 0)
#define A_TEXT_SEEK(hdr) (N_TXTOFF(hdr) + A_TEXT_OFFSET(hdr))
#define ADJUST_EXEC_HEADER \
unexec_text_start = N_TXTADDR(ohdr) + A_TEXT_OFFSET(ohdr)
#endif
/* 7 Mbytes were not enough with gcl-2.1, but 8 Mbytes will allow gcl to be
built.
*/
/* Must be a power of 2 if SGC is enabled. */
#define MAXPAGE (1<<14) /* 64 MB = (1 << (PAGEWIDTH+14) */
/* #include "386.h" */
#undef HAVE_SIGVEC
/* #define NEED_TO_REINSTALL_SIGNALS */
#define HAVE_SIGACTION
/* make this a noop */
#define SETUP_SIG_STACK
#define SV_ONSTACK 0
/* unblock signals m and n, and set val to signal_mask(m) | signal_mask(n)
if they were set */
#define SIG_UNBLOCK_SIGNALS(val,m,n) \
current_mask = sigblock(0); \
sigsetmask(~(sigmask(m)) & ~(sigmask(n)) & current_mask); \
result = (current_mask & sigmask(m) ? signal_mask(m) : 0) \
| (current_mask & sigmask(n) ? signal_mask(n) : 0);
#undef RUN_PROCESS
#define ADDITIONAL_FEATURES \
ADD_FEATURE("BSD386"); \
ADD_FEATURE("MC68020")
#define I386
#define IEEEFLOAT
/* Pages on Linux are 4096 bytes. */
#ifdef PAGEWIDTH
#error PAGEWIDTH definition conflict
#endif
#define PAGEWIDTH 12 /* page width */
#undef HAVE_XDR
#ifdef IN_UNIXSAVE
#include <linux/user.h>
#endif
#define USE_ULONG_
/* How to check for input */
#undef LISTEN_FOR_INPUT
#define LISTEN_FOR_INPUT(fp) \
do { int c = 0; \
if(((fp)->_IO_read_ptr >= (fp)->_IO_read_end) \
&& (ioctl((fp)->_fileno, FIONREAD, &c),c<=0)) \
return 0;} while (0)
/* we dont need to worry about zeroing fp->_base , to prevent */
#define FCLOSE_SETBUF_OK
/* #define DATA_BEGIN((TXTRELOC+header.a_text+(SEGSIZ-1)) & ~(SEGSIZ-1)); */
#define DATA_BEGIN (char *)(char *)N_DATADDR(header);
/*
#undef FILECPY_HEADER
#define FILECPY_HEADER \
if (header.a_magic == ZMAGIC) \
filecpy(save, original, PAGSIZ - sizeof(header)); \
filecpy(save, original, header.a_text);
*/
#define LITTLE_ENDIAN
#define PAGSIZ (NBPG)
#define SEGSIZ (NBPG * CLSIZE)
#define TXTRELOC 0
#define USE_DIRENT
#define GETPATHNAME
#define PATHNAME_CACHE 10
/* try out the gnu malloc */
/* #define GNU_MALLOC */
#define INSTALL_SEGMENTATION_CATCHER \
(void) signal(SIGSEGV,segmentation_catcher)
/* if you are in an early version of linux without SIGBUS, uncomment
the next line */
/* #define SIGBUS SIGSEGV */
#define SIGSYS SIGSEGV
#define SIGEMT SIGSEGV
/* get the fileno of a FILE* */
#define FILENO(x) fileno(x)
#define ULONG_DEFINED
#define NO_PROFILE
#undef LD_COMMAND
#define LD_COMMAND(command,main,start,input,ldarg,output) \
sprintf(command, "ld -d -S -N -x -A %s -T %x %s %s -o %s", \
main,start,input,ldarg,output)
#define SET_SESSION_ID() (setpgrp() ? -1 : 0)
/* NOTE: The following text will be automatically included in a
constructed file cmpinclude.h */
/* Begin for cmpinclude */
/* yes we have alloca */
#define HAVE_ALLOCA
/* NOTE: If you don't have the system call mprotect DON'T
define this.
All Linux ELF systems should have mprotect. */
#ifdef __ELF__
#define SGC
#endif
/* _setjmp and _longjmp exist on bsd and are more efficient
and handle the C stack which is all we need. [I think!]
*/
/* End for cmpinclude */
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.