mirror of
https://git.FreeBSD.org/ports.git
synced 2025-01-15 07:56:36 +00:00
4e90ca4aa5
compile and run Maxima (see math/). Make portlint-clean as well. Claim maintainership in case it breaks again.
91 lines
2.7 KiB
C
91 lines
2.7 KiB
C
--- ./h/FreeBSD.h.orig Fri Nov 1 04:09:34 2002
|
|
+++ ./h/FreeBSD.h Sun Sep 14 01:51:55 2003
|
|
@@ -1,5 +1,5 @@
|
|
/*
|
|
- * FreeBSD.h for gcl 1.1
|
|
+ * FreeBSD.h for gcl
|
|
*
|
|
* Ported by Jeffrey Hsu (hsu@freebsd.org).
|
|
* Looked at previous versions by Hsu, Werkowsksi, Tobin, and Mogart.
|
|
@@ -8,6 +8,50 @@
|
|
|
|
#include "bsd.h"
|
|
|
|
+#ifndef __ELF__
|
|
+#error FreeBSD systems use ELF
|
|
+#endif
|
|
+
|
|
+#undef HAVE_AOUT
|
|
+#define HAVE_AOUT <elf.h>
|
|
+#define HAVE_ELF
|
|
+
|
|
+#if defined(__i386__)
|
|
+#define __ELF_NATIVE_CLASS 32
|
|
+#endif
|
|
+#if defined(__alpha__) || defined(__sparc64__) || defined(__ia64__)
|
|
+#define __ELF_NATIVE_CLASS 64
|
|
+#endif
|
|
+#define mjoin(a,b) a ## b
|
|
+#define Mjoin(a,b) mjoin(a,b)
|
|
+#if !defined(ElfW)
|
|
+#define ElfW(a) Mjoin(Elf,Mjoin(__ELF_NATIVE_CLASS,Mjoin(_,a)))
|
|
+#endif
|
|
+#define ELFW(a) Mjoin(ELF,Mjoin(__ELF_NATIVE_CLASS,Mjoin(_,a)))
|
|
+
|
|
+/* Seeking to the end of ELF data is a little messy... */
|
|
+#include <link.h>
|
|
+#define SEEK_TO_END_OFILE(fp)\
|
|
+ do { \
|
|
+ long offset = 0, endofelf; int j; \
|
|
+ ElfW(Ehdr) eheader; ElfW(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(ElfW(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)
|
|
+
|
|
+
|
|
#undef LD_COMMAND
|
|
#define LD_COMMAND(command,main,start,input,ldarg,output) \
|
|
sprintf(command, "ld -dc -N -x -A %s -T %x %s %s -o %s", \
|
|
@@ -39,17 +83,9 @@
|
|
#endif
|
|
|
|
#define DATA_BEGIN (char *) N_DATADDR(header);
|
|
-#define A_TEXT_OFFSET(x) (sizeof (struct exec))
|
|
-#define A_TEXT_SEEK(hdr) (N_TXTOFF(hdr) + A_TEXT_OFFSET(hdr))
|
|
-#define start_of_data() &etext
|
|
-#define start_of_text() ((char *)(sizeof(struct exec) + getpagesize()))
|
|
|
|
-#define UNIXSAVE "unexec.c"
|
|
-#ifdef UNIXSAVE
|
|
- extern char etext;
|
|
-#endif
|
|
-
|
|
-#define RELOC_FILE "rel_sun3.c" /* for SFASL - enabled in bsd.h */
|
|
+/*#define UNEXEC_USE_MAP_PRIVATE*/
|
|
+#define UNIXSAVE "unexelf.c"
|
|
|
|
#ifdef CLOCKS_PER_SEC
|
|
#define HZ CLOCKS_PER_SEC
|
|
@@ -67,7 +103,8 @@
|
|
#define SETUP_SIG_STACK \
|
|
{ \
|
|
static struct sigaltstack estack; \
|
|
- if ((estack.ss_sp = malloc(SIGSTKSZ)) == NULL) \
|
|
+ if (estack.ss_sp == NULL && \
|
|
+ (estack.ss_sp = malloc(SIGSTKSZ)) == NULL) \
|
|
perror("malloc"); \
|
|
estack.ss_size = SIGSTKSZ; \
|
|
estack.ss_flags = 0; \
|