[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Gcl-devel] Re: GCL on FreeBSD - Working!
From: |
Mark Murray |
Subject: |
[Gcl-devel] Re: GCL on FreeBSD - Working! |
Date: |
Thu, 18 Sep 2003 08:54:25 +0100 |
Camm Maguire writes:
> 1) Detail what you did to create your working build, and post
> configure and build output.
I've enclosed the patches (the important bits of which I got from
the GCL-Devel list.
> 2) Does your build work with the NetBSD sparc guy too?
I doubt it. :-(
> 3) Other configure options working? BFD linking? ANSI? cust-reloc?
> dlopen?
Only the custom one. Here is the full set of config options in the
FreeBSD port build:
CONFIGURE_ARGS=--prefix=${PREFIX} \
--enable-machine=FreeBSD \
--enable-ansi \
--infodir=${PREFIX}/info \
--enable-info=${PREFIX}/info \
--enable-tkconfig=${LOCALBASE}/lib/tk8.4 \
--enable-tclconfig=${LOCALBASE}/lib/tcl8.4 \
--with-x \
--x-includes=${X11BASE}/include \
--x-libraries=${X11BASE}/lib \
--disable-dlopen \
--disable-dynsysbfd \
--disable-statsysbfd \
--disable-locbfd \
--enable-custreloc
At a later stage, I intend to make some of them (Tk, X, ANSI) optional.
The --enable-dlopen option comes the closest to building (if you don't
use --enable-custreloc, which works properly); I posted the the error
to this list a week or two ago. The BFD options fail horribly.
> 4) Would you like to volunteer as a GCL developer to keep this current
> and working? We'd prefer if there were no special build
> instructions outside of './configure <options> && make && make
> install', otherwise we need to commit some fixes in CVS.
No problem :-). Please bear in mind that I am a FreeBSD hacker, C
programmer, maths student and cryptographic engineer. I am NOT a
lisp programmer, and I have very little access to Linux (RedHat 7.n
at work). If that is OK with you, then I'm happy.
> 5) It would be preferable to centralize the .h info around linux.h,
> with specific overrides in a (small) xBSD.h, as the former is sure
> to be well maintained and luckily BSD and linux are quite close.
> Eventually, we'd like configure to replace the .h files altogether.
> These .h files tend to silently break as GCL evolves unless one is
> continually building the tree, or everything is automatically
> detected. We had someone work on freebsd before, got what they
> wanted working, then disappeared -- I'd like to prevent a
> recurrence, and your advice is appreciated.
I can certainly help here.
> 6) It would be great to have an autobuilt binary mirrored at our new
> (temporary) distribution site: http://people.debian.org/~camm/gcl.
> Here is an example of the script we have cron'd on a solaris box:
I'll see if I can so something similar (but it will have to be for
FreeBSD-CURRENT).
M
--
Mark Murray
iumop ap!sdn w,I idlaH
--- ./configure.in.orig Sun Mar 2 15:23:17 2003
+++ ./configure.in Sat Sep 13 23:52:23 2003
@@ -361,8 +361,8 @@
# for subconfigurations
CFLAGS=-g
else
- TO3FLAGS="-O6 -fomit-frame-pointer"
- TO2FLAGS="-O"
+ TO3FLAGS="-fomit-frame-pointer"
+ TO2FLAGS=""
fi
AC_CHECK_PROGS(AWK,gawk nawk awk,"")
@@ -1266,30 +1266,30 @@
if test -d ${TK_CONFIG_PREFIX}/tk${TK_VERSION} ; then
TK_LIBRARY=${TK_CONFIG_PREFIX}/tk${TK_VERSION}
- else
+else
if test -d ${TK_CONFIG_PREFIX}/../tk${TK_VERSION} ; then
TK_LIBRARY=${TK_CONFIG_PREFIX}/../tk${TK_VERSION}
fi
fi
if test -d ${TK_CONFIG_PREFIX}/tcl${TCL_VERSION} ; then
TCL_LIBRARY=${TK_CONFIG_PREFIX}/tcl${TCL_VERSION}
- else
+else
if test -d ${TK_CONFIG_PREFIX}/../tcl${TCL_VERSION} ; then
TCL_LIBRARY=${TK_CONFIG_PREFIX}/../tcl${TCL_VERSION}
fi
fi
if test -f ${TK_CONFIG_PREFIX}/../include/tk.h ; then
TK_INCLUDE=-I${TK_CONFIG_PREFIX}/../include
- else
- if test -f /usr/include/tcl${TCL_VERSION}/tk.h ; then
- TK_INCLUDE=-I/usr/include/tcl${TCL_VERSION}
+else
+ if test -f ${TK_CONFIG_PREFIX}/../../include/tk${TK_VERSION}/tk.h ; then
+ TK_INCLUDE=-I${TK_CONFIG_PREFIX}/../../include/tk${TK_VERSION}
fi
fi
if test -f ${TCL_CONFIG_PREFIX}/../include/tcl.h ; then
TCL_INCLUDE=-I${TCL_CONFIG_PREFIX}/../include
- else
- if test -f /usr/include/tcl${TCL_VERSION}/tcl.h ; then
- TCL_INCLUDE=-I/usr/include/tcl${TCL_VERSION}
+else
+ if test -f ${TCL_CONFIG_PREFIX}/../../include/tcl${TCL_VERSION}/tcl.h ; then
+ TCL_INCLUDE=-I${TCL_CONFIG_PREFIX}/../../include/tcl${TCL_VERSION}
fi
fi
AC_CHECK_LIB(lieee,main,have_ieee=1,have_ieee=0)
--- ./h/FreeBSD.defs.orig Fri Nov 1 04:09:34 2002
+++ ./h/FreeBSD.defs Sun Sep 14 01:49:46 2003
@@ -1,26 +1,16 @@
-# Machine dependent makefile definitions for intel 386,486 running 386bsd
+# Machine dependent makefile definitions for 386bsd
# Ported to FreeBSD 2.0 by Jeffrey Hsu (address@hidden).
# Hacked September-93 by Paul F. Werkowski for 386BSD 0.1 + Patchkit 0.2.4
+# Hacked September-2003 by Juergen Weiss, Mark Murray for FreeBSD-5 CURRENT
-LBINDIR=/usr/local/bin
-
-OFLAG = -pipe -O2
-CFLAGS = -fwritable-strings -fomit-frame-pointer -DVOL=volatile -I$(GCLDIR)/o
-I/usr/local/lib/gcl-2.0/h -fsigned-char -I/usr/local/lib
-LIBS = -lm -L/usr/local/lib
-ODIR_DEBUG=
-NULLFILE=../h/twelve_null
+LBINDIR=${prefix}/bin
# This CC string will be used for compilation of the system,
# and also in the compiler::*cc* variable for later compilation of
# lisp files.
-
-CC = gcc
+CC = gcc @@CFLAGS@@
LDCC = $(CC) -static
-
-# Use the mp.s file on 68k machine
-MPFILES= $(MPDIR)/mpi-386.o $(MPDIR)/libmport.a
-GNULIB1=/usr/lib/libgcc.a
# Enable the fastloading mechanism which does not use ld -A
# requires c/rel_.. machine dependent code.
--- ./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 (address@hidden).
* 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; \
--- h/gclincl.h.in.orig Wed Feb 26 15:26:41 2003
+++ h/gclincl.h.in Mon Sep 15 17:18:53 2003
@@ -119,7 +119,14 @@
#include <ieeefp.h>
#define ISNORMAL(a) (fpclass(a)>=FP_NZERO)
#else
+#define HAVE_FLOAT_H 1
+#ifdef HAVE_FLOAT_H
+#include <float.h>
+#define ISNORMAL(a) \
+ ((DBL_MIN<=(a) && (a)<=DBL_MAX) || (DBL_MIN<=(-a) && (-a)<=DBL_MAX))
+#else
#error "No isnormal found"
+#endif
#endif
#endif
#endif
--- info/gcl-si.texi.orig Sun Sep 14 12:13:24 2003
+++ info/gcl-si.texi Sun Sep 14 12:14:28 2003
@@ -19,6 +19,10 @@
@setchapternewpage odd
@ifinfo
address@hidden GNU Common Lisp
address@hidden
+* GCL Systems Internals: (gcl-si). GCL SYSTEM INTERNALS Manual
address@hidden direntry
This is a Texinfo GCL SYSTEM INTERNALS Manual
Copyright 1994 William F. Schelter
--- info/makefile.orig Fri Jan 24 18:55:23 2003
+++ info/makefile Sun Sep 14 14:30:50 2003
@@ -1,19 +1,18 @@
.SUFFIXES:
.SUFFIXES: .info .dvi .texi
-INFO_DIR=/usr/local/lib/info
+INFO_DIR=${prefix}/info/
GCL_DVI=gcl-tk.dvi gcl-si.dvi gcl.dvi
GCL_HTML=gcl-si_toc.html gcl-tk_toc.html gcl_toc.html
-include ../makedefs
-all: gcl-tk.info gcl-si.info gcl.info $(GCL_DVI) $(GCL_HTML)
+all: gcl-tk.info gcl-si.info gcl.info
.texi.info:
rm -f $*.*gz
- -$(MAKEINFO) $*.texi
- - gzip $*.info-*
+ -$(MAKEINFO) --no-split $*.texi
GCL_SI= number.texi sequence.texi character.texi list.texi io.texi \
form.texi compile.texi symbol.texi system.texi structure.texi \
@@ -31,19 +30,19 @@
TEXINPUTS=.:$$TEXINPUTS tex --interaction nonstopmode gcl-si.texi ||
true
gcl-si.info:
- -$(MAKEINFO) gcl-si.texi
+ -$(MAKEINFO) --no-split gcl-si.texi
gcl-tk.dvi: ${GCL_TK} gcl-tk.texi
TEXINPUTS=.:$$TEXINPUTS tex --interaction nonstopmode gcl-tk.texi ||
true
gcl-tk.info: ${GCL_TK} gcl-tk.texi
- -$(MAKEINFO) gcl-tk.texi
+ -$(MAKEINFO) --no-split gcl-tk.texi
gcl.dvi: ${GCL_MAN} gcl.texi
TEXINPUTS=.:$$TEXINPUTS tex --interaction nonstopmode gcl.texi || true
gcl.info: ${GCL_MAN} gcl.texi
- -$(MAKEINFO) gcl.texi
+ -$(MAKEINFO) --no-split gcl.texi
gcl-si_toc.html:
texi2html -split_chapter gcl-si.texi
@@ -58,22 +57,7 @@
cp *.html /d/www/gcl
install:
- mkdir -p $(DESTDIR)${INFO_DIR}
- [ -f $(DESTDIR)$(INFO_DIR)dir ] || touch $(DESTDIR)$(INFO_DIR)dir
- ! grep -q gcl-si $(DESTDIR)${INFO_DIR}dir || \
- echo "* GCL Doc: (gcl-si.info). GNU Common Lisp specific
Documentation." >> $(DESTDIR)${INFO_DIR}dir
- ! grep -q gcl-tk $(DESTDIR)${INFO_DIR}dir || \
- echo "* GCL TK Doc: (gcl-tk.info). TK window GCL interface." >>
$(DESTDIR)${INFO_DIR}dir
- ! grep -q gcl.info $(DESTDIR)${INFO_DIR}dir || \
- echo "* GCL Ansi Doc: (gcl.info). Ansi Common Lisp Specification." >>
$(DESTDIR)${INFO_DIR}dir
cp *.info* $(DESTDIR)${INFO_DIR}
- mkdir -p $(DESTDIR)$(INFO_DIR)../doc/gcl-doc/gcl.html
- mkdir -p $(DESTDIR)$(INFO_DIR)../doc/gcl-doc/gcl-si.html
- mkdir -p $(DESTDIR)$(INFO_DIR)../doc/gcl-doc/gcl-tk.html
- cp gcl_*html $(DESTDIR)$(INFO_DIR)../doc/gcl-doc/gcl.html
- cp gcl-si_*html $(DESTDIR)$(INFO_DIR)../doc/gcl-doc/gcl-si.html
- cp gcl-tk_*html $(DESTDIR)$(INFO_DIR)../doc/gcl-doc/gcl-tk.html
- cp *dvi $(DESTDIR)$(INFO_DIR)../doc/gcl-doc
FILE=gcl-si.texi
srcs:
--- makedefc.in.orig Sun Sep 14 12:02:18 2003
+++ makedefc.in Sun Sep 14 12:10:34 2003
@@ -16,13 +16,18 @@
address@hidden@
# where to place the info files
address@hidden@
address@hidden@/info
+
+# configure has a clever process for figuring out where Emacs
+# really expects to find site-lisp and default.el. We use
+# these values instead to ensure that building with --prefix=PREFIX
+# will not make changes outside the specified tree. -twp
# where to put emacs lisp files.
address@hidden@
address@hidden@/share/emacs/site-lisp
# the default.el file
address@hidden@
address@hidden@/share/emacs/site-lisp/default.el
# numerous TCL/TK variables culled from the tkConfig.sh and tclConfig.sh
# if these are found.
--- makefile.orig Sun Sep 14 13:48:53 2003
+++ makefile Sun Sep 14 13:50:15 2003
@@ -162,10 +162,11 @@
mkdir -p $(DESTDIR)$(prefix)/lib
mkdir -p $(DESTDIR)$(prefix)/bin
mkdir -p $(DESTDIR)$(INSTALL_LIB_DIR)
+ mkdir -p $(DESTDIR)$(prefix)/info
MINSTALL_LIB_DIR=`echo $(INSTALL_LIB_DIR) | sed -e
'sX^\([a-z]\):X/\1Xg'` ; \
$(MAKE) install-command "INSTALL_LIB_DIR=$(INSTALL_LIB_DIR)"
"prefix=$(prefix)" "DESTDIR=$(DESTDIR)" "BINDIR=$$MINSTALL_LIB_DIR/unixport"
rm -f $(DESTDIR)$(prefix)/bin/gcl.exe
- tar cf - $(PORTDIR)/$(FLISP)$(EXE) info/*.info* $(LISP_LIB) \
+ tar cf - $(PORTDIR)/$(FLISP)$(EXE) $(LISP_LIB) \
$(TCL_EXES) | (cd $(DESTDIR)$(INSTALL_LIB_DIR) ;tar xf -)
if [ -e "unixport/rsym$(EXE)" ] ; then cp unixport/rsym$(EXE)
$(DESTDIR)$(INSTALL_LIB_DIR)/unixport/ ; fi
# ln $(SYMB) $(INSTALL_LIB_DIR)/$(PORTDIR)/$(FLISP)$(EXE) \
--- ./o/readline.d.orig Sat Jul 20 08:10:56 2002
+++ ./o/readline.d Sat Sep 13 23:52:24 2003
@@ -94,7 +94,7 @@
the word to complete. We can use the entire contents of rl_line_buffer
in case we want to do some simple parsing. Return the array of matches,
or NULL if there aren't any. */
-extern char **completion_matches(char *,char *(*)(char *,int));
+/*extern char **completion_matches(char *,char *(*)(char *,int));*/
static char **rl_completion(char *text, int start, int end) {
return completion_matches(text, rl_completion_words);
}
--- ./o/sfaslelf.c.orig Wed Jul 24 20:05:53 2002
+++ ./o/sfaslelf.c Sat Sep 13 23:52:25 2003
@@ -23,7 +23,7 @@
*/
-#ifndef __linux__
+#if !defined(__linux__) && !defined(__FreeBSD__)
#define ELF_TARGET_SPARC 1
#endif
@@ -83,7 +83,7 @@
if (!(symin=fopen(symfile,"r")))
{perror(symfile);exit(1);};
if(!fread((char *)&tab,sizeof(tab),1,symin))
- FEerror("No header",0,0);
+ FEerror("No header",0);
symbols=malloc(tab.tot_leng);
c_table.alloc_length=( (PTABLE_EXTRA+ tab.n_symbols));
(c_table.ptable) = (TABL *) malloc(sizeof(struct node) *
c_table.alloc_length);
@@ -196,7 +196,7 @@
file = fileno(fp);
if (fstat (file, &stat_buf) == -1)
- FEerror ("Can't fstat(~a): errno %d\n", 1,faslfile);
+ FEerror ("Can't fstat(~a): errno %d\n", 2,faslfile,0);
if (use_mmap) {
@@ -303,7 +303,7 @@
relocate_symbols(symbol_table,nsyms,file_h->e_shnum,&init_address);
if (init_address < 0)
- { FEerror(0,"Init address not found ");
+ { FEerror("Init address not found ",0);
}
{
@@ -317,7 +317,7 @@
{
int index_to_relocate = shp->sh_info;
if (symtab_index != shp->sh_link)
- FEerror("unexpected symbol table used");
+ FEerror("unexpected symbol table used",0);
the_start = start_address + section[index_to_relocate].start;
}
/* else if (shp->sh_type == SHT_REL */
@@ -332,7 +332,7 @@
else if ( (shp->sh_type == SHT_REL) || (shp->sh_type == SHT_RELA) )
{ if (get_section_number(".rel.stab") == j)
continue;
- FEerror("unknown rel type");
+ FEerror("unknown rel type",0);
}
else
continue;
@@ -520,7 +520,7 @@
else if (sh_type == SHT_REL)
a = 0;
else {
- FEerror("relocate() error: unknown sh_type in ELF object");
+ FEerror("relocate() error: unknown sh_type in ELF object",0);
a=0;
}
b = (unsigned int) the_start;
@@ -540,9 +540,9 @@
/* do_bfd_reloc(ELF32_R_TYPE(reloc_info->r_info),s+a,(unsigned int
*)where); */
/* #else */
switch(ELF32_R_TYPE(reloc_info->r_info)){
-#if (defined(__svr4__) || defined(__linux__)) && defined(__i386__)
+#if (defined(__svr4__) || defined(__linux__) || defined(__FreeBSD__)) &&
defined(__i386__)
case R_386_NONE:
- FEerror("Unsupported ELF type R_386_NONE");
+ FEerror("Unsupported ELF type R_386_NONE",0);
break;
case R_386_32:
@@ -556,40 +556,40 @@
break;
case R_386_GOT32:
- FEerror("Unsupported ELF type R_386_GOY32");
+ FEerror("Unsupported ELF type R_386_GOY32",0);
break;
case R_386_PLT32:
- FEerror("Unsupported ELF type R_386_PLT32");
+ FEerror("Unsupported ELF type R_386_PLT32",0);
break;
case R_386_COPY:
- FEerror("Unsupported ELF type R_386_COPY");
+ FEerror("Unsupported ELF type R_386_COPY",0);
break;
case R_386_GLOB_DAT:
- FEerror("Unsupported ELF type R_386_GLOB_DAT");
+ FEerror("Unsupported ELF type R_386_GLOB_DAT",0);
break;
case R_386_JMP_SLOT:
- FEerror("Unsupported ELF type R_386_JMP_SLOT");
+ FEerror("Unsupported ELF type R_386_JMP_SLOT",0);
break;
case R_386_RELATIVE:
- FEerror("Unsupported ELF type R_386_RELATIVE");
+ FEerror("Unsupported ELF type R_386_RELATIVE",0);
break;
case R_386_GOTOFF:
- FEerror("Unsupported ELF type R_386_GOTOFF");
+ FEerror("Unsupported ELF type R_386_GOTOFF",0);
break;
case R_386_GOTPC:
- FEerror("Unsupported ELF type R_386_GOTPC");
+ FEerror("Unsupported ELF type R_386_GOTPC",0);
break;
#ifdef R_386_NUM
case R_386_NUM:
- FEerror("Unsupported ELF type R_386_NUM");
+ FEerror("Unsupported ELF type R_386_NUM",0);
break;
#endif
@@ -657,7 +657,7 @@
fflush(stdout);
}
}
- else{FEerror("symbol table not loaded",0,0);}
+ else{FEerror("symbol table not loaded",0);}
}
static void
--- ./o/unixfasl.c.orig Sat Feb 15 00:38:28 2003
+++ ./o/unixfasl.c Sat Sep 13 23:52:25 2003
@@ -282,7 +282,7 @@
static int
faslink(object faslfile, object ldargstring)
{
-#if defined(__linux__) && defined(__ELF__)
+#if (defined(__linux__) || defined(__FreeBSD__)) && defined(__ELF__)
FEerror("faslink() not supported for ELF yet",0);
return 0;
#else
--- ./unixport/rsym_elf.c.orig Thu Jul 25 22:49:47 2002
+++ ./unixport/rsym_elf.c Sat Sep 13 23:52:25 2003
@@ -34,9 +34,6 @@
int text_index,data_index,bss_index,sbss_index;
#undef SYM_NAME
#undef EXT_and_TEXT_BSS_DAT
-#define mjoin(a,b) a ## b
-#define Mjoin(a,b) mjoin(a,b)
-#define ELFW(a) Mjoin(ELF,Mjoin(__ELF_NATIVE_CLASS,Mjoin(_,a)))
int nsyms;
char *my_string_table;
@@ -136,7 +133,6 @@
unsigned int i;
FILE *fp;
int symsize;
- extern char *malloc();
fp = fopen(filename, RDONLY);