Merge from libgcj. Merged patches from net. See ChangeLog for details.
This commit is contained in:
140
libffi/ChangeLog
140
libffi/ChangeLog
@@ -1,3 +1,120 @@
|
|||||||
|
2000-04-16 Anthony Green <green@redhat.com>
|
||||||
|
|
||||||
|
* README: Credit updates.
|
||||||
|
|
||||||
|
* include/ffi.h.in: Important size fixes from William Knottenblet
|
||||||
|
(wjk@doc.ic.ac.uk).
|
||||||
|
|
||||||
|
2000-04-16 Anthony Green <green@redhat.com>
|
||||||
|
|
||||||
|
* configure: Rebuilt.
|
||||||
|
* configure.in: Change i*86-pc-linux* to i*86-*-linux*.
|
||||||
|
|
||||||
|
2000-04-14 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
* include/ffi.h.in (SPARC64): Define for 64bit SPARC builds.
|
||||||
|
Set SPARC FFI_DEFAULT_ABI based on SPARC64 define.
|
||||||
|
* src/sparc/ffi.c (ffi_prep_args_v8): Renamed from ffi_prep_args.
|
||||||
|
Replace all void * sizeofs with sizeof(int).
|
||||||
|
Only compare type with FFI_TYPE_LONGDOUBLE if LONGDOUBLE is
|
||||||
|
different than DOUBLE.
|
||||||
|
Remove FFI_TYPE_SINT32 and FFI_TYPE_UINT32 cases (handled elsewhere).
|
||||||
|
(ffi_prep_args_v9): New function.
|
||||||
|
(ffi_prep_cif_machdep): Handle V9 ABI and long long on V8.
|
||||||
|
(ffi_V9_return_struct): New function.
|
||||||
|
(ffi_call): Handle FFI_V9 ABI from 64bit code and FFI_V8 ABI from
|
||||||
|
32bit code (not yet cross-arch calls).
|
||||||
|
* src/sparc/v8.S: Add struct return delay nop.
|
||||||
|
Handle long long.
|
||||||
|
* src/sparc/v9.S: New file.
|
||||||
|
* src/prep_cif.c (ffi_prep_cif): Return structure pointer
|
||||||
|
is used on sparc64 only for structures larger than 32 bytes.
|
||||||
|
Pass by reference for structures is done for structure arguments
|
||||||
|
larger than 16 bytes.
|
||||||
|
* src/ffitest.c (main): Use 64bit rint on sparc64.
|
||||||
|
Run long long tests on sparc.
|
||||||
|
* src/types.c (FFI_TYPE_POINTER): Pointer is 64bit on alpha and
|
||||||
|
sparc64.
|
||||||
|
(FFI_TYPE_LONGDOUBLE): long double is 128 bit aligned to 128 bits
|
||||||
|
on sparc64.
|
||||||
|
* configure.in (sparc-*-linux*): New supported target.
|
||||||
|
(sparc64-*-linux*): Likewise.
|
||||||
|
* configure: Rebuilt.
|
||||||
|
* Makefile.am: Add v9.S to SPARC files.
|
||||||
|
* Makefile.in: Likewise.
|
||||||
|
(LINK): Surround $(CCLD) into double quotes, so that multilib
|
||||||
|
compiles work correctly.
|
||||||
|
|
||||||
|
2000-04-04 Alexandre Petit-Bianco <apbianco@cygnus.com>
|
||||||
|
|
||||||
|
* configure: Rebuilt.
|
||||||
|
|
||||||
|
* configure.in: (i*86-*-solaris*): New libffi target. Patch
|
||||||
|
proposed by Bryce McKinlay.
|
||||||
|
|
||||||
|
2000-03-20 Tom Tromey <tromey@cygnus.com>
|
||||||
|
|
||||||
|
* Makefile.in: Hand edit for java_raw_api.lo.
|
||||||
|
|
||||||
|
2000-03-08 Bryce McKinlay <bryce@albatross.co.nz>
|
||||||
|
|
||||||
|
* config.guess, config.sub: Update from the gcc tree.
|
||||||
|
Fix for PR libgcj/168.
|
||||||
|
|
||||||
|
2000-03-03 Tom Tromey <tromey@cygnus.com>
|
||||||
|
|
||||||
|
* Makefile.in: Fixed ia64 by hand.
|
||||||
|
|
||||||
|
* configure: Rebuilt.
|
||||||
|
* configure.in (--enable-multilib): New option.
|
||||||
|
(libffi_basedir): New subst.
|
||||||
|
(AC_OUTPUT): Added multilib code.
|
||||||
|
|
||||||
|
2000-03-02 Tom Tromey <tromey@cygnus.com>
|
||||||
|
|
||||||
|
* Makefile.in: Rebuilt.
|
||||||
|
* Makefile.am (TARGET_SRC_IA64): Use `ia64', not `alpha', as
|
||||||
|
directory name.
|
||||||
|
|
||||||
|
2000-02-25 Hans Boehm <boehm@acm.org>
|
||||||
|
|
||||||
|
* src/ia64/ffi.c, src/ia64/ia64_flags.h, src/ia64/unix.S: New
|
||||||
|
files.
|
||||||
|
* src/raw_api.c (ffi_translate_args): Fixed typo in argument
|
||||||
|
list.
|
||||||
|
(ffi_prep_raw_closure): Use ffi_translate_args, not
|
||||||
|
ffi_closure_translate.
|
||||||
|
* src/java_raw_api.c: New file.
|
||||||
|
* src/ffitest.c (closure_test_fn): New function.
|
||||||
|
(main): Define `rint' as long long on IA64. Added new test when
|
||||||
|
FFI_CLOSURES is defined.
|
||||||
|
* include/ffi.h.in (ALIGN): Use size_t, not unsigned.
|
||||||
|
(ffi_abi): Recognize IA64.
|
||||||
|
(ffi_raw): Added `flt' field.
|
||||||
|
Added "Java raw API" code.
|
||||||
|
* configure.in: Recognize ia64.
|
||||||
|
* Makefile.am (TARGET_SRC_IA64): New macro.
|
||||||
|
(libffi_la_common_SOURCES): Added java_raw_api.c.
|
||||||
|
(libffi_la_SOURCES): Define in IA64 case.
|
||||||
|
|
||||||
|
2000-01-04 Tom Tromey <tromey@cygnus.com>
|
||||||
|
|
||||||
|
* Makefile.in: Rebuilt with newer automake.
|
||||||
|
|
||||||
|
1999-12-31 Tom Tromey <tromey@cygnus.com>
|
||||||
|
|
||||||
|
* Makefile.am (INCLUDES): Added -I$(top_srcdir)/src.
|
||||||
|
|
||||||
|
1999-09-01 Tom Tromey <tromey@cygnus.com>
|
||||||
|
|
||||||
|
* include/ffi.h.in: Removed PACKAGE and VERSION defines and
|
||||||
|
undefs.
|
||||||
|
* fficonfig.h.in: Rebuilt.
|
||||||
|
* configure: Rebuilt.
|
||||||
|
* configure.in: Pass 3rd argument to AM_INIT_AUTOMAKE.
|
||||||
|
Use AM_PROG_LIBTOOL (automake 1.4 compatibility).
|
||||||
|
* acconfig.h: Don't #undef PACKAGE or VERSION.
|
||||||
|
|
||||||
1999-08-09 Anthony Green <green@cygnus.com>
|
1999-08-09 Anthony Green <green@cygnus.com>
|
||||||
|
|
||||||
* include/ffi.h.in: Try to work around messy header problem
|
* include/ffi.h.in: Try to work around messy header problem
|
||||||
@@ -11,6 +128,29 @@
|
|||||||
|
|
||||||
* src/x86/ffi.c (ffi_raw_call): Rename.
|
* src/x86/ffi.c (ffi_raw_call): Rename.
|
||||||
|
|
||||||
|
Mon Aug 9 18:33:38 1999 Rainer Orth <ro@TechFak.Uni-Bielefeld.DE>
|
||||||
|
|
||||||
|
* include/Makefile.in: Rebuilt.
|
||||||
|
* Makefile.in: Rebuilt
|
||||||
|
* Makefile.am (toolexeclibdir): Add $(MULTISUBDIR) even for native
|
||||||
|
builds.
|
||||||
|
Use USE_LIBDIR.
|
||||||
|
|
||||||
|
* configure: Rebuilt.
|
||||||
|
* configure.in (USE_LIBDIR): Define for native builds.
|
||||||
|
Use lowercase in configure --help explanations.
|
||||||
|
|
||||||
|
1999-08-08 Anthony Green <green@cygnus.com>
|
||||||
|
|
||||||
|
* include/ffi.h.in (FFI_FN): Remove `...'.
|
||||||
|
|
||||||
|
1999-08-08 Anthony Green <green@cygnus.com>
|
||||||
|
|
||||||
|
* Makefile.in: Rebuilt.
|
||||||
|
* Makefile.am (AM_CFLAGS): Compile with -fexceptions.
|
||||||
|
|
||||||
|
* src/x86/sysv.S: Add exception handling metadata.
|
||||||
|
|
||||||
1999-08-02 Kresten Krab Thorup <krab@dominiq.is.s.u-tokyo.ac.jp>
|
1999-08-02 Kresten Krab Thorup <krab@dominiq.is.s.u-tokyo.ac.jp>
|
||||||
|
|
||||||
* src/x86/ffi.c (ffi_closure_SYSV): New function.
|
* src/x86/ffi.c (ffi_closure_SYSV): New function.
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ AUTOMAKE_OPTIONS = cygnus
|
|||||||
|
|
||||||
EXTRA_DIST = LICENSE ChangeLog.v1 src/mips/ffi.c src/mips/n32.S \
|
EXTRA_DIST = LICENSE ChangeLog.v1 src/mips/ffi.c src/mips/n32.S \
|
||||||
src/mips/n32.s src/mips/o32.S src/mips/o32.s \
|
src/mips/n32.s src/mips/o32.S src/mips/o32.s \
|
||||||
src/sparc/ffi.c src/sparc/v8.S \
|
src/sparc/ffi.c src/sparc/v8.S src/sparc/v9.S \
|
||||||
src/x86/ffi.c src/x86/sysv.S \
|
src/x86/ffi.c src/x86/sysv.S \
|
||||||
src/alpha/ffi.c src/alpha/osf.S \
|
src/alpha/ffi.c src/alpha/osf.S \
|
||||||
src/m68k/ffi.c src/m68k/sysv.S \
|
src/m68k/ffi.c src/m68k/sysv.S \
|
||||||
@@ -21,11 +21,15 @@ MULTISUBDIR =
|
|||||||
MULTIDO = true
|
MULTIDO = true
|
||||||
MULTICLEAN = true
|
MULTICLEAN = true
|
||||||
|
|
||||||
|
## Install a library built with a cross compiler in tooldir, not
|
||||||
|
## libdir.
|
||||||
|
if USE_LIBDIR
|
||||||
|
toolexeclibdir = $(libdir)$(MULTISUBDIR)
|
||||||
|
else
|
||||||
toolexecdir = $(exec_prefix)/$(target_alias)
|
toolexecdir = $(exec_prefix)/$(target_alias)
|
||||||
toolexeclibdir = $(toolexecdir)/lib$(MULTISUBDIR)
|
toolexeclibdir = $(toolexecdir)/lib$(MULTISUBDIR)
|
||||||
|
endif
|
||||||
|
|
||||||
## We don't use `libz.la' because we don't want to conflict with a
|
|
||||||
## system library of that name.
|
|
||||||
toolexeclib_LTLIBRARIES = libffi.la
|
toolexeclib_LTLIBRARIES = libffi.la
|
||||||
|
|
||||||
noinst_PROGRAMS = ffitest
|
noinst_PROGRAMS = ffitest
|
||||||
@@ -36,15 +40,17 @@ ffitest_LDADD = libffi.la
|
|||||||
TARGET_SRC_MIPS_GCC = src/mips/ffi.c src/mips/o32.S src/mips/n32.S
|
TARGET_SRC_MIPS_GCC = src/mips/ffi.c src/mips/o32.S src/mips/n32.S
|
||||||
TARGET_SRC_MIPS_SGI = src/mips/ffi.c src/mips/o32.s src/mips/n32.s
|
TARGET_SRC_MIPS_SGI = src/mips/ffi.c src/mips/o32.s src/mips/n32.s
|
||||||
TARGET_SRC_X86 = src/x86/ffi.c src/x86/sysv.S
|
TARGET_SRC_X86 = src/x86/ffi.c src/x86/sysv.S
|
||||||
TARGET_SRC_SPARC = src/sparc/ffi.c src/sparc/v8.S
|
TARGET_SRC_SPARC = src/sparc/ffi.c src/sparc/v8.S src/sparc/v9.S
|
||||||
TARGET_SRC_ALPHA = src/alpha/ffi.c src/alpha/osf.S
|
TARGET_SRC_ALPHA = src/alpha/ffi.c src/alpha/osf.S
|
||||||
|
TARGET_SRC_IA64 = src/ia64/ffi.c src/ia64/unix.S
|
||||||
TARGET_SRC_M68K = src/m68k/ffi.c src/m68k/sysv.S
|
TARGET_SRC_M68K = src/m68k/ffi.c src/m68k/sysv.S
|
||||||
TARGET_SRC_POWERPC = src/powerpc/ffi.c src/powerpc/sysv.S
|
TARGET_SRC_POWERPC = src/powerpc/ffi.c src/powerpc/sysv.S
|
||||||
TARGET_SRC_ARM = src/arm/sysv.S src/arm/ffi.c
|
TARGET_SRC_ARM = src/arm/sysv.S src/arm/ffi.c
|
||||||
|
|
||||||
##libffi_la_SOURCES = src/debug.c src/prep_cif.c src/types.c $(TARGET_SRC_@TARGET@)
|
##libffi_la_SOURCES = src/debug.c src/prep_cif.c src/types.c $(TARGET_SRC_@TARGET@)
|
||||||
## Work around automake deficiency
|
## Work around automake deficiency
|
||||||
libffi_la_common_SOURCES = src/debug.c src/prep_cif.c src/types.c src/raw_api.c
|
libffi_la_common_SOURCES = src/debug.c src/prep_cif.c src/types.c \
|
||||||
|
src/raw_api.c src/java_raw_api.c
|
||||||
if MIPS_GCC
|
if MIPS_GCC
|
||||||
libffi_la_SOURCES = $(libffi_la_common_SOURCES) $(TARGET_SRC_MIPS_GCC)
|
libffi_la_SOURCES = $(libffi_la_common_SOURCES) $(TARGET_SRC_MIPS_GCC)
|
||||||
endif
|
endif
|
||||||
@@ -60,6 +66,9 @@ endif
|
|||||||
if ALPHA
|
if ALPHA
|
||||||
libffi_la_SOURCES = $(libffi_la_common_SOURCES) $(TARGET_SRC_ALPHA)
|
libffi_la_SOURCES = $(libffi_la_common_SOURCES) $(TARGET_SRC_ALPHA)
|
||||||
endif
|
endif
|
||||||
|
if IA64
|
||||||
|
libffi_la_SOURCES = $(libffi_la_common_SOURCES) $(TARGET_SRC_IA64)
|
||||||
|
endif
|
||||||
if M68K
|
if M68K
|
||||||
libffi_la_SOURCES = $(libffi_la_common_SOURCES) $(TARGET_SRC_M68K)
|
libffi_la_SOURCES = $(libffi_la_common_SOURCES) $(TARGET_SRC_M68K)
|
||||||
endif
|
endif
|
||||||
@@ -70,6 +79,8 @@ if ARM
|
|||||||
libffi_la_SOURCES = $(libffi_la_common_SOURCES) $(TARGET_SRC_ARM)
|
libffi_la_SOURCES = $(libffi_la_common_SOURCES) $(TARGET_SRC_ARM)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
AM_CFLAGS = -fexceptions
|
||||||
|
|
||||||
libffi_la_LDFLAGS = -release $(VERSION)
|
libffi_la_LDFLAGS = -release $(VERSION)
|
||||||
|
|
||||||
INCLUDES = -I$(top_srcdir)/include -Iinclude
|
INCLUDES = -I$(top_srcdir)/include -Iinclude -I$(top_srcdir)/src
|
||||||
|
|||||||
@@ -70,20 +70,21 @@ LN_S = @LN_S@
|
|||||||
MAINT = @MAINT@
|
MAINT = @MAINT@
|
||||||
MAKEINFO = @MAKEINFO@
|
MAKEINFO = @MAKEINFO@
|
||||||
NM = @NM@
|
NM = @NM@
|
||||||
|
OBJDUMP = @OBJDUMP@
|
||||||
PACKAGE = @PACKAGE@
|
PACKAGE = @PACKAGE@
|
||||||
RANLIB = @RANLIB@
|
RANLIB = @RANLIB@
|
||||||
SHELL = @SHELL@
|
SHELL = @SHELL@
|
||||||
TARGET = @TARGET@
|
TARGET = @TARGET@
|
||||||
TARGETDIR = @TARGETDIR@
|
TARGETDIR = @TARGETDIR@
|
||||||
USE_SYMBOL_UNDERSCORE = @USE_SYMBOL_UNDERSCORE@
|
|
||||||
VERSION = @VERSION@
|
VERSION = @VERSION@
|
||||||
|
install_sh = @install_sh@
|
||||||
|
|
||||||
|
|
||||||
AUTOMAKE_OPTIONS = cygnus
|
AUTOMAKE_OPTIONS = cygnus
|
||||||
|
|
||||||
EXTRA_DIST = LICENSE ChangeLog.v1 src/mips/ffi.c src/mips/n32.S \
|
EXTRA_DIST = LICENSE ChangeLog.v1 src/mips/ffi.c src/mips/n32.S \
|
||||||
src/mips/n32.s src/mips/o32.S src/mips/o32.s \
|
src/mips/n32.s src/mips/o32.S src/mips/o32.s \
|
||||||
src/sparc/ffi.c src/sparc/v8.S \
|
src/sparc/ffi.c src/sparc/v8.S src/sparc/v9.S \
|
||||||
src/x86/ffi.c src/x86/sysv.S \
|
src/x86/ffi.c src/x86/sysv.S \
|
||||||
src/alpha/ffi.c src/alpha/osf.S \
|
src/alpha/ffi.c src/alpha/osf.S \
|
||||||
src/m68k/ffi.c src/m68k/sysv.S \
|
src/m68k/ffi.c src/m68k/sysv.S \
|
||||||
@@ -100,9 +101,9 @@ MULTIDIRS =
|
|||||||
MULTISUBDIR =
|
MULTISUBDIR =
|
||||||
MULTIDO = true
|
MULTIDO = true
|
||||||
MULTICLEAN = true
|
MULTICLEAN = true
|
||||||
|
@USE_LIBDIR_TRUE@toolexeclibdir = @USE_LIBDIR_TRUE@$(libdir)$(MULTISUBDIR)
|
||||||
toolexecdir = $(exec_prefix)/$(target_alias)
|
@USE_LIBDIR_FALSE@toolexeclibdir = @USE_LIBDIR_FALSE@$(toolexecdir)/lib$(MULTISUBDIR)
|
||||||
toolexeclibdir = $(toolexecdir)/lib$(MULTISUBDIR)
|
@USE_LIBDIR_FALSE@toolexecdir = @USE_LIBDIR_FALSE@$(exec_prefix)/$(target_alias)
|
||||||
|
|
||||||
toolexeclib_LTLIBRARIES = libffi.la
|
toolexeclib_LTLIBRARIES = libffi.la
|
||||||
|
|
||||||
@@ -114,25 +115,29 @@ ffitest_LDADD = libffi.la
|
|||||||
TARGET_SRC_MIPS_GCC = src/mips/ffi.c src/mips/o32.S src/mips/n32.S
|
TARGET_SRC_MIPS_GCC = src/mips/ffi.c src/mips/o32.S src/mips/n32.S
|
||||||
TARGET_SRC_MIPS_SGI = src/mips/ffi.c src/mips/o32.s src/mips/n32.s
|
TARGET_SRC_MIPS_SGI = src/mips/ffi.c src/mips/o32.s src/mips/n32.s
|
||||||
TARGET_SRC_X86 = src/x86/ffi.c src/x86/sysv.S
|
TARGET_SRC_X86 = src/x86/ffi.c src/x86/sysv.S
|
||||||
TARGET_SRC_SPARC = src/sparc/ffi.c src/sparc/v8.S
|
TARGET_SRC_SPARC = src/sparc/ffi.c src/sparc/v8.S src/sparc/v9.S
|
||||||
TARGET_SRC_ALPHA = src/alpha/ffi.c src/alpha/osf.S
|
TARGET_SRC_ALPHA = src/alpha/ffi.c src/alpha/osf.S
|
||||||
|
TARGET_SRC_IA64 = src/ia64/ffi.c src/ia64/unix.S
|
||||||
TARGET_SRC_M68K = src/m68k/ffi.c src/m68k/sysv.S
|
TARGET_SRC_M68K = src/m68k/ffi.c src/m68k/sysv.S
|
||||||
TARGET_SRC_POWERPC = src/powerpc/ffi.c src/powerpc/sysv.S
|
TARGET_SRC_POWERPC = src/powerpc/ffi.c src/powerpc/sysv.S
|
||||||
TARGET_SRC_ARM = src/arm/sysv.S src/arm/ffi.c
|
TARGET_SRC_ARM = src/arm/sysv.S src/arm/ffi.c
|
||||||
|
|
||||||
libffi_la_common_SOURCES = src/debug.c src/prep_cif.c src/types.c src/raw_api.c
|
libffi_la_common_SOURCES = src/debug.c src/prep_cif.c src/types.c src/raw_api.c src/java_raw_api.c
|
||||||
@MIPS_GCC_TRUE@libffi_la_SOURCES = @MIPS_GCC_TRUE@$(libffi_la_common_SOURCES) $(TARGET_SRC_MIPS_GCC)
|
@MIPS_GCC_TRUE@libffi_la_SOURCES = @MIPS_GCC_TRUE@$(libffi_la_common_SOURCES) $(TARGET_SRC_MIPS_GCC)
|
||||||
@MIPS_SGI_TRUE@libffi_la_SOURCES = @MIPS_SGI_TRUE@$(libffi_la_common_SOURCES) $(TARGET_SRC_MIPS_SGI)
|
@MIPS_SGI_TRUE@libffi_la_SOURCES = @MIPS_SGI_TRUE@$(libffi_la_common_SOURCES) $(TARGET_SRC_MIPS_SGI)
|
||||||
@X86_TRUE@libffi_la_SOURCES = @X86_TRUE@$(libffi_la_common_SOURCES) $(TARGET_SRC_X86)
|
@X86_TRUE@libffi_la_SOURCES = @X86_TRUE@$(libffi_la_common_SOURCES) $(TARGET_SRC_X86)
|
||||||
@SPARC_TRUE@libffi_la_SOURCES = @SPARC_TRUE@$(libffi_la_common_SOURCES) $(TARGET_SRC_SPARC)
|
@SPARC_TRUE@libffi_la_SOURCES = @SPARC_TRUE@$(libffi_la_common_SOURCES) $(TARGET_SRC_SPARC)
|
||||||
@ALPHA_TRUE@libffi_la_SOURCES = @ALPHA_TRUE@$(libffi_la_common_SOURCES) $(TARGET_SRC_ALPHA)
|
@ALPHA_TRUE@libffi_la_SOURCES = @ALPHA_TRUE@$(libffi_la_common_SOURCES) $(TARGET_SRC_ALPHA)
|
||||||
|
@IA64_TRUE@libffi_la_SOURCES = $(libffi_la_common_SOURCES) $(TARGET_SRC_IA64)
|
||||||
@M68K_TRUE@libffi_la_SOURCES = @M68K_TRUE@$(libffi_la_common_SOURCES) $(TARGET_SRC_M68K)
|
@M68K_TRUE@libffi_la_SOURCES = @M68K_TRUE@$(libffi_la_common_SOURCES) $(TARGET_SRC_M68K)
|
||||||
@POWERPC_TRUE@libffi_la_SOURCES = @POWERPC_TRUE@$(libffi_la_common_SOURCES) $(TARGET_SRC_POWERPC)
|
@POWERPC_TRUE@libffi_la_SOURCES = @POWERPC_TRUE@$(libffi_la_common_SOURCES) $(TARGET_SRC_POWERPC)
|
||||||
@ARM_TRUE@libffi_la_SOURCES = @ARM_TRUE@$(libffi_la_common_SOURCES) $(TARGET_SRC_ARM)
|
@ARM_TRUE@libffi_la_SOURCES = @ARM_TRUE@$(libffi_la_common_SOURCES) $(TARGET_SRC_ARM)
|
||||||
|
|
||||||
|
AM_CFLAGS = -fexceptions
|
||||||
|
|
||||||
libffi_la_LDFLAGS = -release $(VERSION)
|
libffi_la_LDFLAGS = -release $(VERSION)
|
||||||
|
|
||||||
INCLUDES = -I$(top_srcdir)/include -Iinclude
|
INCLUDES = -I$(top_srcdir)/include -Iinclude -I$(top_srcdir)/src
|
||||||
subdir = .
|
subdir = .
|
||||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||||
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
|
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
|
||||||
@@ -147,21 +152,21 @@ LDFLAGS = @LDFLAGS@
|
|||||||
LIBS = @LIBS@
|
LIBS = @LIBS@
|
||||||
libffi_la_LIBADD =
|
libffi_la_LIBADD =
|
||||||
@ALPHA_TRUE@am_libffi_la_OBJECTS = debug.lo prep_cif.lo types.lo \
|
@ALPHA_TRUE@am_libffi_la_OBJECTS = debug.lo prep_cif.lo types.lo \
|
||||||
@ALPHA_TRUE@raw_api.lo ffi.lo osf.lo
|
@ALPHA_TRUE@raw_api.lo java_raw_api.lo ffi.lo osf.lo
|
||||||
@ARM_TRUE@am_libffi_la_OBJECTS = debug.lo prep_cif.lo types.lo \
|
@ARM_TRUE@am_libffi_la_OBJECTS = debug.lo prep_cif.lo types.lo \
|
||||||
@ARM_TRUE@raw_api.lo sysv.lo ffi.lo
|
@ARM_TRUE@raw_api.lo java_raw_api.lo sysv.lo ffi.lo
|
||||||
@M68K_TRUE@am_libffi_la_OBJECTS = debug.lo prep_cif.lo types.lo \
|
@M68K_TRUE@am_libffi_la_OBJECTS = debug.lo prep_cif.lo types.lo \
|
||||||
@M68K_TRUE@raw_api.lo ffi.lo sysv.lo
|
@M68K_TRUE@raw_api.lo java_raw_api.lo ffi.lo sysv.lo
|
||||||
@MIPS_GCC_TRUE@am_libffi_la_OBJECTS = debug.lo prep_cif.lo types.lo \
|
@MIPS_GCC_TRUE@am_libffi_la_OBJECTS = debug.lo prep_cif.lo types.lo \
|
||||||
@MIPS_GCC_TRUE@raw_api.lo ffi.lo o32.lo n32.lo
|
@MIPS_GCC_TRUE@raw_api.lo java_raw_api.lo ffi.lo o32.lo n32.lo
|
||||||
@MIPS_SGI_TRUE@am_libffi_la_OBJECTS = debug.lo prep_cif.lo types.lo \
|
@MIPS_SGI_TRUE@am_libffi_la_OBJECTS = debug.lo prep_cif.lo types.lo \
|
||||||
@MIPS_SGI_TRUE@raw_api.lo ffi.lo o32.lo n32.lo
|
@MIPS_SGI_TRUE@raw_api.lo java_raw_api.lo ffi.lo o32.lo n32.lo
|
||||||
@POWERPC_TRUE@am_libffi_la_OBJECTS = debug.lo prep_cif.lo types.lo \
|
@POWERPC_TRUE@am_libffi_la_OBJECTS = debug.lo prep_cif.lo types.lo \
|
||||||
@POWERPC_TRUE@raw_api.lo ffi.lo sysv.lo
|
@POWERPC_TRUE@raw_api.lo java_raw_api.lo ffi.lo sysv.lo
|
||||||
@SPARC_TRUE@am_libffi_la_OBJECTS = debug.lo prep_cif.lo types.lo \
|
@SPARC_TRUE@am_libffi_la_OBJECTS = debug.lo prep_cif.lo types.lo \
|
||||||
@SPARC_TRUE@raw_api.lo ffi.lo v8.lo
|
@SPARC_TRUE@raw_api.lo java_raw_api.lo ffi.lo v8.lo v9.lo
|
||||||
@X86_TRUE@am_libffi_la_OBJECTS = debug.lo prep_cif.lo types.lo \
|
@X86_TRUE@am_libffi_la_OBJECTS = debug.lo prep_cif.lo types.lo \
|
||||||
@X86_TRUE@raw_api.lo ffi.lo sysv.lo
|
@X86_TRUE@raw_api.lo java_raw_api.lo ffi.lo sysv.lo
|
||||||
libffi_la_OBJECTS = $(am_libffi_la_OBJECTS)
|
libffi_la_OBJECTS = $(am_libffi_la_OBJECTS)
|
||||||
noinst_PROGRAMS = ffitest$(EXEEXT)
|
noinst_PROGRAMS = ffitest$(EXEEXT)
|
||||||
PROGRAMS = $(noinst_PROGRAMS)
|
PROGRAMS = $(noinst_PROGRAMS)
|
||||||
@@ -174,7 +179,7 @@ COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CF
|
|||||||
LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
|
LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
|
||||||
CFLAGS = @CFLAGS@
|
CFLAGS = @CFLAGS@
|
||||||
CCLD = $(CC)
|
CCLD = $(CC)
|
||||||
LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
|
LINK = $(LIBTOOL) --mode=link "$(CCLD)" $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
|
||||||
DIST_SOURCES = $(libffi_la_SOURCES) $(ffitest_SOURCES)
|
DIST_SOURCES = $(libffi_la_SOURCES) $(ffitest_SOURCES)
|
||||||
DIST_COMMON = README ./stamp-h.in ChangeLog Makefile.am Makefile.in \
|
DIST_COMMON = README ./stamp-h.in ChangeLog Makefile.am Makefile.in \
|
||||||
acconfig.h aclocal.m4 config.guess config.sub configure configure.in \
|
acconfig.h aclocal.m4 config.guess config.sub configure configure.in \
|
||||||
@@ -184,6 +189,7 @@ fficonfig.h.in install-sh ltconfig ltmain.sh missing mkinstalldirs
|
|||||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||||
|
|
||||||
GZIP_ENV = --best
|
GZIP_ENV = --best
|
||||||
|
depcomp =
|
||||||
SOURCES = $(libffi_la_SOURCES) $(ffitest_SOURCES)
|
SOURCES = $(libffi_la_SOURCES) $(ffitest_SOURCES)
|
||||||
OBJECTS = $(am_libffi_la_OBJECTS) $(am_ffitest_OBJECTS)
|
OBJECTS = $(am_libffi_la_OBJECTS) $(am_ffitest_OBJECTS)
|
||||||
|
|
||||||
@@ -251,8 +257,8 @@ install-toolexeclibLTLIBRARIES: $(toolexeclib_LTLIBRARIES)
|
|||||||
$(mkinstalldirs) $(DESTDIR)$(toolexeclibdir)
|
$(mkinstalldirs) $(DESTDIR)$(toolexeclibdir)
|
||||||
@list='$(toolexeclib_LTLIBRARIES)'; for p in $$list; do \
|
@list='$(toolexeclib_LTLIBRARIES)'; for p in $$list; do \
|
||||||
if test -f $$p; then \
|
if test -f $$p; then \
|
||||||
echo "$(LIBTOOL) --mode=install $(INSTALL) $$p $(DESTDIR)$(toolexeclibdir)/$$p"; \
|
echo " $(LIBTOOL) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$p $(DESTDIR)$(toolexeclibdir)/$$p"; \
|
||||||
$(LIBTOOL) --mode=install $(INSTALL) $$p $(DESTDIR)$(toolexeclibdir)/$$p; \
|
$(LIBTOOL) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$p $(DESTDIR)$(toolexeclibdir)/$$p; \
|
||||||
else :; fi; \
|
else :; fi; \
|
||||||
done
|
done
|
||||||
|
|
||||||
@@ -286,12 +292,14 @@ debug.lo: src/debug.c
|
|||||||
prep_cif.lo: src/prep_cif.c
|
prep_cif.lo: src/prep_cif.c
|
||||||
types.lo: src/types.c
|
types.lo: src/types.c
|
||||||
raw_api.lo: src/raw_api.c
|
raw_api.lo: src/raw_api.c
|
||||||
|
java_raw_api.lo: src/java_raw_api.c
|
||||||
ffi.lo: src/alpha/ffi.c
|
ffi.lo: src/alpha/ffi.c
|
||||||
osf.lo: src/alpha/osf.S
|
osf.lo: src/alpha/osf.S
|
||||||
sysv.lo: src/arm/sysv.S
|
sysv.lo: src/arm/sysv.S
|
||||||
o32.lo: src/mips/o32.S
|
o32.lo: src/mips/o32.S
|
||||||
n32.lo: src/mips/n32.S
|
n32.lo: src/mips/n32.S
|
||||||
v8.lo: src/sparc/v8.S
|
v8.lo: src/sparc/v8.S
|
||||||
|
v9.lo: src/sparc/v9.S
|
||||||
|
|
||||||
libffi.la: $(libffi_la_OBJECTS) $(libffi_la_DEPENDENCIES)
|
libffi.la: $(libffi_la_OBJECTS) $(libffi_la_DEPENDENCIES)
|
||||||
$(LINK) -rpath $(toolexeclibdir) $(libffi_la_LDFLAGS) $(libffi_la_OBJECTS) $(libffi_la_LIBADD) $(LIBS)
|
$(LINK) -rpath $(toolexeclibdir) $(libffi_la_LDFLAGS) $(libffi_la_OBJECTS) $(libffi_la_LIBADD) $(LIBS)
|
||||||
@@ -324,23 +332,27 @@ ffitest$(EXEEXT): $(ffitest_OBJECTS) $(ffitest_DEPENDENCIES)
|
|||||||
|
|
||||||
tags: TAGS
|
tags: TAGS
|
||||||
|
|
||||||
ID: $(HEADERS) $(SOURCES) $(LISP)
|
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
|
||||||
list='$(SOURCES) $(HEADERS)'; \
|
list='$(SOURCES) $(HEADERS) $(TAGS_FILES)'; \
|
||||||
unique=`for i in $$list; do echo $$i; done | \
|
unique=`for i in $$list; do \
|
||||||
awk ' { files[$$0] = 1; } \
|
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||||
|
done | \
|
||||||
|
$(AWK) ' { files[$$0] = 1; } \
|
||||||
END { for (i in files) print i; }'`; \
|
END { for (i in files) print i; }'`; \
|
||||||
here=`pwd` && cd $(srcdir) \
|
mkid -f$$here/ID $$unique $(LISP)
|
||||||
&& mkid -f$$here/ID $$unique $(LISP)
|
|
||||||
|
|
||||||
TAGS: $(HEADERS) $(SOURCES) fficonfig.h.in $(TAGS_DEPENDENCIES) $(LISP)
|
TAGS: $(HEADERS) $(SOURCES) fficonfig.h.in $(TAGS_DEPENDENCIES) \
|
||||||
|
$(TAGS_FILES) $(LISP)
|
||||||
tags=; \
|
tags=; \
|
||||||
here=`pwd`; \
|
here=`pwd`; \
|
||||||
list='$(SOURCES) $(HEADERS)'; \
|
list='$(SOURCES) $(HEADERS) $(TAGS_FILES)'; \
|
||||||
unique=`for i in $$list; do echo $$i; done | \
|
unique=`for i in $$list; do \
|
||||||
awk ' { files[$$0] = 1; } \
|
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||||
|
done | \
|
||||||
|
$(AWK) ' { files[$$0] = 1; } \
|
||||||
END { for (i in files) print i; }'`; \
|
END { for (i in files) print i; }'`; \
|
||||||
test -z "$(ETAGS_ARGS)fficonfig.h.in$$unique$(LISP)$$tags" \
|
test -z "$(ETAGS_ARGS)fficonfig.h.in$$unique$(LISP)$$tags" \
|
||||||
|| (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags fficonfig.h.in $$unique $(LISP) -o $$here/TAGS)
|
|| etags $(ETAGS_ARGS) $$tags fficonfig.h.in $$unique $(LISP)
|
||||||
|
|
||||||
mostlyclean-tags:
|
mostlyclean-tags:
|
||||||
|
|
||||||
@@ -354,41 +366,56 @@ maintainer-clean-tags:
|
|||||||
distdir = $(PACKAGE)-$(VERSION)
|
distdir = $(PACKAGE)-$(VERSION)
|
||||||
top_distdir = $(distdir)
|
top_distdir = $(distdir)
|
||||||
|
|
||||||
|
|
||||||
# This target untars the dist file and tries a VPATH configuration. Then
|
# This target untars the dist file and tries a VPATH configuration. Then
|
||||||
# it guarantees that the distribution is self-contained by making another
|
# it guarantees that the distribution is self-contained by making another
|
||||||
# tarfile.
|
# tarfile.
|
||||||
distcheck: dist
|
distcheck: dist
|
||||||
-rm -rf $(distdir)
|
-chmod -R a+w $(distdir) > /dev/null 2>&1; rm -rf $(distdir)
|
||||||
GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(AMTAR) xf -
|
GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(AMTAR) xf -
|
||||||
|
chmod -R a-w $(distdir); chmod a+w $(distdir)
|
||||||
mkdir $(distdir)/=build
|
mkdir $(distdir)/=build
|
||||||
mkdir $(distdir)/=inst
|
mkdir $(distdir)/=inst
|
||||||
dc_install_base=`cd $(distdir)/=inst && pwd`; \
|
chmod a-w $(distdir)
|
||||||
cd $(distdir)/=build \
|
dc_install_base=`CDPATH=: && cd $(distdir)/=inst && pwd` \
|
||||||
|
&& cd $(distdir)/=build \
|
||||||
&& ../configure --srcdir=.. --prefix=$$dc_install_base \
|
&& ../configure --srcdir=.. --prefix=$$dc_install_base \
|
||||||
&& $(MAKE) $(AM_MAKEFLAGS) \
|
&& $(MAKE) $(AM_MAKEFLAGS) \
|
||||||
&& $(MAKE) $(AM_MAKEFLAGS) dvi \
|
&& $(MAKE) $(AM_MAKEFLAGS) dvi \
|
||||||
&& $(MAKE) $(AM_MAKEFLAGS) check \
|
&& $(MAKE) $(AM_MAKEFLAGS) check \
|
||||||
&& $(MAKE) $(AM_MAKEFLAGS) install \
|
&& $(MAKE) $(AM_MAKEFLAGS) install \
|
||||||
&& $(MAKE) $(AM_MAKEFLAGS) installcheck \
|
&& $(MAKE) $(AM_MAKEFLAGS) installcheck \
|
||||||
&& $(MAKE) $(AM_MAKEFLAGS) dist
|
&& $(MAKE) $(AM_MAKEFLAGS) uninstall \
|
||||||
-rm -rf $(distdir)
|
&& test `find $$dc_install_base -type f -print | wc -l` -le 1 \
|
||||||
|
&& $(MAKE) $(AM_MAKEFLAGS) dist \
|
||||||
|
&& $(MAKE) $(AM_MAKEFLAGS) distclean \
|
||||||
|
&& rm -f $(distdir).tar.gz \
|
||||||
|
&& test `find . -type f -print | wc -l` -eq 0
|
||||||
|
-chmod -R a+w $(distdir) > /dev/null 2>&1; rm -rf $(distdir)
|
||||||
@banner="$(distdir).tar.gz is ready for distribution"; \
|
@banner="$(distdir).tar.gz is ready for distribution"; \
|
||||||
dashes=`echo "$$banner" | sed s/./=/g`; \
|
dashes=`echo "$$banner" | sed s/./=/g`; \
|
||||||
echo "$$dashes"; \
|
echo "$$dashes"; \
|
||||||
echo "$$banner"; \
|
echo "$$banner"; \
|
||||||
echo "$$dashes"
|
echo "$$dashes"
|
||||||
dist: distdir
|
dist: distdir
|
||||||
-chmod -R a+r $(distdir)
|
-find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \
|
||||||
$(AMTAR) ch$(AMTARFLAGS)f - $(distdir) | GZIP=$(GZIP_ENV) gzip -c > $(distdir).tar.gz
|
! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
|
||||||
-rm -rf $(distdir)
|
! -type d ! -perm -400 -exec chmod a+r {} \; -o \
|
||||||
|
! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \; \
|
||||||
|
|| chmod -R a+r $(distdir)
|
||||||
|
$(AMTAR) chof - $(distdir) | GZIP=$(GZIP_ENV) gzip -c > $(distdir).tar.gz
|
||||||
|
-chmod -R a+w $(distdir) > /dev/null 2>&1; rm -rf $(distdir)
|
||||||
dist-all: distdir
|
dist-all: distdir
|
||||||
-chmod -R a+r $(distdir)
|
-find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \
|
||||||
$(AMTAR) ch$(AMTARFLAGS)f - $(distdir) | GZIP=$(GZIP_ENV) gzip -c > $(distdir).tar.gz
|
! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
|
||||||
-rm -rf $(distdir)
|
! -type d ! -perm -400 -exec chmod a+r {} \; -o \
|
||||||
|
! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \; \
|
||||||
|
|| chmod -R a+r $(distdir)
|
||||||
|
$(AMTAR) chof - $(distdir) | GZIP=$(GZIP_ENV) gzip -c > $(distdir).tar.gz
|
||||||
|
-chmod -R a+w $(distdir) > /dev/null 2>&1; rm -rf $(distdir)
|
||||||
distdir: $(DISTFILES)
|
distdir: $(DISTFILES)
|
||||||
-rm -rf $(distdir)
|
-chmod -R a+w $(distdir) > /dev/null 2>&1; rm -rf $(distdir)
|
||||||
mkdir $(distdir)
|
mkdir $(distdir)
|
||||||
-chmod 777 $(distdir)
|
|
||||||
$(mkinstalldirs) $(distdir)/src/alpha $(distdir)/src/arm \
|
$(mkinstalldirs) $(distdir)/src/alpha $(distdir)/src/arm \
|
||||||
$(distdir)/src/m68k $(distdir)/src/mips \
|
$(distdir)/src/m68k $(distdir)/src/mips \
|
||||||
$(distdir)/src/powerpc $(distdir)/src/sparc \
|
$(distdir)/src/powerpc $(distdir)/src/sparc \
|
||||||
@@ -396,7 +423,7 @@ distdir: $(DISTFILES)
|
|||||||
@for file in $(DISTFILES); do \
|
@for file in $(DISTFILES); do \
|
||||||
if test -f $$file; then d=.; else d=$(srcdir); fi; \
|
if test -f $$file; then d=.; else d=$(srcdir); fi; \
|
||||||
if test -d $$d/$$file; then \
|
if test -d $$d/$$file; then \
|
||||||
cp -pr $$d/$$file $(distdir)/$$file; \
|
cp -pR $$d/$$file $(distdir); \
|
||||||
else \
|
else \
|
||||||
test -f $(distdir)/$$file \
|
test -f $(distdir)/$$file \
|
||||||
|| ln $$d/$$file $(distdir)/$$file 2> /dev/null \
|
|| ln $$d/$$file $(distdir)/$$file 2> /dev/null \
|
||||||
@@ -444,6 +471,7 @@ distclean-generic:
|
|||||||
-rm -f config.cache config.log stamp-h stamp-h[0-9]*
|
-rm -f config.cache config.log stamp-h stamp-h[0-9]*
|
||||||
|
|
||||||
maintainer-clean-generic:
|
maintainer-clean-generic:
|
||||||
|
-rm -f Makefile.in
|
||||||
mostlyclean-am: mostlyclean-hdr mostlyclean-toolexeclibLTLIBRARIES \
|
mostlyclean-am: mostlyclean-hdr mostlyclean-toolexeclibLTLIBRARIES \
|
||||||
mostlyclean-compile mostlyclean-libtool \
|
mostlyclean-compile mostlyclean-libtool \
|
||||||
mostlyclean-noinstPROGRAMS mostlyclean-tags \
|
mostlyclean-noinstPROGRAMS mostlyclean-tags \
|
||||||
|
|||||||
@@ -44,9 +44,13 @@ Libffi has been ported to:
|
|||||||
|
|
||||||
SunOS 4.1.3 & Solaris 2.x (Sparc v8)
|
SunOS 4.1.3 & Solaris 2.x (Sparc v8)
|
||||||
|
|
||||||
|
32- and 64-bit Sparc Linux (Sparc v8 and v9)
|
||||||
|
|
||||||
Irix 5.3 & 6.2 (System V/o32 & n32)
|
Irix 5.3 & 6.2 (System V/o32 & n32)
|
||||||
|
|
||||||
Intel x86 - Linux (System V ABI)
|
Intel IA-32 - Linux (System V ABI)
|
||||||
|
|
||||||
|
Intel IA-64 - Linux (System V ABI)
|
||||||
|
|
||||||
Alpha - Linux and OSF/1
|
Alpha - Linux and OSF/1
|
||||||
|
|
||||||
@@ -56,14 +60,11 @@ Libffi has been ported to:
|
|||||||
|
|
||||||
ARM - Linux (System V ABI)
|
ARM - Linux (System V ABI)
|
||||||
|
|
||||||
Libffi has been tested with the egcs 1.0.2 gcc compiler. Chances are
|
Libffi has been tested with GCC 2.95 and newer compilers.
|
||||||
that other versions will work. Libffi has also been built and tested
|
|
||||||
with the SGI compiler tools.
|
|
||||||
|
|
||||||
On PowerPC, the tests failed (see the note below).
|
On PowerPC, the tests failed (see the note below).
|
||||||
|
|
||||||
You must use GNU make to build libffi. SGI's make will not work.
|
You must use GNU make to build libffi.
|
||||||
Sun's probably won't either.
|
|
||||||
|
|
||||||
If you port libffi to another platform, please let me know! I assume
|
If you port libffi to another platform, please let me know! I assume
|
||||||
that some will be easy (x86 NetBSD), and others will be more difficult
|
that some will be easy (x86 NetBSD), and others will be more difficult
|
||||||
@@ -477,12 +478,12 @@ libffi was written by Anthony Green <green@cygnus.com>.
|
|||||||
Portions of libffi were derived from Gianni Mariani's free gencall
|
Portions of libffi were derived from Gianni Mariani's free gencall
|
||||||
library for Silicon Graphics machines.
|
library for Silicon Graphics machines.
|
||||||
|
|
||||||
The closure mechanism was designed and implemented by Kresten Krab
|
The closure mechanism was designed and implemented on IA-32 by Kresten
|
||||||
Thorup.
|
Krab Thorup.
|
||||||
|
|
||||||
The Sparc port was derived from code contributed by the fine folks at
|
The initial Sparc port was derived from code contributed by the fine
|
||||||
Visible Decisions Inc <http://www.vdi.com>. Further enhancements were
|
folks at Visible Decisions Inc. Further enhancements were made by
|
||||||
made by Gordon Irlam at Cygnus Solutions <http://www.cygnus.com>.
|
Gordon Irlam while at Cygnus Solutions.
|
||||||
|
|
||||||
The Alpha port was written by Richard Henderson at Cygnus Solutions.
|
The Alpha port was written by Richard Henderson at Cygnus Solutions.
|
||||||
|
|
||||||
@@ -493,6 +494,10 @@ Geoffrey Keating ported libffi to the PowerPC.
|
|||||||
|
|
||||||
Raffaele Sena ported libffi to the ARM.
|
Raffaele Sena ported libffi to the ARM.
|
||||||
|
|
||||||
|
Hans Boehm ported libffi to IA-64.
|
||||||
|
|
||||||
|
Jakub Jelinek ported libffi to 32- and 64-bit Sparc Linux.
|
||||||
|
|
||||||
Jesper Skov and Andrew Haley both did more than their fair share of
|
Jesper Skov and Andrew Haley both did more than their fair share of
|
||||||
stepping through the code and tracking down bugs.
|
stepping through the code and tracking down bugs.
|
||||||
|
|
||||||
|
|||||||
@@ -10,9 +10,3 @@
|
|||||||
|
|
||||||
/* Define this is you do not want support for the raw API. */
|
/* Define this is you do not want support for the raw API. */
|
||||||
#undef FFI_NO_RAW_API
|
#undef FFI_NO_RAW_API
|
||||||
|
|
||||||
/* This is the package name */
|
|
||||||
#undef PACKAGE
|
|
||||||
|
|
||||||
/* This is the package version */
|
|
||||||
#undef VERSION
|
|
||||||
|
|||||||
376
libffi/aclocal.m4
vendored
376
libffi/aclocal.m4
vendored
@@ -1,4 +1,4 @@
|
|||||||
dnl aclocal.m4 generated automatically by aclocal 1.4a
|
dnl aclocal.m4 generated automatically by aclocal 1.4
|
||||||
|
|
||||||
dnl Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
|
dnl Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
|
||||||
dnl This file is free software; the Free Software Foundation
|
dnl This file is free software; the Free Software Foundation
|
||||||
@@ -44,8 +44,6 @@ dnl AM_INIT_AUTOMAKE(package,version, [no-define])
|
|||||||
|
|
||||||
AC_DEFUN(AM_INIT_AUTOMAKE,
|
AC_DEFUN(AM_INIT_AUTOMAKE,
|
||||||
[AC_REQUIRE([AC_PROG_INSTALL])
|
[AC_REQUIRE([AC_PROG_INSTALL])
|
||||||
dnl We require 2.13 because we rely on SHELL being computed by configure.
|
|
||||||
AC_PREREQ([2.13])
|
|
||||||
PACKAGE=[$1]
|
PACKAGE=[$1]
|
||||||
AC_SUBST(PACKAGE)
|
AC_SUBST(PACKAGE)
|
||||||
VERSION=[$2]
|
VERSION=[$2]
|
||||||
@@ -66,19 +64,6 @@ AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
|
|||||||
AM_MISSING_PROG(AUTOMAKE, automake, $missing_dir)
|
AM_MISSING_PROG(AUTOMAKE, automake, $missing_dir)
|
||||||
AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir)
|
AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir)
|
||||||
AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir)
|
AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir)
|
||||||
dnl We check for tar when the user configures the end package.
|
|
||||||
dnl This is sad, since we only need this for "dist". However,
|
|
||||||
dnl there's no other good way to do it. We prefer GNU tar if
|
|
||||||
dnl we can find it. If we can't find a tar, it doesn't really matter.
|
|
||||||
AC_CHECK_PROGS(AMTAR, gnutar gtar tar)
|
|
||||||
AMTARFLAGS=
|
|
||||||
if test -n "$AMTAR"; then
|
|
||||||
if $SHELL -c "$AMTAR --version" > /dev/null 2>&1; then
|
|
||||||
dnl We have GNU tar.
|
|
||||||
AMTARFLAGS=o
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
AC_SUBST(AMTARFLAGS)
|
|
||||||
AC_REQUIRE([AC_PROG_MAKE_SET])])
|
AC_REQUIRE([AC_PROG_MAKE_SET])])
|
||||||
|
|
||||||
#
|
#
|
||||||
@@ -174,7 +159,7 @@ else
|
|||||||
fi])
|
fi])
|
||||||
|
|
||||||
|
|
||||||
# serial 35 AC_PROG_LIBTOOL
|
# serial 40 AC_PROG_LIBTOOL
|
||||||
AC_DEFUN(AC_PROG_LIBTOOL,
|
AC_DEFUN(AC_PROG_LIBTOOL,
|
||||||
[AC_REQUIRE([AC_LIBTOOL_SETUP])dnl
|
[AC_REQUIRE([AC_LIBTOOL_SETUP])dnl
|
||||||
|
|
||||||
@@ -183,10 +168,11 @@ AC_CACHE_SAVE
|
|||||||
|
|
||||||
# Actually configure libtool. ac_aux_dir is where install-sh is found.
|
# Actually configure libtool. ac_aux_dir is where install-sh is found.
|
||||||
CC="$CC" CFLAGS="$CFLAGS" CPPFLAGS="$CPPFLAGS" \
|
CC="$CC" CFLAGS="$CFLAGS" CPPFLAGS="$CPPFLAGS" \
|
||||||
LD="$LD" NM="$NM" RANLIB="$RANLIB" LN_S="$LN_S" \
|
LD="$LD" LDFLAGS="$LDFLAGS" LIBS="$LIBS" \
|
||||||
DLLTOOL="$DLLTOOL" AS="$AS" \
|
LN_S="$LN_S" NM="$NM" RANLIB="$RANLIB" \
|
||||||
|
DLLTOOL="$DLLTOOL" AS="$AS" OBJDUMP="$OBJDUMP" \
|
||||||
${CONFIG_SHELL-/bin/sh} $ac_aux_dir/ltconfig --no-reexec \
|
${CONFIG_SHELL-/bin/sh} $ac_aux_dir/ltconfig --no-reexec \
|
||||||
$libtool_flags --no-verify $ac_aux_dir/ltmain.sh $host \
|
$libtool_flags --no-verify $ac_aux_dir/ltmain.sh $lt_target \
|
||||||
|| AC_MSG_ERROR([libtool configure failed])
|
|| AC_MSG_ERROR([libtool configure failed])
|
||||||
|
|
||||||
# Reload cache, that may have been modified by ltconfig
|
# Reload cache, that may have been modified by ltconfig
|
||||||
@@ -215,24 +201,33 @@ AC_REQUIRE([AC_PROG_RANLIB])dnl
|
|||||||
AC_REQUIRE([AC_PROG_CC])dnl
|
AC_REQUIRE([AC_PROG_CC])dnl
|
||||||
AC_REQUIRE([AC_PROG_LD])dnl
|
AC_REQUIRE([AC_PROG_LD])dnl
|
||||||
AC_REQUIRE([AC_PROG_NM])dnl
|
AC_REQUIRE([AC_PROG_NM])dnl
|
||||||
AC_REQUIRE([AC_SYS_NM_PARSE])dnl
|
|
||||||
AC_REQUIRE([AC_SYS_SYMBOL_UNDERSCORE])dnl
|
|
||||||
AC_REQUIRE([AC_PROG_LN_S])dnl
|
AC_REQUIRE([AC_PROG_LN_S])dnl
|
||||||
dnl
|
dnl
|
||||||
|
|
||||||
|
case "$target" in
|
||||||
|
NONE) lt_target="$host" ;;
|
||||||
|
*) lt_target="$target" ;;
|
||||||
|
esac
|
||||||
|
|
||||||
# Check for any special flags to pass to ltconfig.
|
# Check for any special flags to pass to ltconfig.
|
||||||
libtool_flags="--cache-file=$cache_file"
|
libtool_flags="--cache-file=$cache_file"
|
||||||
test "$enable_shared" = no && libtool_flags="$libtool_flags --disable-shared"
|
test "$enable_shared" = no && libtool_flags="$libtool_flags --disable-shared"
|
||||||
test "$enable_static" = no && libtool_flags="$libtool_flags --disable-static"
|
test "$enable_static" = no && libtool_flags="$libtool_flags --disable-static"
|
||||||
test "$enable_fast_install" = no && libtool_flags="$libtool_flags --disable-fast-install"
|
test "$enable_fast_install" = no && libtool_flags="$libtool_flags --disable-fast-install"
|
||||||
test "$lt_dlopen" = yes && libtool_flags="$libtool_flags --enable-dlopen"
|
|
||||||
test "$silent" = yes && libtool_flags="$libtool_flags --silent"
|
|
||||||
test "$ac_cv_prog_gcc" = yes && libtool_flags="$libtool_flags --with-gcc"
|
test "$ac_cv_prog_gcc" = yes && libtool_flags="$libtool_flags --with-gcc"
|
||||||
test "$ac_cv_prog_gnu_ld" = yes && libtool_flags="$libtool_flags --with-gnu-ld"
|
test "$ac_cv_prog_gnu_ld" = yes && libtool_flags="$libtool_flags --with-gnu-ld"
|
||||||
|
ifdef([AC_PROVIDE_AC_LIBTOOL_DLOPEN],
|
||||||
|
[libtool_flags="$libtool_flags --enable-dlopen"])
|
||||||
|
ifdef([AC_PROVIDE_AC_LIBTOOL_WIN32_DLL],
|
||||||
|
[libtool_flags="$libtool_flags --enable-win32-dll"])
|
||||||
|
AC_ARG_ENABLE(libtool-lock,
|
||||||
|
[ --disable-libtool-lock avoid locking (might break parallel builds)])
|
||||||
|
test "x$enable_libtool_lock" = xno && libtool_flags="$libtool_flags --disable-lock"
|
||||||
|
test x"$silent" = xyes && libtool_flags="$libtool_flags --silent"
|
||||||
|
|
||||||
# Some flags need to be propagated to the compiler or linker for good
|
# Some flags need to be propagated to the compiler or linker for good
|
||||||
# libtool support.
|
# libtool support.
|
||||||
case "$host" in
|
case "$lt_target" in
|
||||||
*-*-irix6*)
|
*-*-irix6*)
|
||||||
# Find out which ABI we are using.
|
# Find out which ABI we are using.
|
||||||
echo '[#]line __oline__ "configure"' > conftest.$ac_ext
|
echo '[#]line __oline__ "configure"' > conftest.$ac_ext
|
||||||
@@ -264,33 +259,28 @@ case "$host" in
|
|||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
|
|
||||||
*-*-cygwin*)
|
ifdef([AC_PROVIDE_AC_LIBTOOL_WIN32_DLL],
|
||||||
AC_SYS_LIBTOOL_CYGWIN
|
[*-*-cygwin* | *-*-mingw*)
|
||||||
|
AC_CHECK_TOOL(DLLTOOL, dlltool, false)
|
||||||
|
AC_CHECK_TOOL(AS, as, false)
|
||||||
|
AC_CHECK_TOOL(OBJDUMP, objdump, false)
|
||||||
;;
|
;;
|
||||||
|
])
|
||||||
esac
|
esac
|
||||||
|
|
||||||
# enable the --disable-libtool-lock switch
|
|
||||||
|
|
||||||
AC_ARG_ENABLE(libtool-lock,
|
|
||||||
[ --disable-libtool-lock force libtool not to do file locking],
|
|
||||||
need_locks=$enableval,
|
|
||||||
need_locks=yes)
|
|
||||||
|
|
||||||
if test x"$need_locks" = xno; then
|
|
||||||
libtool_flags="$libtool_flags --disable-lock"
|
|
||||||
fi
|
|
||||||
])
|
])
|
||||||
|
|
||||||
# AC_LIBTOOL_DLOPEN - check for dlopen support
|
# AC_LIBTOOL_DLOPEN - enable checks for dlopen support
|
||||||
AC_DEFUN(AC_LIBTOOL_DLOPEN, [lt_dlopen=yes])
|
AC_DEFUN(AC_LIBTOOL_DLOPEN, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])])
|
||||||
|
|
||||||
|
# AC_LIBTOOL_WIN32_DLL - declare package support for building win32 dll's
|
||||||
|
AC_DEFUN(AC_LIBTOOL_WIN32_DLL, [AC_BEFORE([$0], [AC_LIBTOOL_SETUP])])
|
||||||
|
|
||||||
# AC_ENABLE_SHARED - implement the --enable-shared flag
|
# AC_ENABLE_SHARED - implement the --enable-shared flag
|
||||||
# Usage: AC_ENABLE_SHARED[(DEFAULT)]
|
# Usage: AC_ENABLE_SHARED[(DEFAULT)]
|
||||||
# Where DEFAULT is either `yes' or `no'. If omitted, it defaults to
|
# Where DEFAULT is either `yes' or `no'. If omitted, it defaults to
|
||||||
# `yes'.
|
# `yes'.
|
||||||
AC_DEFUN(AC_ENABLE_SHARED,
|
AC_DEFUN(AC_ENABLE_SHARED, [dnl
|
||||||
[define([AC_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl
|
define([AC_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl
|
||||||
AC_ARG_ENABLE(shared,
|
AC_ARG_ENABLE(shared,
|
||||||
changequote(<<, >>)dnl
|
changequote(<<, >>)dnl
|
||||||
<< --enable-shared[=PKGS] build shared libraries [default=>>AC_ENABLE_SHARED_DEFAULT],
|
<< --enable-shared[=PKGS] build shared libraries [default=>>AC_ENABLE_SHARED_DEFAULT],
|
||||||
@@ -315,15 +305,15 @@ enable_shared=AC_ENABLE_SHARED_DEFAULT)dnl
|
|||||||
])
|
])
|
||||||
|
|
||||||
# AC_DISABLE_SHARED - set the default shared flag to --disable-shared
|
# AC_DISABLE_SHARED - set the default shared flag to --disable-shared
|
||||||
AC_DEFUN(AC_DISABLE_SHARED,
|
AC_DEFUN(AC_DISABLE_SHARED, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
|
||||||
[AC_ENABLE_SHARED(no)])
|
AC_ENABLE_SHARED(no)])
|
||||||
|
|
||||||
# AC_ENABLE_STATIC - implement the --enable-static flag
|
# AC_ENABLE_STATIC - implement the --enable-static flag
|
||||||
# Usage: AC_ENABLE_STATIC[(DEFAULT)]
|
# Usage: AC_ENABLE_STATIC[(DEFAULT)]
|
||||||
# Where DEFAULT is either `yes' or `no'. If omitted, it defaults to
|
# Where DEFAULT is either `yes' or `no'. If omitted, it defaults to
|
||||||
# `yes'.
|
# `yes'.
|
||||||
AC_DEFUN(AC_ENABLE_STATIC,
|
AC_DEFUN(AC_ENABLE_STATIC, [dnl
|
||||||
[define([AC_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl
|
define([AC_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl
|
||||||
AC_ARG_ENABLE(static,
|
AC_ARG_ENABLE(static,
|
||||||
changequote(<<, >>)dnl
|
changequote(<<, >>)dnl
|
||||||
<< --enable-static[=PKGS] build static libraries [default=>>AC_ENABLE_STATIC_DEFAULT],
|
<< --enable-static[=PKGS] build static libraries [default=>>AC_ENABLE_STATIC_DEFAULT],
|
||||||
@@ -348,16 +338,16 @@ enable_static=AC_ENABLE_STATIC_DEFAULT)dnl
|
|||||||
])
|
])
|
||||||
|
|
||||||
# AC_DISABLE_STATIC - set the default static flag to --disable-static
|
# AC_DISABLE_STATIC - set the default static flag to --disable-static
|
||||||
AC_DEFUN(AC_DISABLE_STATIC,
|
AC_DEFUN(AC_DISABLE_STATIC, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
|
||||||
[AC_ENABLE_STATIC(no)])
|
AC_ENABLE_STATIC(no)])
|
||||||
|
|
||||||
|
|
||||||
# AC_ENABLE_FAST_INSTALL - implement the --enable-fast-install flag
|
# AC_ENABLE_FAST_INSTALL - implement the --enable-fast-install flag
|
||||||
# Usage: AC_ENABLE_FAST_INSTALL[(DEFAULT)]
|
# Usage: AC_ENABLE_FAST_INSTALL[(DEFAULT)]
|
||||||
# Where DEFAULT is either `yes' or `no'. If omitted, it defaults to
|
# Where DEFAULT is either `yes' or `no'. If omitted, it defaults to
|
||||||
# `yes'.
|
# `yes'.
|
||||||
AC_DEFUN(AC_ENABLE_FAST_INSTALL,
|
AC_DEFUN(AC_ENABLE_FAST_INSTALL, [dnl
|
||||||
[define([AC_ENABLE_FAST_INSTALL_DEFAULT], ifelse($1, no, no, yes))dnl
|
define([AC_ENABLE_FAST_INSTALL_DEFAULT], ifelse($1, no, no, yes))dnl
|
||||||
AC_ARG_ENABLE(fast-install,
|
AC_ARG_ENABLE(fast-install,
|
||||||
changequote(<<, >>)dnl
|
changequote(<<, >>)dnl
|
||||||
<< --enable-fast-install[=PKGS] optimize for fast installation [default=>>AC_ENABLE_FAST_INSTALL_DEFAULT],
|
<< --enable-fast-install[=PKGS] optimize for fast installation [default=>>AC_ENABLE_FAST_INSTALL_DEFAULT],
|
||||||
@@ -382,9 +372,8 @@ enable_fast_install=AC_ENABLE_FAST_INSTALL_DEFAULT)dnl
|
|||||||
])
|
])
|
||||||
|
|
||||||
# AC_ENABLE_FAST_INSTALL - set the default to --disable-fast-install
|
# AC_ENABLE_FAST_INSTALL - set the default to --disable-fast-install
|
||||||
AC_DEFUN(AC_DISABLE_FAST_INSTALL,
|
AC_DEFUN(AC_DISABLE_FAST_INSTALL, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
|
||||||
[AC_ENABLE_FAST_INSTALL(no)])
|
AC_ENABLE_FAST_INSTALL(no)])
|
||||||
|
|
||||||
|
|
||||||
# AC_PROG_LD - find the path to the GNU or non-GNU linker
|
# AC_PROG_LD - find the path to the GNU or non-GNU linker
|
||||||
AC_DEFUN(AC_PROG_LD,
|
AC_DEFUN(AC_PROG_LD,
|
||||||
@@ -402,7 +391,7 @@ if test "$ac_cv_prog_gcc" = yes; then
|
|||||||
case "$ac_prog" in
|
case "$ac_prog" in
|
||||||
# Accept absolute paths.
|
# Accept absolute paths.
|
||||||
changequote(,)dnl
|
changequote(,)dnl
|
||||||
/* | [A-Za-z]:[\\/]*)
|
[\\/]* | [A-Za-z]:[\\/]*)
|
||||||
re_direlt='/[^/][^/]*/\.\./'
|
re_direlt='/[^/][^/]*/\.\./'
|
||||||
changequote([,])dnl
|
changequote([,])dnl
|
||||||
# Canonicalize the path of ld
|
# Canonicalize the path of ld
|
||||||
@@ -428,10 +417,10 @@ else
|
|||||||
fi
|
fi
|
||||||
AC_CACHE_VAL(ac_cv_path_LD,
|
AC_CACHE_VAL(ac_cv_path_LD,
|
||||||
[if test -z "$LD"; then
|
[if test -z "$LD"; then
|
||||||
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
|
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
|
||||||
for ac_dir in $PATH; do
|
for ac_dir in $PATH; do
|
||||||
test -z "$ac_dir" && ac_dir=.
|
test -z "$ac_dir" && ac_dir=.
|
||||||
if test -f "$ac_dir/$ac_prog"; then
|
if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
|
||||||
ac_cv_path_LD="$ac_dir/$ac_prog"
|
ac_cv_path_LD="$ac_dir/$ac_prog"
|
||||||
# Check to see if the program is GNU ld. I'd rather use --version,
|
# Check to see if the program is GNU ld. I'd rather use --version,
|
||||||
# but apparently some GNU ld's only accept -v.
|
# but apparently some GNU ld's only accept -v.
|
||||||
@@ -454,7 +443,6 @@ else
|
|||||||
AC_MSG_RESULT(no)
|
AC_MSG_RESULT(no)
|
||||||
fi
|
fi
|
||||||
test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
|
test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
|
||||||
AC_SUBST(LD)
|
|
||||||
AC_PROG_LD_GNU
|
AC_PROG_LD_GNU
|
||||||
])
|
])
|
||||||
|
|
||||||
@@ -476,10 +464,10 @@ AC_CACHE_VAL(ac_cv_path_NM,
|
|||||||
# Let the user override the test.
|
# Let the user override the test.
|
||||||
ac_cv_path_NM="$NM"
|
ac_cv_path_NM="$NM"
|
||||||
else
|
else
|
||||||
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
|
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
|
||||||
for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do
|
for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do
|
||||||
test -z "$ac_dir" && ac_dir=.
|
test -z "$ac_dir" && ac_dir=.
|
||||||
if test -f $ac_dir/nm; then
|
if test -f $ac_dir/nm || test -f $ac_dir/nm$ac_exeext ; then
|
||||||
# Check to see if the nm accepts a BSD-compat flag.
|
# Check to see if the nm accepts a BSD-compat flag.
|
||||||
# Adding the `sed 1q' prevents false positives on HP-UX, which says:
|
# Adding the `sed 1q' prevents false positives on HP-UX, which says:
|
||||||
# nm: unknown option "B" ignored
|
# nm: unknown option "B" ignored
|
||||||
@@ -500,230 +488,24 @@ else
|
|||||||
fi])
|
fi])
|
||||||
NM="$ac_cv_path_NM"
|
NM="$ac_cv_path_NM"
|
||||||
AC_MSG_RESULT([$NM])
|
AC_MSG_RESULT([$NM])
|
||||||
AC_SUBST(NM)
|
|
||||||
])
|
|
||||||
|
|
||||||
# AC_SYS_NM_PARSE - Check for command to grab the raw symbol name followed
|
|
||||||
# by C symbol name from nm.
|
|
||||||
AC_DEFUN(AC_SYS_NM_PARSE,
|
|
||||||
[AC_REQUIRE([AC_CANONICAL_HOST])dnl
|
|
||||||
AC_REQUIRE([AC_PROG_NM])dnl
|
|
||||||
# Check for command to grab the raw symbol name followed by C symbol from nm.
|
|
||||||
AC_MSG_CHECKING([command to parse $NM output])
|
|
||||||
AC_CACHE_VAL(ac_cv_sys_global_symbol_pipe,
|
|
||||||
[# These are sane defaults that work on at least a few old systems.
|
|
||||||
# {They come from Ultrix. What could be older than Ultrix?!! ;)}
|
|
||||||
|
|
||||||
changequote(,)dnl
|
|
||||||
# Character class describing NM global symbol codes.
|
|
||||||
ac_symcode='[BCDEGRST]'
|
|
||||||
|
|
||||||
# Regexp to match symbols that can be accessed directly from C.
|
|
||||||
ac_sympat='\([_A-Za-z][_A-Za-z0-9]*\)'
|
|
||||||
|
|
||||||
# Transform the above into a raw symbol and a C symbol.
|
|
||||||
ac_symxfrm='\1 \2\3 \3'
|
|
||||||
|
|
||||||
# Transform an extracted symbol line into a proper C declaration
|
|
||||||
ac_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern char \1;/p'"
|
|
||||||
|
|
||||||
# Define system-specific variables.
|
|
||||||
case "$host_os" in
|
|
||||||
aix*)
|
|
||||||
ac_symcode='[BCDT]'
|
|
||||||
;;
|
|
||||||
cygwin* | mingw*)
|
|
||||||
ac_symcode='[ABCDGISTW]'
|
|
||||||
;;
|
|
||||||
hpux*)
|
|
||||||
ac_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern char \1();/p' -e 's/^. .* \(.*\)$/extern char \1;/p'"
|
|
||||||
;;
|
|
||||||
irix*)
|
|
||||||
ac_symcode='[BCDEGRST]'
|
|
||||||
;;
|
|
||||||
solaris*)
|
|
||||||
ac_symcode='[BDT]'
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
# If we're using GNU nm, then use its standard symbol codes.
|
|
||||||
if $NM -V 2>&1 | egrep '(GNU|with BFD)' > /dev/null; then
|
|
||||||
ac_symcode='[ABCDGISTW]'
|
|
||||||
fi
|
|
||||||
changequote([,])dnl
|
|
||||||
|
|
||||||
# Try without a prefix undercore, then with it.
|
|
||||||
for ac_symprfx in "" "_"; do
|
|
||||||
|
|
||||||
ac_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($ac_symcode\)[ ][ ]*\($ac_symprfx\)$ac_sympat$/$ac_symxfrm/p'"
|
|
||||||
|
|
||||||
# Check to see that the pipe works correctly.
|
|
||||||
ac_pipe_works=no
|
|
||||||
rm -f conftest.$ac_ext
|
|
||||||
cat > conftest.$ac_ext <<EOF
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
char nm_test_var;
|
|
||||||
void nm_test_func(){}
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
int main(){nm_test_var='a';nm_test_func;return 0;}
|
|
||||||
EOF
|
|
||||||
|
|
||||||
if AC_TRY_EVAL(ac_compile); then
|
|
||||||
# Now try to grab the symbols.
|
|
||||||
ac_nlist=conftest.nm
|
|
||||||
|
|
||||||
if AC_TRY_EVAL(NM conftest.$ac_objext \| $ac_cv_sys_global_symbol_pipe \> $ac_nlist) && test -s "$ac_nlist"; then
|
|
||||||
|
|
||||||
# Try sorting and uniquifying the output.
|
|
||||||
if sort "$ac_nlist" | uniq > "$ac_nlist"T; then
|
|
||||||
mv -f "$ac_nlist"T "$ac_nlist"
|
|
||||||
else
|
|
||||||
rm -f "$ac_nlist"T
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Make sure that we snagged all the symbols we need.
|
|
||||||
if egrep ' nm_test_var$' "$ac_nlist" >/dev/null; then
|
|
||||||
if egrep ' nm_test_func$' "$ac_nlist" >/dev/null; then
|
|
||||||
cat <<EOF > conftest.c
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
EOF
|
|
||||||
# Now generate the symbol file.
|
|
||||||
eval "$ac_global_symbol_to_cdecl"' < "$ac_nlist" >> conftest.c'
|
|
||||||
|
|
||||||
cat <<EOF >> conftest.c
|
|
||||||
#if defined (__STDC__) && __STDC__
|
|
||||||
# define lt_ptr_t void *
|
|
||||||
#else
|
|
||||||
# define lt_ptr_t char *
|
|
||||||
# define const
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* The mapping between symbol names and symbols. */
|
|
||||||
const struct {
|
|
||||||
const char *name;
|
|
||||||
lt_ptr_t address;
|
|
||||||
}
|
|
||||||
changequote(,)dnl
|
|
||||||
lt_preloaded_symbols[] =
|
|
||||||
changequote([,])dnl
|
|
||||||
{
|
|
||||||
EOF
|
|
||||||
sed 's/^. \(.*\) \(.*\)$/ {"\2", (lt_ptr_t) \&\2},/' < "$ac_nlist" >> conftest.c
|
|
||||||
cat <<\EOF >> conftest.c
|
|
||||||
{0, (lt_ptr_t) 0}
|
|
||||||
};
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
EOF
|
|
||||||
# Now try linking the two files.
|
|
||||||
mv conftest.$ac_objext conftestm.$ac_objext
|
|
||||||
ac_save_LIBS="$LIBS"
|
|
||||||
ac_save_CFLAGS="$CFLAGS"
|
|
||||||
LIBS="conftestm.$ac_objext"
|
|
||||||
CFLAGS="$CFLAGS$no_builtin_flag"
|
|
||||||
if AC_TRY_EVAL(ac_link) && test -s conftest; then
|
|
||||||
ac_pipe_works=yes
|
|
||||||
else
|
|
||||||
echo "configure: failed program was:" >&AC_FD_CC
|
|
||||||
cat conftest.c >&AC_FD_CC
|
|
||||||
fi
|
|
||||||
LIBS="$ac_save_LIBS"
|
|
||||||
CFLAGS="$ac_save_CFLAGS"
|
|
||||||
else
|
|
||||||
echo "cannot find nm_test_func in $ac_nlist" >&AC_FD_CC
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
echo "cannot find nm_test_var in $ac_nlist" >&AC_FD_CC
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
echo "cannot run $ac_cv_sys_global_symbol_pipe" >&AC_FD_CC
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
echo "$progname: failed program was:" >&AC_FD_CC
|
|
||||||
cat conftest.c >&AC_FD_CC
|
|
||||||
fi
|
|
||||||
rm -rf conftest*
|
|
||||||
|
|
||||||
# Do not use the global_symbol_pipe unless it works.
|
|
||||||
if test "$ac_pipe_works" = yes; then
|
|
||||||
if test x"$ac_symprfx" = x"_"; then
|
|
||||||
ac_cv_sys_symbol_underscore=yes
|
|
||||||
else
|
|
||||||
ac_cv_sys_symbol_underscore=no
|
|
||||||
fi
|
|
||||||
break
|
|
||||||
else
|
|
||||||
ac_cv_sys_global_symbol_pipe=
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
])
|
|
||||||
|
|
||||||
ac_result=yes
|
|
||||||
if test -z "$ac_cv_sys_global_symbol_pipe"; then
|
|
||||||
ac_result=no
|
|
||||||
fi
|
|
||||||
AC_MSG_RESULT($ac_result)
|
|
||||||
])
|
|
||||||
|
|
||||||
# AC_SYS_LIBTOOL_CYGWIN - find tools needed on cygwin
|
|
||||||
AC_DEFUN(AC_SYS_LIBTOOL_CYGWIN,
|
|
||||||
[AC_CHECK_TOOL(DLLTOOL, dlltool, false)
|
|
||||||
AC_CHECK_TOOL(AS, as, false)
|
|
||||||
])
|
|
||||||
|
|
||||||
# AC_SYS_SYMBOL_UNDERSCORE - does the compiler prefix global symbols
|
|
||||||
# with an underscore?
|
|
||||||
AC_DEFUN(AC_SYS_SYMBOL_UNDERSCORE,
|
|
||||||
[AC_REQUIRE([AC_PROG_NM])dnl
|
|
||||||
AC_REQUIRE([AC_SYS_NM_PARSE])dnl
|
|
||||||
AC_MSG_CHECKING([for _ prefix in compiled symbols])
|
|
||||||
AC_CACHE_VAL(ac_cv_sys_symbol_underscore,
|
|
||||||
[ac_cv_sys_symbol_underscore=no
|
|
||||||
cat > conftest.$ac_ext <<EOF
|
|
||||||
void nm_test_func(){}
|
|
||||||
int main(){nm_test_func;return 0;}
|
|
||||||
EOF
|
|
||||||
if AC_TRY_EVAL(ac_compile); then
|
|
||||||
# Now try to grab the symbols.
|
|
||||||
ac_nlist=conftest.nm
|
|
||||||
if AC_TRY_EVAL(NM conftest.$ac_objext \| $ac_cv_sys_global_symbol_pipe \> $ac_nlist) && test -s "$ac_nlist"; then
|
|
||||||
# See whether the symbols have a leading underscore.
|
|
||||||
if egrep '^. _nm_test_func' "$ac_nlist" >/dev/null; then
|
|
||||||
ac_cv_sys_symbol_underscore=yes
|
|
||||||
else
|
|
||||||
if egrep '^. nm_test_func ' "$ac_nlist" >/dev/null; then
|
|
||||||
:
|
|
||||||
else
|
|
||||||
echo "configure: cannot find nm_test_func in $ac_nlist" >&AC_FD_CC
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
echo "configure: cannot run $ac_cv_sys_global_symbol_pipe" >&AC_FD_CC
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
echo "configure: failed program was:" >&AC_FD_CC
|
|
||||||
cat conftest.c >&AC_FD_CC
|
|
||||||
fi
|
|
||||||
rm -rf conftest*
|
|
||||||
])
|
|
||||||
AC_MSG_RESULT($ac_cv_sys_symbol_underscore)
|
|
||||||
USE_SYMBOL_UNDERSCORE=${ac_cv_sys_symbol_underscore=no}
|
|
||||||
AC_SUBST(USE_SYMBOL_UNDERSCORE)dnl
|
|
||||||
])
|
])
|
||||||
|
|
||||||
# AC_CHECK_LIBM - check for math library
|
# AC_CHECK_LIBM - check for math library
|
||||||
AC_DEFUN(AC_CHECK_LIBM, [
|
AC_DEFUN(AC_CHECK_LIBM,
|
||||||
AC_CHECK_LIB(mw, _mwvalidcheckl)
|
[AC_REQUIRE([AC_CANONICAL_HOST])dnl
|
||||||
AC_CHECK_LIB(m, cos)
|
LIBM=
|
||||||
|
case "$lt_target" in
|
||||||
|
*-*-beos* | *-*-cygwin*)
|
||||||
|
# These system don't have libm
|
||||||
|
;;
|
||||||
|
*-ncr-sysv4.3*)
|
||||||
|
AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
|
||||||
|
AC_CHECK_LIB(m, main, LIBM="$LIBM -lm")
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
AC_CHECK_LIB(m, main, LIBM="-lm")
|
||||||
|
;;
|
||||||
|
esac
|
||||||
])
|
])
|
||||||
|
|
||||||
# AC_LIBLTDL_CONVENIENCE[(dir)] - sets LIBLTDL to the link flags for
|
# AC_LIBLTDL_CONVENIENCE[(dir)] - sets LIBLTDL to the link flags for
|
||||||
@@ -734,13 +516,14 @@ AC_CHECK_LIB(m, cos)
|
|||||||
# '${top_builddir}/' (note the single quotes!) if your package is not
|
# '${top_builddir}/' (note the single quotes!) if your package is not
|
||||||
# flat, and, if you're not using automake, define top_builddir as
|
# flat, and, if you're not using automake, define top_builddir as
|
||||||
# appropriate in the Makefiles.
|
# appropriate in the Makefiles.
|
||||||
AC_DEFUN(AC_LIBLTDL_CONVENIENCE, [
|
AC_DEFUN(AC_LIBLTDL_CONVENIENCE, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
|
||||||
case "$enable_ltdl_convenience" in
|
case "$enable_ltdl_convenience" in
|
||||||
no) AC_MSG_ERROR([this package needs a convenience libltdl]) ;;
|
no) AC_MSG_ERROR([this package needs a convenience libltdl]) ;;
|
||||||
"") enable_ltdl_convenience=yes
|
"") enable_ltdl_convenience=yes
|
||||||
ac_configure_args="$ac_configure_args --enable-ltdl-convenience" ;;
|
ac_configure_args="$ac_configure_args --enable-ltdl-convenience" ;;
|
||||||
esac
|
esac
|
||||||
LIBLTDL=ifelse($#,1,$1,['${top_builddir}/libltdl'])/libltdlc.la
|
LIBLTDL=ifelse($#,1,$1,['${top_builddir}/libltdl'])/libltdlc.la
|
||||||
|
INCLTDL=ifelse($#,1,-I$1,['-I${top_builddir}/libltdl'])
|
||||||
])
|
])
|
||||||
|
|
||||||
# AC_LIBLTDL_INSTALLABLE[(dir)] - sets LIBLTDL to the link flags for
|
# AC_LIBLTDL_INSTALLABLE[(dir)] - sets LIBLTDL to the link flags for
|
||||||
@@ -752,16 +535,23 @@ AC_DEFUN(AC_LIBLTDL_CONVENIENCE, [
|
|||||||
# flat, and, if you're not using automake, define top_builddir as
|
# flat, and, if you're not using automake, define top_builddir as
|
||||||
# appropriate in the Makefiles.
|
# appropriate in the Makefiles.
|
||||||
# In the future, this macro may have to be called after AC_PROG_LIBTOOL.
|
# In the future, this macro may have to be called after AC_PROG_LIBTOOL.
|
||||||
AC_DEFUN(AC_LIBLTDL_INSTALLABLE, [
|
AC_DEFUN(AC_LIBLTDL_INSTALLABLE, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
|
||||||
AC_CHECK_LIB(ltdl, main, LIBLTDL="-lltdl", [
|
AC_CHECK_LIB(ltdl, main,
|
||||||
case "$enable_ltdl_install" in
|
[test x"$enable_ltdl_install" != xyes && enable_ltdl_install=no],
|
||||||
no) AC_MSG_WARN([libltdl not installed, but installation disabled]) ;;
|
[if test x"$enable_ltdl_install" = xno; then
|
||||||
"") enable_ltdl_install=yes
|
AC_MSG_WARN([libltdl not installed, but installation disabled])
|
||||||
ac_configure_args="$ac_configure_args --enable-ltdl-install" ;;
|
else
|
||||||
esac
|
enable_ltdl_install=yes
|
||||||
|
fi
|
||||||
])
|
])
|
||||||
if test x"$enable_ltdl_install" != x"no"; then
|
if test x"$enable_ltdl_install" = x"yes"; then
|
||||||
|
ac_configure_args="$ac_configure_args --enable-ltdl-install"
|
||||||
LIBLTDL=ifelse($#,1,$1,['${top_builddir}/libltdl'])/libltdl.la
|
LIBLTDL=ifelse($#,1,$1,['${top_builddir}/libltdl'])/libltdl.la
|
||||||
|
INCLTDL=ifelse($#,1,-I$1,['-I${top_builddir}/libltdl'])
|
||||||
|
else
|
||||||
|
ac_configure_args="$ac_configure_args --enable-ltdl-install=no"
|
||||||
|
LIBLTDL="-lltdl"
|
||||||
|
INCLTDL=
|
||||||
fi
|
fi
|
||||||
])
|
])
|
||||||
|
|
||||||
@@ -773,7 +563,7 @@ AC_DEFUN(AM_DISABLE_SHARED, [indir([AC_DISABLE_SHARED], $@)])dnl
|
|||||||
AC_DEFUN(AM_DISABLE_STATIC, [indir([AC_DISABLE_STATIC], $@)])dnl
|
AC_DEFUN(AM_DISABLE_STATIC, [indir([AC_DISABLE_STATIC], $@)])dnl
|
||||||
AC_DEFUN(AM_PROG_LD, [indir([AC_PROG_LD])])dnl
|
AC_DEFUN(AM_PROG_LD, [indir([AC_PROG_LD])])dnl
|
||||||
AC_DEFUN(AM_PROG_NM, [indir([AC_PROG_NM])])dnl
|
AC_DEFUN(AM_PROG_NM, [indir([AC_PROG_NM])])dnl
|
||||||
AC_DEFUN(AM_SYS_NM_PARSE, [indir([AC_SYS_NM_PARSE])])dnl
|
|
||||||
AC_DEFUN(AM_SYS_SYMBOL_UNDERSCORE, [indir([AC_SYS_SYMBOL_UNDERSCORE])])dnl
|
dnl This is just to silence aclocal about the macro not being used
|
||||||
AC_DEFUN(AM_SYS_LIBTOOL_CYGWIN, [indir([AC_SYS_LIBTOOL_CYGWIN])])dnl
|
ifelse([AC_DISABLE_FAST_INSTALL])dnl
|
||||||
|
|
||||||
|
|||||||
720
libffi/config-ml.in
Normal file
720
libffi/config-ml.in
Normal file
@@ -0,0 +1,720 @@
|
|||||||
|
# Configure fragment invoked in the post-target section for subdirs
|
||||||
|
# wanting multilib support.
|
||||||
|
#
|
||||||
|
# It is advisable to support a few --enable/--disable options to let the
|
||||||
|
# user select which libraries s/he really wants.
|
||||||
|
#
|
||||||
|
# Subdirectories wishing to use multilib should put the following lines
|
||||||
|
# in the "post-target" section of configure.in.
|
||||||
|
#
|
||||||
|
# if [ "${srcdir}" = "." ] ; then
|
||||||
|
# if [ "${with_target_subdir}" != "." ] ; then
|
||||||
|
# . ${with_multisrctop}../../config-ml.in
|
||||||
|
# else
|
||||||
|
# . ${with_multisrctop}../config-ml.in
|
||||||
|
# fi
|
||||||
|
# else
|
||||||
|
# . ${srcdir}/../config-ml.in
|
||||||
|
# fi
|
||||||
|
#
|
||||||
|
# See librx/configure.in in the libg++ distribution for an example of how
|
||||||
|
# to handle autoconf'd libraries.
|
||||||
|
#
|
||||||
|
# Things are complicated because 6 separate cases must be handled:
|
||||||
|
# 2 (native, cross) x 3 (absolute-path, relative-not-dot, dot) = 6.
|
||||||
|
#
|
||||||
|
# srcdir=. is special. It must handle make programs that don't handle VPATH.
|
||||||
|
# To implement this, a symlink tree is built for each library and for each
|
||||||
|
# multilib subdir.
|
||||||
|
#
|
||||||
|
# The build tree is layed out as
|
||||||
|
#
|
||||||
|
# ./
|
||||||
|
# libg++
|
||||||
|
# newlib
|
||||||
|
# m68020/
|
||||||
|
# libg++
|
||||||
|
# newlib
|
||||||
|
# m68881/
|
||||||
|
# libg++
|
||||||
|
# newlib
|
||||||
|
#
|
||||||
|
# The nice feature about this arrangement is that inter-library references
|
||||||
|
# in the build tree work without having to care where you are. Note that
|
||||||
|
# inter-library references also work in the source tree because symlink trees
|
||||||
|
# are built when srcdir=.
|
||||||
|
#
|
||||||
|
# Unfortunately, trying to access the libraries in the build tree requires
|
||||||
|
# the user to manually choose which library to use as GCC won't be able to
|
||||||
|
# find the right one. This is viewed as the lesser of two evils.
|
||||||
|
#
|
||||||
|
# Configure variables:
|
||||||
|
# ${with_target_subdir} = "." for native, or ${target_alias} for cross.
|
||||||
|
# Set by top level Makefile.
|
||||||
|
# ${with_multisrctop} = how many levels of multilibs there are in the source
|
||||||
|
# tree. It exists to handle the case of configuring in the source tree:
|
||||||
|
# ${srcdir} is not constant.
|
||||||
|
# ${with_multisubdir} = name of multilib subdirectory (eg: m68020/m68881).
|
||||||
|
#
|
||||||
|
# Makefile variables:
|
||||||
|
# MULTISRCTOP = number of multilib levels in source tree (+1 if cross)
|
||||||
|
# (FIXME: note that this is different than ${with_multisrctop}. Check out.).
|
||||||
|
# MULTIBUILDTOP = number of multilib levels in build tree
|
||||||
|
# MULTIDIRS = list of multilib subdirs (eg: m68000 m68020 ...)
|
||||||
|
# (only defined in each library's main Makefile).
|
||||||
|
# MULTISUBDIR = installed subdirectory name with leading '/' (eg: /m68000)
|
||||||
|
# (only defined in each multilib subdir).
|
||||||
|
|
||||||
|
# FIXME: Multilib is currently disabled by default for everything other than
|
||||||
|
# newlib. It is up to each target to turn on multilib support for the other
|
||||||
|
# libraries as desired.
|
||||||
|
|
||||||
|
# We have to handle being invoked by both Cygnus configure and Autoconf.
|
||||||
|
#
|
||||||
|
# Cygnus configure incoming variables:
|
||||||
|
# srcdir, subdir, host, arguments
|
||||||
|
#
|
||||||
|
# Autoconf incoming variables:
|
||||||
|
# srcdir, host, ac_configure_args
|
||||||
|
#
|
||||||
|
# We *could* figure srcdir and host out, but we'd have to do work that
|
||||||
|
# our caller has already done to figure them out and requiring these two
|
||||||
|
# seems reasonable.
|
||||||
|
# Note that `host' in this case is GCC's `target'. Target libraries are
|
||||||
|
# configured for a particular host.
|
||||||
|
|
||||||
|
if [ -n "${ac_configure_args}" ]; then
|
||||||
|
Makefile=${ac_file-Makefile}
|
||||||
|
ml_config_shell=${CONFIG_SHELL-/bin/sh}
|
||||||
|
ml_arguments="${ac_configure_args}"
|
||||||
|
ml_realsrcdir=${srcdir}
|
||||||
|
else
|
||||||
|
Makefile=${Makefile-Makefile}
|
||||||
|
ml_config_shell=${config_shell-/bin/sh}
|
||||||
|
ml_arguments="${arguments}"
|
||||||
|
if [ -n "${subdir}" -a "${subdir}" != "." ] ; then
|
||||||
|
ml_realsrcdir=${srcdir}/${subdir}
|
||||||
|
else
|
||||||
|
ml_realsrcdir=${srcdir}
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Scan all the arguments and set all the ones we need.
|
||||||
|
|
||||||
|
ml_verbose=--verbose
|
||||||
|
for option in ${ml_arguments}
|
||||||
|
do
|
||||||
|
case $option in
|
||||||
|
--*) ;;
|
||||||
|
-*) option=-$option ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
case $option in
|
||||||
|
--*=*)
|
||||||
|
optarg=`echo $option | sed -e 's/^[^=]*=//'`
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
case $option in
|
||||||
|
--disable-*)
|
||||||
|
enableopt=`echo ${option} | sed 's:^--disable-:enable_:;s:-:_:g'`
|
||||||
|
eval $enableopt=no
|
||||||
|
;;
|
||||||
|
--enable-*)
|
||||||
|
case "$option" in
|
||||||
|
*=*) ;;
|
||||||
|
*) optarg=yes ;;
|
||||||
|
esac
|
||||||
|
enableopt=`echo ${option} | sed 's:^--::;s:=.*$::;s:-:_:g'`
|
||||||
|
eval $enableopt="$optarg"
|
||||||
|
;;
|
||||||
|
--norecursion | --no*)
|
||||||
|
ml_norecursion=yes
|
||||||
|
;;
|
||||||
|
--silent | --sil* | --quiet | --q*)
|
||||||
|
ml_verbose=--silent
|
||||||
|
;;
|
||||||
|
--verbose | --v | --verb*)
|
||||||
|
ml_verbose=--verbose
|
||||||
|
;;
|
||||||
|
--with-*)
|
||||||
|
case "$option" in
|
||||||
|
*=*) ;;
|
||||||
|
*) optarg=yes ;;
|
||||||
|
esac
|
||||||
|
withopt=`echo ${option} | sed 's:^--::;s:=.*$::;s:-:_:g'`
|
||||||
|
eval $withopt="$optarg"
|
||||||
|
;;
|
||||||
|
--without-*)
|
||||||
|
withopt=`echo ${option} | sed 's:^--::;s:out::;s:-:_:g'`
|
||||||
|
eval $withopt=no
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
# Only do this if --enable-multilib.
|
||||||
|
if [ "${enable_multilib}" = yes ]; then
|
||||||
|
|
||||||
|
# Compute whether this is the library's top level directory
|
||||||
|
# (ie: not a multilib subdirectory, and not a subdirectory like libg++/src).
|
||||||
|
# ${with_multisubdir} tells us we're in the right branch, but we could be
|
||||||
|
# in a subdir of that.
|
||||||
|
# ??? The previous version could void this test by separating the process into
|
||||||
|
# two files: one that only the library's toplevel configure.in ran (to
|
||||||
|
# configure the multilib subdirs), and another that all configure.in's ran to
|
||||||
|
# update the Makefile. It seemed reasonable to collapse all multilib support
|
||||||
|
# into one file, but it does leave us with having to perform this test.
|
||||||
|
ml_toplevel_p=no
|
||||||
|
if [ -z "${with_multisubdir}" ]; then
|
||||||
|
if [ "${srcdir}" = "." ]; then
|
||||||
|
# Use ${ml_realsrcdir} instead of ${srcdir} here to account for ${subdir}.
|
||||||
|
# ${with_target_subdir} = "." for native, otherwise target alias.
|
||||||
|
if [ "${with_target_subdir}" = "." ]; then
|
||||||
|
if [ -f ${ml_realsrcdir}/../config-ml.in ]; then
|
||||||
|
ml_toplevel_p=yes
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
if [ -f ${ml_realsrcdir}/../../config-ml.in ]; then
|
||||||
|
ml_toplevel_p=yes
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
# Use ${ml_realsrcdir} instead of ${srcdir} here to account for ${subdir}.
|
||||||
|
if [ -f ${ml_realsrcdir}/../config-ml.in ]; then
|
||||||
|
ml_toplevel_p=yes
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# If this is the library's top level directory, set multidirs to the
|
||||||
|
# multilib subdirs to support. This lives at the top because we need
|
||||||
|
# `multidirs' set right away.
|
||||||
|
|
||||||
|
if [ "${ml_toplevel_p}" = yes ]; then
|
||||||
|
|
||||||
|
multidirs=
|
||||||
|
for i in `${CC-gcc} --print-multi-lib 2>/dev/null`; do
|
||||||
|
dir=`echo $i | sed -e 's/;.*$//'`
|
||||||
|
if [ "${dir}" = "." ]; then
|
||||||
|
true
|
||||||
|
else
|
||||||
|
if [ -z "${multidirs}" ]; then
|
||||||
|
multidirs="${dir}"
|
||||||
|
else
|
||||||
|
multidirs="${multidirs} ${dir}"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# Target libraries are configured for the host they run on, so we check
|
||||||
|
# $host here, not $target.
|
||||||
|
|
||||||
|
case "${host}" in
|
||||||
|
arc-*-elf*)
|
||||||
|
if [ x$enable_biendian != xyes ]
|
||||||
|
then
|
||||||
|
old_multidirs=${multidirs}
|
||||||
|
multidirs=""
|
||||||
|
for x in ${old_multidirs}; do
|
||||||
|
case "${x}" in
|
||||||
|
*be*) : ;;
|
||||||
|
*) multidirs="${multidirs} ${x}" ;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
arm-*-*)
|
||||||
|
if [ x"$enable_fpu" = xno ]
|
||||||
|
then
|
||||||
|
old_multidirs=${multidirs}
|
||||||
|
multidirs=""
|
||||||
|
for x in ${old_multidirs}; do
|
||||||
|
case "${x}" in
|
||||||
|
*fpu*) : ;;
|
||||||
|
*) multidirs="${multidirs} ${x}" ;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
if [ x"$enable_26bit" = xno ]
|
||||||
|
then
|
||||||
|
old_multidirs=${multidirs}
|
||||||
|
multidirs=""
|
||||||
|
for x in ${old_multidirs}; do
|
||||||
|
case "${x}" in
|
||||||
|
*26bit*) : ;;
|
||||||
|
*) multidirs="${multidirs} ${x}" ;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
if [ x"$enable_underscore" = xno ]
|
||||||
|
then
|
||||||
|
old_multidirs=${multidirs}
|
||||||
|
multidirs=""
|
||||||
|
for x in ${old_multidirs}; do
|
||||||
|
case "${x}" in
|
||||||
|
*under*) : ;;
|
||||||
|
*) multidirs="${multidirs} ${x}" ;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
if [ x"$enable_interwork" = xno ]
|
||||||
|
then
|
||||||
|
old_multidirs=${multidirs}
|
||||||
|
multidirs=""
|
||||||
|
for x in ${old_multidirs}; do
|
||||||
|
case "${x}" in
|
||||||
|
*interwork*) : ;;
|
||||||
|
*) multidirs="${multidirs} ${x}" ;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
if [ x$enable_biendian = xno ]
|
||||||
|
then
|
||||||
|
old_multidirs="${multidirs}"
|
||||||
|
multidirs=""
|
||||||
|
for x in ${old_multidirs}; do
|
||||||
|
case "$x" in
|
||||||
|
*le* ) : ;;
|
||||||
|
*be* ) : ;;
|
||||||
|
*) multidirs="${multidirs} ${x}" ;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
m68*-*-*)
|
||||||
|
if [ x$enable_softfloat = xno ]
|
||||||
|
then
|
||||||
|
old_multidirs="${multidirs}"
|
||||||
|
multidirs=""
|
||||||
|
for x in ${old_multidirs}; do
|
||||||
|
case "$x" in
|
||||||
|
*soft-float* ) : ;;
|
||||||
|
*) multidirs="${multidirs} ${x}" ;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
if [ x$enable_m68881 = xno ]
|
||||||
|
then
|
||||||
|
old_multidirs="${multidirs}"
|
||||||
|
multidirs=""
|
||||||
|
for x in ${old_multidirs}; do
|
||||||
|
case "$x" in
|
||||||
|
*m68881* ) : ;;
|
||||||
|
*) multidirs="${multidirs} ${x}" ;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
if [ x$enable_m68000 = xno ]
|
||||||
|
then
|
||||||
|
old_multidirs="${multidirs}"
|
||||||
|
multidirs=""
|
||||||
|
for x in ${old_multidirs}; do
|
||||||
|
case "$x" in
|
||||||
|
*m68000* ) : ;;
|
||||||
|
*) multidirs="${multidirs} ${x}" ;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
if [ x$enable_m68020 = xno ]
|
||||||
|
then
|
||||||
|
old_multidirs="${multidirs}"
|
||||||
|
multidirs=""
|
||||||
|
for x in ${old_multidirs}; do
|
||||||
|
case "$x" in
|
||||||
|
*m68020* ) : ;;
|
||||||
|
*) multidirs="${multidirs} ${x}" ;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
mips*-*-*)
|
||||||
|
if [ x$enable_single_float = xno ]
|
||||||
|
then
|
||||||
|
old_multidirs="${multidirs}"
|
||||||
|
multidirs=""
|
||||||
|
for x in ${old_multidirs}; do
|
||||||
|
case "$x" in
|
||||||
|
*single* ) : ;;
|
||||||
|
*) multidirs="${multidirs} ${x}" ;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
if [ x$enable_biendian = xno ]
|
||||||
|
then
|
||||||
|
old_multidirs="${multidirs}"
|
||||||
|
multidirs=""
|
||||||
|
for x in ${old_multidirs}; do
|
||||||
|
case "$x" in
|
||||||
|
*el* ) : ;;
|
||||||
|
*eb* ) : ;;
|
||||||
|
*) multidirs="${multidirs} ${x}" ;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
if [ x$enable_softfloat = xno ]
|
||||||
|
then
|
||||||
|
old_multidirs="${multidirs}"
|
||||||
|
multidirs=""
|
||||||
|
for x in ${old_multidirs}; do
|
||||||
|
case "$x" in
|
||||||
|
*soft-float* ) : ;;
|
||||||
|
*) multidirs="${multidirs} ${x}" ;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
case " $multidirs " in
|
||||||
|
*" mabi=64 "*)
|
||||||
|
# We will not be able to create libraries with -mabi=64 if
|
||||||
|
# we cannot even link a trivial program. It usually
|
||||||
|
# indicates the 64bit libraries are missing.
|
||||||
|
if echo 'main() {}' > conftest.c &&
|
||||||
|
${CC-gcc} -mabi=64 conftest.c -o conftest; then
|
||||||
|
:
|
||||||
|
else
|
||||||
|
echo Could not link program with -mabi=64, disabling it.
|
||||||
|
old_multidirs="${multidirs}"
|
||||||
|
multidirs=""
|
||||||
|
for x in ${old_multidirs}; do
|
||||||
|
case "$x" in
|
||||||
|
*mabi=64* ) : ;;
|
||||||
|
*) multidirs="${multidirs} ${x}" ;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
rm -f conftest.c conftest
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
powerpc*-*-* | rs6000*-*-*)
|
||||||
|
if [ x$enable_softfloat = xno ]
|
||||||
|
then
|
||||||
|
old_multidirs="${multidirs}"
|
||||||
|
multidirs=""
|
||||||
|
for x in ${old_multidirs}; do
|
||||||
|
case "$x" in
|
||||||
|
*soft-float* ) : ;;
|
||||||
|
*) multidirs="${multidirs} ${x}" ;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
if [ x$enable_powercpu = xno ]
|
||||||
|
then
|
||||||
|
old_multidirs="${multidirs}"
|
||||||
|
multidirs=""
|
||||||
|
for x in ${old_multidirs}; do
|
||||||
|
case "$x" in
|
||||||
|
power | */power | */power/* ) : ;;
|
||||||
|
*) multidirs="${multidirs} ${x}" ;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
if [ x$enable_powerpccpu = xno ]
|
||||||
|
then
|
||||||
|
old_multidirs="${multidirs}"
|
||||||
|
multidirs=""
|
||||||
|
for x in ${old_multidirs}; do
|
||||||
|
case "$x" in
|
||||||
|
*powerpc* ) : ;;
|
||||||
|
*) multidirs="${multidirs} ${x}" ;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
if [ x$enable_powerpcos = xno ]
|
||||||
|
then
|
||||||
|
old_multidirs="${multidirs}"
|
||||||
|
multidirs=""
|
||||||
|
for x in ${old_multidirs}; do
|
||||||
|
case "$x" in
|
||||||
|
*mcall-linux* | *mcall-solaris* ) : ;;
|
||||||
|
*) multidirs="${multidirs} ${x}" ;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
if [ x$enable_biendian = xno ]
|
||||||
|
then
|
||||||
|
old_multidirs="${multidirs}"
|
||||||
|
multidirs=""
|
||||||
|
for x in ${old_multidirs}; do
|
||||||
|
case "$x" in
|
||||||
|
*mlittle* | *mbig* ) : ;;
|
||||||
|
*) multidirs="${multidirs} ${x}" ;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
if [ x$enable_sysv = xno ]
|
||||||
|
then
|
||||||
|
old_multidirs="${multidirs}"
|
||||||
|
multidirs=""
|
||||||
|
for x in ${old_multidirs}; do
|
||||||
|
case "$x" in
|
||||||
|
*mcall-sysv* ) : ;;
|
||||||
|
*) multidirs="${multidirs} ${x}" ;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
if [ x$enable_aix = xno ]
|
||||||
|
then
|
||||||
|
old_multidirs="${multidirs}"
|
||||||
|
multidirs=""
|
||||||
|
for x in ${old_multidirs}; do
|
||||||
|
case "$x" in
|
||||||
|
*mcall-aix* ) : ;;
|
||||||
|
*) multidirs="${multidirs} ${x}" ;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# Remove extraneous blanks from multidirs.
|
||||||
|
# Tests like `if [ -n "$multidirs" ]' require it.
|
||||||
|
multidirs=`echo "$multidirs" | sed -e 's/^[ ][ ]*//' -e 's/[ ][ ]*$//' -e 's/[ ][ ]*/ /g'`
|
||||||
|
|
||||||
|
# Add code to library's top level makefile to handle building the multilib
|
||||||
|
# subdirs.
|
||||||
|
|
||||||
|
cat > Multi.tem <<\EOF
|
||||||
|
|
||||||
|
# FIXME: There should be an @-sign in front of the `if'.
|
||||||
|
# Leave out until this is tested a bit more.
|
||||||
|
multi-do:
|
||||||
|
if [ -z "$(MULTIDIRS)" ]; then \
|
||||||
|
true; \
|
||||||
|
else \
|
||||||
|
rootpre=`pwd`/; export rootpre; \
|
||||||
|
srcrootpre=`cd $(srcdir); pwd`/; export srcrootpre; \
|
||||||
|
lib=`echo $${rootpre} | sed -e 's,^.*/\([^/][^/]*\)/$$,\1,'`; \
|
||||||
|
compiler="$(CC)"; \
|
||||||
|
for i in `$${compiler} --print-multi-lib 2>/dev/null`; do \
|
||||||
|
dir=`echo $$i | sed -e 's/;.*$$//'`; \
|
||||||
|
if [ "$${dir}" = "." ]; then \
|
||||||
|
true; \
|
||||||
|
else \
|
||||||
|
if [ -d ../$${dir}/$${lib} ]; then \
|
||||||
|
flags=`echo $$i | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`; \
|
||||||
|
if (cd ../$${dir}/$${lib}; $(MAKE) $(FLAGS_TO_PASS) \
|
||||||
|
CFLAGS="$(CFLAGS) $${flags}" \
|
||||||
|
CXXFLAGS="$(CXXFLAGS) $${flags}" \
|
||||||
|
LIBCFLAGS="$(LIBCFLAGS) $${flags}" \
|
||||||
|
LIBCXXFLAGS="$(LIBCXXFLAGS) $${flags}" \
|
||||||
|
LDFLAGS="$(LDFLAGS) $${flags}" \
|
||||||
|
$(DO)); then \
|
||||||
|
true; \
|
||||||
|
else \
|
||||||
|
exit 1; \
|
||||||
|
fi; \
|
||||||
|
else true; \
|
||||||
|
fi; \
|
||||||
|
fi; \
|
||||||
|
done; \
|
||||||
|
fi
|
||||||
|
|
||||||
|
# FIXME: There should be an @-sign in front of the `if'.
|
||||||
|
# Leave out until this is tested a bit more.
|
||||||
|
multi-clean:
|
||||||
|
if [ -z "$(MULTIDIRS)" ]; then \
|
||||||
|
true; \
|
||||||
|
else \
|
||||||
|
lib=`pwd | sed -e 's,^.*/\([^/][^/]*\)$$,\1,'`; \
|
||||||
|
for dir in Makefile $(MULTIDIRS); do \
|
||||||
|
if [ -f ../$${dir}/$${lib}/Makefile ]; then \
|
||||||
|
if (cd ../$${dir}/$${lib}; $(MAKE) $(FLAGS_TO_PASS) $(DO)); \
|
||||||
|
then true; \
|
||||||
|
else exit 1; \
|
||||||
|
fi; \
|
||||||
|
else true; \
|
||||||
|
fi; \
|
||||||
|
done; \
|
||||||
|
fi
|
||||||
|
EOF
|
||||||
|
|
||||||
|
cat ${Makefile} Multi.tem > Makefile.tem
|
||||||
|
rm -f ${Makefile} Multi.tem
|
||||||
|
mv Makefile.tem ${Makefile}
|
||||||
|
|
||||||
|
fi # ${ml_toplevel_p} = yes
|
||||||
|
|
||||||
|
if [ "${ml_verbose}" = --verbose ]; then
|
||||||
|
echo "Adding multilib support to Makefile in ${ml_realsrcdir}"
|
||||||
|
if [ "${ml_toplevel_p}" = yes ]; then
|
||||||
|
echo "multidirs=${multidirs}"
|
||||||
|
fi
|
||||||
|
echo "with_multisubdir=${with_multisubdir}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "${srcdir}" = "." ]; then
|
||||||
|
if [ "${with_target_subdir}" != "." ]; then
|
||||||
|
ml_srcdotdot="../"
|
||||||
|
else
|
||||||
|
ml_srcdotdot=""
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
ml_srcdotdot=""
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z "${with_multisubdir}" ]; then
|
||||||
|
ml_subdir=
|
||||||
|
ml_builddotdot=
|
||||||
|
: # ml_srcdotdot= # already set
|
||||||
|
else
|
||||||
|
ml_subdir="/${with_multisubdir}"
|
||||||
|
# The '[^/][^/]*' appears that way to work around a SunOS sed bug.
|
||||||
|
ml_builddotdot=`echo ${with_multisubdir} | sed -e 's:[^/][^/]*:..:g'`/
|
||||||
|
if [ "$srcdir" = "." ]; then
|
||||||
|
ml_srcdotdot=${ml_srcdotdot}${ml_builddotdot}
|
||||||
|
else
|
||||||
|
: # ml_srcdotdot= # already set
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "${ml_toplevel_p}" = yes ]; then
|
||||||
|
ml_do='$(MAKE)'
|
||||||
|
ml_clean='$(MAKE)'
|
||||||
|
else
|
||||||
|
ml_do=true
|
||||||
|
ml_clean=true
|
||||||
|
fi
|
||||||
|
|
||||||
|
# TOP is used by newlib and should not be used elsewhere for this purpose.
|
||||||
|
# MULTI{SRC,BUILD}TOP are the proper ones to use. MULTISRCTOP is empty
|
||||||
|
# when srcdir != builddir. MULTIBUILDTOP is always some number of ../'s.
|
||||||
|
# FIXME: newlib needs to be updated to use MULTI{SRC,BUILD}TOP so we can
|
||||||
|
# delete TOP. Newlib may wish to continue to use TOP for its own purposes
|
||||||
|
# of course.
|
||||||
|
# MULTIDIRS is non-empty for the cpu top level Makefile (eg: newlib/Makefile)
|
||||||
|
# and lists the subdirectories to recurse into.
|
||||||
|
# MULTISUBDIR is non-empty in each cpu subdirectory's Makefile
|
||||||
|
# (eg: newlib/h8300h/Makefile) and is the installed subdirectory name with
|
||||||
|
# a leading '/'.
|
||||||
|
# MULTIDO is used for targets like all, install, and check where
|
||||||
|
# $(FLAGS_TO_PASS) augmented with the subdir's compiler option is needed.
|
||||||
|
# MULTICLEAN is used for the *clean targets.
|
||||||
|
#
|
||||||
|
# ??? It is possible to merge MULTIDO and MULTICLEAN into one. They are
|
||||||
|
# currently kept separate because we don't want the *clean targets to require
|
||||||
|
# the existence of the compiler (which MULTIDO currently requires) and
|
||||||
|
# therefore we'd have to record the directory options as well as names
|
||||||
|
# (currently we just record the names and use --print-multi-lib to get the
|
||||||
|
# options).
|
||||||
|
|
||||||
|
sed -e "s:^TOP[ ]*=[ ]*\([./]*\)[ ]*$:TOP = ${ml_builddotdot}\1:" \
|
||||||
|
-e "s:^MULTISRCTOP[ ]*=.*$:MULTISRCTOP = ${ml_srcdotdot}:" \
|
||||||
|
-e "s:^MULTIBUILDTOP[ ]*=.*$:MULTIBUILDTOP = ${ml_builddotdot}:" \
|
||||||
|
-e "s:^MULTIDIRS[ ]*=.*$:MULTIDIRS = ${multidirs}:" \
|
||||||
|
-e "s:^MULTISUBDIR[ ]*=.*$:MULTISUBDIR = ${ml_subdir}:" \
|
||||||
|
-e "s:^MULTIDO[ ]*=.*$:MULTIDO = $ml_do:" \
|
||||||
|
-e "s:^MULTICLEAN[ ]*=.*$:MULTICLEAN = $ml_clean:" \
|
||||||
|
${Makefile} > Makefile.tem
|
||||||
|
rm -f ${Makefile}
|
||||||
|
mv Makefile.tem ${Makefile}
|
||||||
|
|
||||||
|
# If this is the library's top level, configure each multilib subdir.
|
||||||
|
# This is done at the end because this is the loop that runs configure
|
||||||
|
# in each multilib subdir and it seemed reasonable to finish updating the
|
||||||
|
# Makefile before going on to configure the subdirs.
|
||||||
|
|
||||||
|
if [ "${ml_toplevel_p}" = yes ]; then
|
||||||
|
|
||||||
|
# We must freshly configure each subdirectory. This bit of code is
|
||||||
|
# actually partially stolen from the main configure script. FIXME.
|
||||||
|
|
||||||
|
if [ -n "${multidirs}" ] && [ -z "${ml_norecursion}" ]; then
|
||||||
|
|
||||||
|
if [ "${ml_verbose}" = --verbose ]; then
|
||||||
|
echo "Running configure in multilib subdirs ${multidirs}"
|
||||||
|
echo "pwd: `pwd`"
|
||||||
|
fi
|
||||||
|
|
||||||
|
ml_origdir=`pwd`
|
||||||
|
ml_libdir=`echo $ml_origdir | sed -e 's,^.*/,,'`
|
||||||
|
# cd to top-level-build-dir/${with_target_subdir}
|
||||||
|
cd ..
|
||||||
|
|
||||||
|
for ml_dir in ${multidirs}; do
|
||||||
|
|
||||||
|
if [ "${ml_verbose}" = --verbose ]; then
|
||||||
|
echo "Running configure in multilib subdir ${ml_dir}"
|
||||||
|
echo "pwd: `pwd`"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -d ${ml_dir} ]; then true; else mkdir ${ml_dir}; fi
|
||||||
|
if [ -d ${ml_dir}/${ml_libdir} ]; then true; else mkdir ${ml_dir}/${ml_libdir}; fi
|
||||||
|
|
||||||
|
# Eg: if ${ml_dir} = m68000/m68881, dotdot = ../../
|
||||||
|
dotdot=../`echo ${ml_dir} | sed -e 's|[^/]||g' -e 's|/|../|g'`
|
||||||
|
|
||||||
|
case ${srcdir} in
|
||||||
|
".")
|
||||||
|
echo Building symlink tree in `pwd`/${ml_dir}/${ml_libdir}
|
||||||
|
if [ "${with_target_subdir}" != "." ]; then
|
||||||
|
ml_unsubdir="../"
|
||||||
|
else
|
||||||
|
ml_unsubdir=""
|
||||||
|
fi
|
||||||
|
(cd ${ml_dir}/${ml_libdir};
|
||||||
|
../${dotdot}${ml_unsubdir}symlink-tree ../${dotdot}${ml_unsubdir}${ml_libdir} "")
|
||||||
|
if [ -f ${ml_dir}/${ml_libdir}/Makefile ]; then
|
||||||
|
if [ x"${MAKE}" = x ]; then
|
||||||
|
(cd ${ml_dir}/${ml_libdir}; make distclean)
|
||||||
|
else
|
||||||
|
(cd ${ml_dir}/${ml_libdir}; ${MAKE} distclean)
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
ml_newsrcdir="."
|
||||||
|
ml_srcdiroption=
|
||||||
|
multisrctop=${dotdot}
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
case "${srcdir}" in
|
||||||
|
/*) # absolute path
|
||||||
|
ml_newsrcdir=${srcdir}
|
||||||
|
;;
|
||||||
|
*) # otherwise relative
|
||||||
|
ml_newsrcdir=${dotdot}${srcdir}
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
ml_srcdiroption="-srcdir=${ml_newsrcdir}"
|
||||||
|
multisrctop=
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
case "${progname}" in
|
||||||
|
/*) ml_recprog=${progname} ;;
|
||||||
|
*) ml_recprog=${dotdot}${progname} ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# FIXME: POPDIR=${PWD=`pwd`} doesn't work here.
|
||||||
|
ML_POPDIR=`pwd`
|
||||||
|
cd ${ml_dir}/${ml_libdir}
|
||||||
|
|
||||||
|
if [ -f ${ml_newsrcdir}/configure ]; then
|
||||||
|
ml_recprog=${ml_newsrcdir}/configure
|
||||||
|
fi
|
||||||
|
|
||||||
|
# find compiler flag corresponding to ${ml_dir}
|
||||||
|
for i in `${CC-gcc} --print-multi-lib 2>/dev/null`; do
|
||||||
|
dir=`echo $i | sed -e 's/;.*$//'`
|
||||||
|
if [ "${dir}" = "${ml_dir}" ]; then
|
||||||
|
flags=`echo $i | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
ml_config_env='CC="${CC} $flags"'
|
||||||
|
|
||||||
|
if eval ${ml_config_env} ${ml_config_shell} ${ml_recprog} \
|
||||||
|
--with-multisubdir=${ml_dir} --with-multisrctop=${multisrctop} \
|
||||||
|
${ml_arguments} ${ml_srcdiroption} ; then
|
||||||
|
true
|
||||||
|
else
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
cd ${ML_POPDIR}
|
||||||
|
|
||||||
|
done
|
||||||
|
|
||||||
|
cd ${ml_origdir}
|
||||||
|
fi
|
||||||
|
|
||||||
|
fi # ${ml_toplevel_p} = yes
|
||||||
|
fi # ${enable_multilib} = yes
|
||||||
401
libffi/config.guess
vendored
401
libffi/config.guess
vendored
@@ -1,6 +1,7 @@
|
|||||||
#! /bin/sh
|
#! /bin/sh
|
||||||
# Attempt to guess a canonical system name.
|
# Attempt to guess a canonical system name.
|
||||||
# Copyright (C) 1992, 93, 94, 95, 96, 97, 1998 Free Software Foundation, Inc.
|
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000
|
||||||
|
# Free Software Foundation, Inc.
|
||||||
#
|
#
|
||||||
# This file is free software; you can redistribute it and/or modify it
|
# This file is free software; you can redistribute it and/or modify it
|
||||||
# under the terms of the GNU General Public License as published by
|
# under the terms of the GNU General Public License as published by
|
||||||
@@ -22,8 +23,7 @@
|
|||||||
# the same distribution terms that you use for the rest of that program.
|
# the same distribution terms that you use for the rest of that program.
|
||||||
|
|
||||||
# Written by Per Bothner <bothner@cygnus.com>.
|
# Written by Per Bothner <bothner@cygnus.com>.
|
||||||
# The master version of this file is at the FSF in /home/gd/gnu/lib.
|
# Please send patches to <config-patches@gnu.org>.
|
||||||
# Please send patches to the Autoconf mailing list <autoconf@gnu.org>.
|
|
||||||
#
|
#
|
||||||
# This script attempts to guess a canonical system name similar to
|
# This script attempts to guess a canonical system name similar to
|
||||||
# config.sub. If it succeeds, it prints the system name on stdout, and
|
# config.sub. If it succeeds, it prints the system name on stdout, and
|
||||||
@@ -36,6 +36,20 @@
|
|||||||
# (but try to keep the structure clean).
|
# (but try to keep the structure clean).
|
||||||
#
|
#
|
||||||
|
|
||||||
|
# Use $HOST_CC if defined. $CC may point to a cross-compiler
|
||||||
|
if test x"$CC_FOR_BUILD" = x; then
|
||||||
|
if test x"$HOST_CC" != x; then
|
||||||
|
CC_FOR_BUILD="$HOST_CC"
|
||||||
|
else
|
||||||
|
if test x"$CC" != x; then
|
||||||
|
CC_FOR_BUILD="$CC"
|
||||||
|
else
|
||||||
|
CC_FOR_BUILD=cc
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
|
# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
|
||||||
# (ghazi@noc.rutgers.edu 8/24/94.)
|
# (ghazi@noc.rutgers.edu 8/24/94.)
|
||||||
if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
|
if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
|
||||||
@@ -53,6 +67,43 @@ trap 'rm -f $dummy.c $dummy.o $dummy; exit 1' 1 2 15
|
|||||||
# Note: order is significant - the case branches are not exclusive.
|
# Note: order is significant - the case branches are not exclusive.
|
||||||
|
|
||||||
case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
|
case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
|
||||||
|
*:NetBSD:*:*)
|
||||||
|
# Netbsd (nbsd) targets should (where applicable) match one or
|
||||||
|
# more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
|
||||||
|
# *-*-netbsdecoff* and *-*-netbsd*. For targets that recently
|
||||||
|
# switched to ELF, *-*-netbsd* would select the old
|
||||||
|
# object file format. This provides both forward
|
||||||
|
# compatibility and a consistent mechanism for selecting the
|
||||||
|
# object file format.
|
||||||
|
# Determine the machine/vendor (is the vendor relevant).
|
||||||
|
case "${UNAME_MACHINE}" in
|
||||||
|
amiga) machine=m68k-cbm ;;
|
||||||
|
arm32) machine=arm-unknown ;;
|
||||||
|
atari*) machine=m68k-atari ;;
|
||||||
|
sun3*) machine=m68k-sun ;;
|
||||||
|
mac68k) machine=m68k-apple ;;
|
||||||
|
macppc) machine=powerpc-apple ;;
|
||||||
|
hp3[0-9][05]) machine=m68k-hp ;;
|
||||||
|
ibmrt|romp-ibm) machine=romp-ibm ;;
|
||||||
|
*) machine=${UNAME_MACHINE}-unknown ;;
|
||||||
|
esac
|
||||||
|
# The Operating System including object format.
|
||||||
|
if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
|
||||||
|
| grep __ELF__ >/dev/null
|
||||||
|
then
|
||||||
|
# Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
|
||||||
|
# Return netbsd for either. FIX?
|
||||||
|
os=netbsd
|
||||||
|
else
|
||||||
|
os=netbsdelf
|
||||||
|
fi
|
||||||
|
# The OS release
|
||||||
|
release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
|
||||||
|
# Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
|
||||||
|
# contains redundant information, the shorter form:
|
||||||
|
# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
|
||||||
|
echo "${machine}-${os}${release}"
|
||||||
|
exit 0 ;;
|
||||||
alpha:OSF1:*:*)
|
alpha:OSF1:*:*)
|
||||||
if test $UNAME_RELEASE = "V4.0"; then
|
if test $UNAME_RELEASE = "V4.0"; then
|
||||||
UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
|
UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
|
||||||
@@ -62,45 +113,61 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
|
|||||||
# A Xn.n version is an unreleased experimental baselevel.
|
# A Xn.n version is an unreleased experimental baselevel.
|
||||||
# 1.2 uses "1.2" for uname -r.
|
# 1.2 uses "1.2" for uname -r.
|
||||||
cat <<EOF >$dummy.s
|
cat <<EOF >$dummy.s
|
||||||
|
.data
|
||||||
|
\$Lformat:
|
||||||
|
.byte 37,100,45,37,120,10,0 # "%d-%x\n"
|
||||||
|
|
||||||
|
.text
|
||||||
.globl main
|
.globl main
|
||||||
|
.align 4
|
||||||
.ent main
|
.ent main
|
||||||
main:
|
main:
|
||||||
.frame \$30,0,\$26,0
|
.frame \$30,16,\$26,0
|
||||||
.prologue 0
|
ldgp \$29,0(\$27)
|
||||||
.long 0x47e03d80 # implver $0
|
.prologue 1
|
||||||
lda \$2,259
|
.long 0x47e03d80 # implver \$0
|
||||||
.long 0x47e20c21 # amask $2,$1
|
lda \$2,-1
|
||||||
srl \$1,8,\$2
|
.long 0x47e20c21 # amask \$2,\$1
|
||||||
sll \$2,2,\$2
|
lda \$16,\$Lformat
|
||||||
sll \$0,3,\$0
|
mov \$0,\$17
|
||||||
addl \$1,\$0,\$0
|
not \$1,\$18
|
||||||
addl \$2,\$0,\$0
|
jsr \$26,printf
|
||||||
ret \$31,(\$26),1
|
ldgp \$29,0(\$26)
|
||||||
|
mov 0,\$16
|
||||||
|
jsr \$26,exit
|
||||||
.end main
|
.end main
|
||||||
EOF
|
EOF
|
||||||
${CC-cc} $dummy.s -o $dummy 2>/dev/null
|
$CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null
|
||||||
if test "$?" = 0 ; then
|
if test "$?" = 0 ; then
|
||||||
./$dummy
|
case `./$dummy` in
|
||||||
case "$?" in
|
0-0)
|
||||||
7)
|
|
||||||
UNAME_MACHINE="alpha"
|
UNAME_MACHINE="alpha"
|
||||||
;;
|
;;
|
||||||
15)
|
1-0)
|
||||||
UNAME_MACHINE="alphaev5"
|
UNAME_MACHINE="alphaev5"
|
||||||
;;
|
;;
|
||||||
14)
|
1-1)
|
||||||
UNAME_MACHINE="alphaev56"
|
UNAME_MACHINE="alphaev56"
|
||||||
;;
|
;;
|
||||||
10)
|
1-101)
|
||||||
UNAME_MACHINE="alphapca56"
|
UNAME_MACHINE="alphapca56"
|
||||||
;;
|
;;
|
||||||
16)
|
2-303)
|
||||||
UNAME_MACHINE="alphaev6"
|
UNAME_MACHINE="alphaev6"
|
||||||
;;
|
;;
|
||||||
|
2-307)
|
||||||
|
UNAME_MACHINE="alphaev67"
|
||||||
|
;;
|
||||||
esac
|
esac
|
||||||
fi
|
fi
|
||||||
rm -f $dummy.s $dummy
|
rm -f $dummy.s $dummy
|
||||||
echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr [[A-Z]] [[a-z]]`
|
echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
|
||||||
|
exit 0 ;;
|
||||||
|
Alpha\ *:Windows_NT*:*)
|
||||||
|
# How do we know it's Interix rather than the generic POSIX subsystem?
|
||||||
|
# Should we change UNAME_MACHINE based on the output of uname instead
|
||||||
|
# of the specific Alpha model?
|
||||||
|
echo alpha-pc-interix
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
21064:Windows_NT:50:3)
|
21064:Windows_NT:50:3)
|
||||||
echo alpha-dec-winnt3.5
|
echo alpha-dec-winnt3.5
|
||||||
@@ -108,9 +175,6 @@ EOF
|
|||||||
Amiga*:UNIX_System_V:4.0:*)
|
Amiga*:UNIX_System_V:4.0:*)
|
||||||
echo m68k-cbm-sysv4
|
echo m68k-cbm-sysv4
|
||||||
exit 0;;
|
exit 0;;
|
||||||
amiga:NetBSD:*:*)
|
|
||||||
echo m68k-cbm-netbsd${UNAME_RELEASE}
|
|
||||||
exit 0 ;;
|
|
||||||
amiga:OpenBSD:*:*)
|
amiga:OpenBSD:*:*)
|
||||||
echo m68k-unknown-openbsd${UNAME_RELEASE}
|
echo m68k-unknown-openbsd${UNAME_RELEASE}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
@@ -135,16 +199,16 @@ EOF
|
|||||||
wgrisc:OpenBSD:*:*)
|
wgrisc:OpenBSD:*:*)
|
||||||
echo mipsel-unknown-openbsd${UNAME_RELEASE}
|
echo mipsel-unknown-openbsd${UNAME_RELEASE}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
|
*:OS/390:*:*)
|
||||||
|
echo i370-ibm-openedition
|
||||||
|
exit 0 ;;
|
||||||
arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
|
arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
|
||||||
echo arm-acorn-riscix${UNAME_RELEASE}
|
echo arm-acorn-riscix${UNAME_RELEASE}
|
||||||
exit 0;;
|
exit 0;;
|
||||||
arm32:NetBSD:*:*)
|
|
||||||
echo arm-unknown-netbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
|
|
||||||
exit 0 ;;
|
|
||||||
SR2?01:HI-UX/MPP:*:*)
|
SR2?01:HI-UX/MPP:*:*)
|
||||||
echo hppa1.1-hitachi-hiuxmpp
|
echo hppa1.1-hitachi-hiuxmpp
|
||||||
exit 0;;
|
exit 0;;
|
||||||
Pyramid*:OSx*:*:*|MIS*:OSx*:*:*|MIS*:SMP_DC-OSx*:*:*)
|
Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
|
||||||
# akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
|
# akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
|
||||||
if test "`(/bin/universe) 2>/dev/null`" = att ; then
|
if test "`(/bin/universe) 2>/dev/null`" = att ; then
|
||||||
echo pyramid-pyramid-sysv3
|
echo pyramid-pyramid-sysv3
|
||||||
@@ -197,21 +261,38 @@ EOF
|
|||||||
aushp:SunOS:*:*)
|
aushp:SunOS:*:*)
|
||||||
echo sparc-auspex-sunos${UNAME_RELEASE}
|
echo sparc-auspex-sunos${UNAME_RELEASE}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
atari*:NetBSD:*:*)
|
|
||||||
echo m68k-atari-netbsd${UNAME_RELEASE}
|
|
||||||
exit 0 ;;
|
|
||||||
atari*:OpenBSD:*:*)
|
atari*:OpenBSD:*:*)
|
||||||
echo m68k-unknown-openbsd${UNAME_RELEASE}
|
echo m68k-unknown-openbsd${UNAME_RELEASE}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
sun3*:NetBSD:*:*)
|
# The situation for MiNT is a little confusing. The machine name
|
||||||
echo m68k-sun-netbsd${UNAME_RELEASE}
|
# can be virtually everything (everything which is not
|
||||||
|
# "atarist" or "atariste" at least should have a processor
|
||||||
|
# > m68000). The system name ranges from "MiNT" over "FreeMiNT"
|
||||||
|
# to the lowercase version "mint" (or "freemint"). Finally
|
||||||
|
# the system name "TOS" denotes a system which is actually not
|
||||||
|
# MiNT. But MiNT is downward compatible to TOS, so this should
|
||||||
|
# be no problem.
|
||||||
|
atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
|
||||||
|
echo m68k-atari-mint${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
|
atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
|
||||||
|
echo m68k-atari-mint${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
|
*falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
|
||||||
|
echo m68k-atari-mint${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
|
milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
|
||||||
|
echo m68k-milan-mint${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
|
hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
|
||||||
|
echo m68k-hades-mint${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
|
*:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
|
||||||
|
echo m68k-unknown-mint${UNAME_RELEASE}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
sun3*:OpenBSD:*:*)
|
sun3*:OpenBSD:*:*)
|
||||||
echo m68k-unknown-openbsd${UNAME_RELEASE}
|
echo m68k-unknown-openbsd${UNAME_RELEASE}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
mac68k:NetBSD:*:*)
|
|
||||||
echo m68k-apple-netbsd${UNAME_RELEASE}
|
|
||||||
exit 0 ;;
|
|
||||||
mac68k:OpenBSD:*:*)
|
mac68k:OpenBSD:*:*)
|
||||||
echo m68k-unknown-openbsd${UNAME_RELEASE}
|
echo m68k-unknown-openbsd${UNAME_RELEASE}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
@@ -224,9 +305,6 @@ EOF
|
|||||||
powerpc:machten:*:*)
|
powerpc:machten:*:*)
|
||||||
echo powerpc-apple-machten${UNAME_RELEASE}
|
echo powerpc-apple-machten${UNAME_RELEASE}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
macppc:NetBSD:*:*)
|
|
||||||
echo powerpc-apple-netbsd${UNAME_RELEASE}
|
|
||||||
exit 0 ;;
|
|
||||||
RISC*:Mach:*:*)
|
RISC*:Mach:*:*)
|
||||||
echo mips-dec-mach_bsd4.3
|
echo mips-dec-mach_bsd4.3
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
@@ -236,12 +314,13 @@ EOF
|
|||||||
VAX*:ULTRIX*:*:*)
|
VAX*:ULTRIX*:*:*)
|
||||||
echo vax-dec-ultrix${UNAME_RELEASE}
|
echo vax-dec-ultrix${UNAME_RELEASE}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
2020:CLIX:*:*)
|
2020:CLIX:*:* | 2430:CLIX:*:*)
|
||||||
echo clipper-intergraph-clix${UNAME_RELEASE}
|
echo clipper-intergraph-clix${UNAME_RELEASE}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
mips:*:*:UMIPS | mips:*:*:RISCos)
|
mips:*:*:UMIPS | mips:*:*:RISCos)
|
||||||
sed 's/^ //' << EOF >$dummy.c
|
sed 's/^ //' << EOF >$dummy.c
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
#include <stdio.h> /* for printf() prototype */
|
||||||
int main (int argc, char *argv[]) {
|
int main (int argc, char *argv[]) {
|
||||||
#else
|
#else
|
||||||
int main (argc, argv) int argc; char *argv[]; {
|
int main (argc, argv) int argc; char *argv[]; {
|
||||||
@@ -260,7 +339,7 @@ EOF
|
|||||||
exit (-1);
|
exit (-1);
|
||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
${CC-cc} $dummy.c -o $dummy \
|
$CC_FOR_BUILD $dummy.c -o $dummy \
|
||||||
&& ./$dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
|
&& ./$dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
|
||||||
&& rm $dummy.c $dummy && exit 0
|
&& rm $dummy.c $dummy && exit 0
|
||||||
rm -f $dummy.c $dummy
|
rm -f $dummy.c $dummy
|
||||||
@@ -281,14 +360,17 @@ EOF
|
|||||||
AViiON:dgux:*:*)
|
AViiON:dgux:*:*)
|
||||||
# DG/UX returns AViiON for all architectures
|
# DG/UX returns AViiON for all architectures
|
||||||
UNAME_PROCESSOR=`/usr/bin/uname -p`
|
UNAME_PROCESSOR=`/usr/bin/uname -p`
|
||||||
if [ $UNAME_PROCESSOR = mc88100 -o $UNAME_PROCESSOR = mc88110 ] ; then
|
if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110]
|
||||||
if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx \
|
then
|
||||||
-o ${TARGET_BINARY_INTERFACE}x = x ] ; then
|
if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
|
||||||
|
[ ${TARGET_BINARY_INTERFACE}x = x ]
|
||||||
|
then
|
||||||
echo m88k-dg-dgux${UNAME_RELEASE}
|
echo m88k-dg-dgux${UNAME_RELEASE}
|
||||||
else
|
else
|
||||||
echo m88k-dg-dguxbcs${UNAME_RELEASE}
|
echo m88k-dg-dguxbcs${UNAME_RELEASE}
|
||||||
fi
|
fi
|
||||||
else echo i586-dg-dgux${UNAME_RELEASE}
|
else
|
||||||
|
echo i586-dg-dgux${UNAME_RELEASE}
|
||||||
fi
|
fi
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
M88*:DolphinOS:*:*) # DolphinOS (SVR3)
|
M88*:DolphinOS:*:*) # DolphinOS (SVR3)
|
||||||
@@ -326,7 +408,7 @@ EOF
|
|||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
${CC-cc} $dummy.c -o $dummy && ./$dummy && rm $dummy.c $dummy && exit 0
|
$CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm $dummy.c $dummy && exit 0
|
||||||
rm -f $dummy.c $dummy
|
rm -f $dummy.c $dummy
|
||||||
echo rs6000-ibm-aix3.2.5
|
echo rs6000-ibm-aix3.2.5
|
||||||
elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
|
elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
|
||||||
@@ -355,7 +437,7 @@ EOF
|
|||||||
ibmrt:4.4BSD:*|romp-ibm:BSD:*)
|
ibmrt:4.4BSD:*|romp-ibm:BSD:*)
|
||||||
echo romp-ibm-bsd4.4
|
echo romp-ibm-bsd4.4
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC NetBSD and
|
ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and
|
||||||
echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to
|
echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to
|
||||||
exit 0 ;; # report: romp-ibm BSD 4.3
|
exit 0 ;; # report: romp-ibm BSD 4.3
|
||||||
*:BOSX:*:*)
|
*:BOSX:*:*)
|
||||||
@@ -374,7 +456,7 @@ EOF
|
|||||||
case "${UNAME_MACHINE}" in
|
case "${UNAME_MACHINE}" in
|
||||||
9000/31? ) HP_ARCH=m68000 ;;
|
9000/31? ) HP_ARCH=m68000 ;;
|
||||||
9000/[34]?? ) HP_ARCH=m68k ;;
|
9000/[34]?? ) HP_ARCH=m68k ;;
|
||||||
9000/6?? | 9000/7?? | 9000/80[024] | 9000/8?[136790] | 9000/892 )
|
9000/[678][0-9][0-9])
|
||||||
sed 's/^ //' << EOF >$dummy.c
|
sed 's/^ //' << EOF >$dummy.c
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
@@ -406,7 +488,7 @@ EOF
|
|||||||
exit (0);
|
exit (0);
|
||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
(${CC-cc} $dummy.c -o $dummy 2>/dev/null ) && HP_ARCH=`./$dummy`
|
(CCOPTS= $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null ) && HP_ARCH=`./$dummy`
|
||||||
rm -f $dummy.c $dummy
|
rm -f $dummy.c $dummy
|
||||||
esac
|
esac
|
||||||
HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
|
HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
|
||||||
@@ -438,7 +520,7 @@ EOF
|
|||||||
exit (0);
|
exit (0);
|
||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
${CC-cc} $dummy.c -o $dummy && ./$dummy && rm $dummy.c $dummy && exit 0
|
$CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm $dummy.c $dummy && exit 0
|
||||||
rm -f $dummy.c $dummy
|
rm -f $dummy.c $dummy
|
||||||
echo unknown-hitachi-hiuxwe2
|
echo unknown-hitachi-hiuxwe2
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
@@ -448,10 +530,7 @@ EOF
|
|||||||
9000/8??:4.3bsd:*:*)
|
9000/8??:4.3bsd:*:*)
|
||||||
echo hppa1.0-hp-bsd
|
echo hppa1.0-hp-bsd
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
*9??*:MPE*:*:*)
|
*9??*:MPE/iX:*:*)
|
||||||
echo hppa1.0-hp-mpeix
|
|
||||||
exit 0 ;;
|
|
||||||
*9??*:MPE*:*:*)
|
|
||||||
echo hppa1.0-hp-mpeix
|
echo hppa1.0-hp-mpeix
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
|
hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
|
||||||
@@ -470,6 +549,9 @@ EOF
|
|||||||
parisc*:Lites*:*:*)
|
parisc*:Lites*:*:*)
|
||||||
echo hppa1.1-hp-lites
|
echo hppa1.1-hp-lites
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
|
hppa*:OpenBSD:*:*)
|
||||||
|
echo hppa-unknown-openbsd
|
||||||
|
exit 0 ;;
|
||||||
C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
|
C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
|
||||||
echo c1-convex-bsd
|
echo c1-convex-bsd
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
@@ -500,34 +582,34 @@ EOF
|
|||||||
-e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/
|
-e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
CRAY*TS:*:*:*)
|
CRAY*TS:*:*:*)
|
||||||
echo t90-cray-unicos${UNAME_RELEASE}
|
echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
CRAY*T3E:*:*:*)
|
CRAY*T3E:*:*:*)
|
||||||
echo t3e-cray-unicosmk${UNAME_RELEASE}
|
echo alpha-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
|
||||||
|
exit 0 ;;
|
||||||
|
CRAY*SV1:*:*:*)
|
||||||
|
echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
CRAY-2:*:*:*)
|
CRAY-2:*:*:*)
|
||||||
echo cray2-cray-unicos
|
echo cray2-cray-unicos
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
F300:UNIX_System_V:*:*)
|
F300:UNIX_System_V:*:*)
|
||||||
FUJITSU_SYS=`uname -p | tr [A-Z] [a-z] | sed -e 's/\///'`
|
FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
|
||||||
FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
|
FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
|
||||||
echo "f300-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
|
echo "f300-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
F301:UNIX_System_V:*:*)
|
F301:UNIX_System_V:*:*)
|
||||||
echo f301-fujitsu-uxpv`echo $UNAME_RELEASE | sed 's/ .*//'`
|
echo f301-fujitsu-uxpv`echo $UNAME_RELEASE | sed 's/ .*//'`
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
hp3[0-9][05]:NetBSD:*:*)
|
|
||||||
echo m68k-hp-netbsd${UNAME_RELEASE}
|
|
||||||
exit 0 ;;
|
|
||||||
hp300:OpenBSD:*:*)
|
hp300:OpenBSD:*:*)
|
||||||
echo m68k-unknown-openbsd${UNAME_RELEASE}
|
echo m68k-unknown-openbsd${UNAME_RELEASE}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
sparc*:BSD/OS:*:*)
|
|
||||||
echo sparc-unknown-bsdi${UNAME_RELEASE}
|
|
||||||
exit 0 ;;
|
|
||||||
i?86:BSD/386:*:* | i?86:BSD/OS:*:*)
|
i?86:BSD/386:*:* | i?86:BSD/OS:*:*)
|
||||||
echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
|
echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
|
sparc*:BSD/OS:*:*)
|
||||||
|
echo sparc-unknown-bsdi${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
*:BSD/OS:*:*)
|
*:BSD/OS:*:*)
|
||||||
echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
|
echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
@@ -540,9 +622,6 @@ EOF
|
|||||||
fi
|
fi
|
||||||
echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
|
echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
*:NetBSD:*:*)
|
|
||||||
echo ${UNAME_MACHINE}-unknown-netbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
|
|
||||||
exit 0 ;;
|
|
||||||
*:OpenBSD:*:*)
|
*:OpenBSD:*:*)
|
||||||
echo ${UNAME_MACHINE}-unknown-openbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
|
echo ${UNAME_MACHINE}-unknown-openbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
@@ -552,6 +631,15 @@ EOF
|
|||||||
i*:MINGW*:*)
|
i*:MINGW*:*)
|
||||||
echo ${UNAME_MACHINE}-pc-mingw32
|
echo ${UNAME_MACHINE}-pc-mingw32
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
|
i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
|
||||||
|
# How do we know it's Interix rather than the generic POSIX subsystem?
|
||||||
|
# It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
|
||||||
|
# UNAME_MACHINE based on the output of uname instead of i386?
|
||||||
|
echo i386-pc-interix
|
||||||
|
exit 0 ;;
|
||||||
|
i*:UWIN*:*)
|
||||||
|
echo ${UNAME_MACHINE}-pc-uwin
|
||||||
|
exit 0 ;;
|
||||||
p*:CYGWIN*:*)
|
p*:CYGWIN*:*)
|
||||||
echo powerpcle-unknown-cygwin
|
echo powerpcle-unknown-cygwin
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
@@ -562,16 +650,11 @@ EOF
|
|||||||
echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
|
echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
*:Linux:*:*)
|
*:Linux:*:*)
|
||||||
# uname on the ARM produces all sorts of strangeness, and we need to
|
|
||||||
# filter it out.
|
|
||||||
case "$UNAME_MACHINE" in
|
|
||||||
armv*) UNAME_MACHINE=$UNAME_MACHINE ;;
|
|
||||||
arm* | sa110*) UNAME_MACHINE="arm" ;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
# The BFD linker knows what the default object file format is, so
|
# The BFD linker knows what the default object file format is, so
|
||||||
# first see if it will tell us.
|
# first see if it will tell us. cd to the root directory to prevent
|
||||||
ld_help_string=`ld --help 2>&1`
|
# problems with other programs or directories called `ld' in the path.
|
||||||
|
ld_help_string=`cd /; ld --help 2>&1`
|
||||||
ld_supported_emulations=`echo $ld_help_string \
|
ld_supported_emulations=`echo $ld_help_string \
|
||||||
| sed -ne '/supported emulations:/!d
|
| sed -ne '/supported emulations:/!d
|
||||||
s/[ ][ ]*/ /g
|
s/[ ][ ]*/ /g
|
||||||
@@ -579,52 +662,120 @@ EOF
|
|||||||
s/ .*//
|
s/ .*//
|
||||||
p'`
|
p'`
|
||||||
case "$ld_supported_emulations" in
|
case "$ld_supported_emulations" in
|
||||||
i?86linux) echo "${UNAME_MACHINE}-pc-linux-gnuaout" ; exit 0 ;;
|
*ia64)
|
||||||
i?86coff) echo "${UNAME_MACHINE}-pc-linux-gnucoff" ; exit 0 ;;
|
echo "${UNAME_MACHINE}-unknown-linux"
|
||||||
sparclinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;;
|
exit 0
|
||||||
armlinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;;
|
;;
|
||||||
m68klinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;;
|
i?86linux)
|
||||||
elf32ppc) echo "powerpc-unknown-linux-gnu" ; exit 0 ;;
|
echo "${UNAME_MACHINE}-pc-linux-gnuaout"
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
i?86coff)
|
||||||
|
echo "${UNAME_MACHINE}-pc-linux-gnucoff"
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
sparclinux)
|
||||||
|
echo "${UNAME_MACHINE}-unknown-linux-gnuaout"
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
armlinux)
|
||||||
|
echo "${UNAME_MACHINE}-unknown-linux-gnuaout"
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
elf32arm*)
|
||||||
|
echo "${UNAME_MACHINE}-unknown-linux-gnuoldld"
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
armelf_linux*)
|
||||||
|
echo "${UNAME_MACHINE}-unknown-linux-gnu"
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
m68klinux)
|
||||||
|
echo "${UNAME_MACHINE}-unknown-linux-gnuaout"
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
elf32ppc | elf32ppclinux)
|
||||||
|
# Determine Lib Version
|
||||||
|
cat >$dummy.c <<EOF
|
||||||
|
#include <features.h>
|
||||||
|
#if defined(__GLIBC__)
|
||||||
|
extern char __libc_version[];
|
||||||
|
extern char __libc_release[];
|
||||||
|
#endif
|
||||||
|
main(argc, argv)
|
||||||
|
int argc;
|
||||||
|
char *argv[];
|
||||||
|
{
|
||||||
|
#if defined(__GLIBC__)
|
||||||
|
printf("%s %s\n", __libc_version, __libc_release);
|
||||||
|
#else
|
||||||
|
printf("unkown\n");
|
||||||
|
#endif
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
LIBC=""
|
||||||
|
$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null
|
||||||
|
if test "$?" = 0 ; then
|
||||||
|
./$dummy | grep 1\.99 > /dev/null
|
||||||
|
if test "$?" = 0 ; then
|
||||||
|
LIBC="libc1"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
rm -f $dummy.c $dummy
|
||||||
|
echo powerpc-unknown-linux-gnu${LIBC}
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
if test "${UNAME_MACHINE}" = "alpha" ; then
|
if test "${UNAME_MACHINE}" = "alpha" ; then
|
||||||
sed 's/^ //' <<EOF >$dummy.s
|
cat <<EOF >$dummy.s
|
||||||
|
.data
|
||||||
|
\$Lformat:
|
||||||
|
.byte 37,100,45,37,120,10,0 # "%d-%x\n"
|
||||||
|
|
||||||
|
.text
|
||||||
.globl main
|
.globl main
|
||||||
|
.align 4
|
||||||
.ent main
|
.ent main
|
||||||
main:
|
main:
|
||||||
.frame \$30,0,\$26,0
|
.frame \$30,16,\$26,0
|
||||||
.prologue 0
|
ldgp \$29,0(\$27)
|
||||||
.long 0x47e03d80 # implver $0
|
.prologue 1
|
||||||
lda \$2,259
|
.long 0x47e03d80 # implver \$0
|
||||||
.long 0x47e20c21 # amask $2,$1
|
lda \$2,-1
|
||||||
srl \$1,8,\$2
|
.long 0x47e20c21 # amask \$2,\$1
|
||||||
sll \$2,2,\$2
|
lda \$16,\$Lformat
|
||||||
sll \$0,3,\$0
|
mov \$0,\$17
|
||||||
addl \$1,\$0,\$0
|
not \$1,\$18
|
||||||
addl \$2,\$0,\$0
|
jsr \$26,printf
|
||||||
ret \$31,(\$26),1
|
ldgp \$29,0(\$26)
|
||||||
|
mov 0,\$16
|
||||||
|
jsr \$26,exit
|
||||||
.end main
|
.end main
|
||||||
EOF
|
EOF
|
||||||
LIBC=""
|
LIBC=""
|
||||||
${CC-cc} $dummy.s -o $dummy 2>/dev/null
|
$CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null
|
||||||
if test "$?" = 0 ; then
|
if test "$?" = 0 ; then
|
||||||
./$dummy
|
case `./$dummy` in
|
||||||
case "$?" in
|
0-0)
|
||||||
7)
|
|
||||||
UNAME_MACHINE="alpha"
|
UNAME_MACHINE="alpha"
|
||||||
;;
|
;;
|
||||||
15)
|
1-0)
|
||||||
UNAME_MACHINE="alphaev5"
|
UNAME_MACHINE="alphaev5"
|
||||||
;;
|
;;
|
||||||
14)
|
1-1)
|
||||||
UNAME_MACHINE="alphaev56"
|
UNAME_MACHINE="alphaev56"
|
||||||
;;
|
;;
|
||||||
10)
|
1-101)
|
||||||
UNAME_MACHINE="alphapca56"
|
UNAME_MACHINE="alphapca56"
|
||||||
;;
|
;;
|
||||||
16)
|
2-303)
|
||||||
UNAME_MACHINE="alphaev6"
|
UNAME_MACHINE="alphaev6"
|
||||||
;;
|
;;
|
||||||
|
2-307)
|
||||||
|
UNAME_MACHINE="alphaev67"
|
||||||
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
objdump --private-headers $dummy | \
|
objdump --private-headers $dummy | \
|
||||||
@@ -638,6 +789,7 @@ EOF
|
|||||||
elif test "${UNAME_MACHINE}" = "mips" ; then
|
elif test "${UNAME_MACHINE}" = "mips" ; then
|
||||||
cat >$dummy.c <<EOF
|
cat >$dummy.c <<EOF
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
#include <stdio.h> /* for printf() prototype */
|
||||||
int main (int argc, char *argv[]) {
|
int main (int argc, char *argv[]) {
|
||||||
#else
|
#else
|
||||||
int main (argc, argv) int argc; char *argv[]; {
|
int main (argc, argv) int argc; char *argv[]; {
|
||||||
@@ -651,8 +803,10 @@ EOF
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
${CC-cc} $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm $dummy.c $dummy && exit 0
|
$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm $dummy.c $dummy && exit 0
|
||||||
rm -f $dummy.c $dummy
|
rm -f $dummy.c $dummy
|
||||||
|
elif test "${UNAME_MACHINE}" = "s390"; then
|
||||||
|
echo s390-ibm-linux && exit 0
|
||||||
else
|
else
|
||||||
# Either a pre-BFD a.out linker (linux-gnuoldld)
|
# Either a pre-BFD a.out linker (linux-gnuoldld)
|
||||||
# or one that does not give us useful --help.
|
# or one that does not give us useful --help.
|
||||||
@@ -674,6 +828,7 @@ EOF
|
|||||||
cat >$dummy.c <<EOF
|
cat >$dummy.c <<EOF
|
||||||
#include <features.h>
|
#include <features.h>
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
#include <stdio.h> /* for printf() prototype */
|
||||||
int main (int argc, char *argv[]) {
|
int main (int argc, char *argv[]) {
|
||||||
#else
|
#else
|
||||||
int main (argc, argv) int argc; char *argv[]; {
|
int main (argc, argv) int argc; char *argv[]; {
|
||||||
@@ -694,7 +849,7 @@ EOF
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
${CC-cc} $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm $dummy.c $dummy && exit 0
|
$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm $dummy.c $dummy && exit 0
|
||||||
rm -f $dummy.c $dummy
|
rm -f $dummy.c $dummy
|
||||||
fi ;;
|
fi ;;
|
||||||
# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. earlier versions
|
# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. earlier versions
|
||||||
@@ -711,8 +866,18 @@ EOF
|
|||||||
echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
|
echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
i?86:*:4.*:* | i?86:SYSTEM_V:4.*:*)
|
i?86:*:4.*:* | i?86:SYSTEM_V:4.*:*)
|
||||||
|
UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
|
||||||
if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
|
if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
|
||||||
echo ${UNAME_MACHINE}-univel-sysv${UNAME_RELEASE}
|
echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
|
||||||
|
else
|
||||||
|
echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
|
||||||
|
fi
|
||||||
|
exit 0 ;;
|
||||||
|
i?86:*:5:7*)
|
||||||
|
# Fixed at (any) Pentium or better
|
||||||
|
UNAME_MACHINE=i586
|
||||||
|
if [ ${UNAME_SYSTEM} = "UnixWare" ] ; then
|
||||||
|
echo ${UNAME_MACHINE}-sco-sysv${UNAME_RELEASE}uw${UNAME_VERSION}
|
||||||
else
|
else
|
||||||
echo ${UNAME_MACHINE}-pc-sysv${UNAME_RELEASE}
|
echo ${UNAME_MACHINE}-pc-sysv${UNAME_RELEASE}
|
||||||
fi
|
fi
|
||||||
@@ -726,19 +891,20 @@ EOF
|
|||||||
(/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486
|
(/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486
|
||||||
(/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \
|
(/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \
|
||||||
&& UNAME_MACHINE=i586
|
&& UNAME_MACHINE=i586
|
||||||
|
(/bin/uname -X|egrep '^Machine.*Pent ?II' >/dev/null) \
|
||||||
|
&& UNAME_MACHINE=i686
|
||||||
|
(/bin/uname -X|egrep '^Machine.*Pentium Pro' >/dev/null) \
|
||||||
|
&& UNAME_MACHINE=i686
|
||||||
echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
|
echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
|
||||||
else
|
else
|
||||||
echo ${UNAME_MACHINE}-pc-sysv32
|
echo ${UNAME_MACHINE}-pc-sysv32
|
||||||
fi
|
fi
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
i?86:UnixWare:*:*)
|
i?86:*DOS:*:*)
|
||||||
if /bin/uname -X 2>/dev/null >/dev/null ; then
|
echo ${UNAME_MACHINE}-pc-msdosdjgpp
|
||||||
(/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \
|
|
||||||
&& UNAME_MACHINE=i586
|
|
||||||
fi
|
|
||||||
echo ${UNAME_MACHINE}-unixware-${UNAME_RELEASE}-${UNAME_VERSION}
|
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
pc:*:*:*)
|
pc:*:*:*)
|
||||||
|
# Left here for compatibility:
|
||||||
# uname -m prints for DJGPP always 'pc', but it prints nothing about
|
# uname -m prints for DJGPP always 'pc', but it prints nothing about
|
||||||
# the processor, so we play safe by assuming i386.
|
# the processor, so we play safe by assuming i386.
|
||||||
echo i386-pc-msdosdjgpp
|
echo i386-pc-msdosdjgpp
|
||||||
@@ -824,7 +990,7 @@ EOF
|
|||||||
news*:NEWS-OS:*:6*)
|
news*:NEWS-OS:*:6*)
|
||||||
echo mips-sony-newsos6
|
echo mips-sony-newsos6
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R4000:UNIX_SV:*:*)
|
R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
|
||||||
if [ -d /usr/nec ]; then
|
if [ -d /usr/nec ]; then
|
||||||
echo mips-nec-sysv${UNAME_RELEASE}
|
echo mips-nec-sysv${UNAME_RELEASE}
|
||||||
else
|
else
|
||||||
@@ -852,6 +1018,15 @@ EOF
|
|||||||
*:Rhapsody:*:*)
|
*:Rhapsody:*:*)
|
||||||
echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
|
echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
|
Power*:Mac*OS:*:*)
|
||||||
|
echo powerpc-apple-macos${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
|
*:Mac*OS:*:*)
|
||||||
|
echo ${UNAME_MACHINE}-apple-macos${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
|
*:QNX:*:4*)
|
||||||
|
echo i386-qnx-qnx${UNAME_VERSION}
|
||||||
|
exit 0 ;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
#echo '(No uname command or uname output not recognized.)' 1>&2
|
#echo '(No uname command or uname output not recognized.)' 1>&2
|
||||||
@@ -958,7 +1133,7 @@ main ()
|
|||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
${CC-cc} $dummy.c -o $dummy 2>/dev/null && ./$dummy && rm $dummy.c $dummy && exit 0
|
$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy && rm $dummy.c $dummy && exit 0
|
||||||
rm -f $dummy.c $dummy
|
rm -f $dummy.c $dummy
|
||||||
|
|
||||||
# Apollos put the system type in the environment.
|
# Apollos put the system type in the environment.
|
||||||
|
|||||||
353
libffi/config.sub
vendored
353
libffi/config.sub
vendored
@@ -1,6 +1,8 @@
|
|||||||
#! /bin/sh
|
#! /bin/sh
|
||||||
# Configuration validation subroutine script, version 1.1.
|
# Configuration validation subroutine script, version 1.1.
|
||||||
# Copyright (C) 1991, 92-97, 1998 Free Software Foundation, Inc.
|
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000
|
||||||
|
# Free Software Foundation, Inc.
|
||||||
|
#
|
||||||
# This file is (in principle) common to ALL GNU software.
|
# This file is (in principle) common to ALL GNU software.
|
||||||
# The presence of a machine in this file suggests that SOME GNU software
|
# The presence of a machine in this file suggests that SOME GNU software
|
||||||
# can handle that machine. It does not imply ALL GNU software can.
|
# can handle that machine. It does not imply ALL GNU software can.
|
||||||
@@ -25,6 +27,9 @@
|
|||||||
# configuration script generated by Autoconf, you may include it under
|
# configuration script generated by Autoconf, you may include it under
|
||||||
# the same distribution terms that you use for the rest of that program.
|
# the same distribution terms that you use for the rest of that program.
|
||||||
|
|
||||||
|
# Written by Per Bothner <bothner@cygnus.com>.
|
||||||
|
# Please send patches to <config-patches@gnu.org>.
|
||||||
|
#
|
||||||
# Configuration subroutine to validate and canonicalize a configuration type.
|
# Configuration subroutine to validate and canonicalize a configuration type.
|
||||||
# Supply the specified configuration type as an argument.
|
# Supply the specified configuration type as an argument.
|
||||||
# If it is invalid, we print an error message on stderr and exit with code 1.
|
# If it is invalid, we print an error message on stderr and exit with code 1.
|
||||||
@@ -98,11 +103,21 @@ case $os in
|
|||||||
os=
|
os=
|
||||||
basic_machine=$1
|
basic_machine=$1
|
||||||
;;
|
;;
|
||||||
|
-sim | -cisco | -oki | -wec | -winbond)
|
||||||
|
os=
|
||||||
|
basic_machine=$1
|
||||||
|
;;
|
||||||
|
-scout)
|
||||||
|
;;
|
||||||
|
-wrs)
|
||||||
|
os=-vxworks
|
||||||
|
basic_machine=$1
|
||||||
|
;;
|
||||||
-hiux*)
|
-hiux*)
|
||||||
os=-hiuxwe2
|
os=-hiuxwe2
|
||||||
;;
|
;;
|
||||||
-sco5)
|
-sco5)
|
||||||
os=sco3.2v5
|
os=-sco3.2v5
|
||||||
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
|
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
|
||||||
;;
|
;;
|
||||||
-sco4)
|
-sco4)
|
||||||
@@ -121,6 +136,9 @@ case $os in
|
|||||||
os=-sco3.2v2
|
os=-sco3.2v2
|
||||||
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
|
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
|
||||||
;;
|
;;
|
||||||
|
-udk*)
|
||||||
|
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
|
||||||
|
;;
|
||||||
-isc)
|
-isc)
|
||||||
os=-isc2.2
|
os=-isc2.2
|
||||||
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
|
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
|
||||||
@@ -143,23 +161,34 @@ case $os in
|
|||||||
-psos*)
|
-psos*)
|
||||||
os=-psos
|
os=-psos
|
||||||
;;
|
;;
|
||||||
|
-mint | -mint[0-9]*)
|
||||||
|
basic_machine=m68k-atari
|
||||||
|
os=-mint
|
||||||
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
# Decode aliases for certain CPU-COMPANY combinations.
|
# Decode aliases for certain CPU-COMPANY combinations.
|
||||||
case $basic_machine in
|
case $basic_machine in
|
||||||
# Recognize the basic CPU types without company name.
|
# Recognize the basic CPU types without company name.
|
||||||
# Some are omitted here because they have special meanings below.
|
# Some are omitted here because they have special meanings below.
|
||||||
tahoe | i860 | m32r | m68k | m68000 | m88k | ns32k | arc | arm \
|
tahoe | i860 | ia64 | m32r | m68k | m68000 | m88k | ns32k | arc | arm \
|
||||||
| arme[lb] | pyramid | mn10200 | mn10300 | tron | a29k \
|
| arme[lb] | pyramid | mn10200 | mn10300 | tron | a29k \
|
||||||
| 580 | i960 | h8300 | hppa | hppa1.0 | hppa1.1 | hppa2.0 \
|
| 580 | i960 | h8300 \
|
||||||
| hppa2.0w \
|
| hppa | hppa1.0 | hppa1.1 | hppa2.0 | hppa2.0w | hppa2.0n \
|
||||||
| alpha | alphaev5 | alphaev56 | we32k | ns16k | clipper \
|
| alpha | alphaev[4-8] | alphaev56 | alphapca5[67] \
|
||||||
| i370 | sh | powerpc | powerpcle | 1750a | dsp16xx | pdp11 \
|
| alphaev6[78] \
|
||||||
| mips64 | mipsel | mips64el | mips64orion | mips64orionel \
|
| we32k | ns16k | clipper | i370 | sh | powerpc | powerpcle \
|
||||||
| mipstx39 | mipstx39el \
|
| 1750a | dsp16xx | pdp11 | mips16 | mips64 | mipsel | mips64el \
|
||||||
| sparc | sparclet | sparclite | sparc64 | v850)
|
| mips64orion | mips64orionel | mipstx39 | mipstx39el \
|
||||||
|
| mips64vr4300 | mips64vr4300el | mips64vr4100 | mips64vr4100el \
|
||||||
|
| mips64vr5000 | miprs64vr5000el | mcore \
|
||||||
|
| sparc | sparclet | sparclite | sparc64 | sparcv9 | v850 | c4x \
|
||||||
|
| thumb | d10v | fr30 | avr)
|
||||||
basic_machine=$basic_machine-unknown
|
basic_machine=$basic_machine-unknown
|
||||||
;;
|
;;
|
||||||
|
m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | z8k | v70 | h8500 | w65 | pj | pjl)
|
||||||
|
;;
|
||||||
|
|
||||||
# We use `pc' rather than `unknown'
|
# We use `pc' rather than `unknown'
|
||||||
# because (1) that's what they normally are, and
|
# because (1) that's what they normally are, and
|
||||||
# (2) the word "unknown" tends to confuse beginning users.
|
# (2) the word "unknown" tends to confuse beginning users.
|
||||||
@@ -172,28 +201,46 @@ case $basic_machine in
|
|||||||
exit 1
|
exit 1
|
||||||
;;
|
;;
|
||||||
# Recognize the basic CPU types with company name.
|
# Recognize the basic CPU types with company name.
|
||||||
vax-* | tahoe-* | i[34567]86-* | i860-* | m32r-* | m68k-* | m68000-* \
|
# FIXME: clean up the formatting here.
|
||||||
|
vax-* | tahoe-* | i[34567]86-* | i860-* | ia64-* | m32r-* | m68k-* | m68000-* \
|
||||||
| m88k-* | sparc-* | ns32k-* | fx80-* | arc-* | arm-* | c[123]* \
|
| m88k-* | sparc-* | ns32k-* | fx80-* | arc-* | arm-* | c[123]* \
|
||||||
| mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* \
|
| mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* \
|
||||||
| power-* | none-* | 580-* | cray2-* | h8300-* | i960-* \
|
| power-* | none-* | 580-* | cray2-* | h8300-* | h8500-* | i960-* \
|
||||||
| xmp-* | ymp-* | hppa-* | hppa1.0-* | hppa1.1-* | hppa2.0-* \
|
| xmp-* | ymp-* \
|
||||||
| hppa2.0w-* \
|
| hppa-* | hppa1.0-* | hppa1.1-* | hppa2.0-* | hppa2.0w-* | hppa2.0n-* \
|
||||||
| alpha-* | alphaev5-* | alphaev56-* | we32k-* | cydra-* \
|
| alpha-* | alphaev[4-8]-* | alphaev56-* | alphapca5[67]-* \
|
||||||
| ns16k-* | pn-* | np1-* | xps100-* | clipper-* | orion-* \
|
| alphaev6[78]-* \
|
||||||
|
| we32k-* | cydra-* | ns16k-* | pn-* | np1-* | xps100-* \
|
||||||
|
| clipper-* | orion-* \
|
||||||
| sparclite-* | pdp11-* | sh-* | powerpc-* | powerpcle-* \
|
| sparclite-* | pdp11-* | sh-* | powerpc-* | powerpcle-* \
|
||||||
| sparc64-* | mips64-* | mipsel-* \
|
| sparc64-* | sparcv9-* | sparc86x-* | mips16-* | mips64-* | mipsel-* \
|
||||||
| mips64el-* | mips64orion-* | mips64orionel-* \
|
| mips64el-* | mips64orion-* | mips64orionel-* \
|
||||||
| mipstx39-* | mipstx39el-* \
|
| mips64vr4100-* | mips64vr4100el-* | mips64vr4300-* | mips64vr4300el-* \
|
||||||
| f301-* | armv*-*)
|
| mipstx39-* | mipstx39el-* | mcore-* \
|
||||||
|
| f301-* | armv*-* | s390-* | sv1-* | t3e-* \
|
||||||
|
| m88110-* | m680[01234]0-* | m683?2-* | m68360-* | z8k-* | d10v-* \
|
||||||
|
| thumb-* | v850-* | d30v-* | tic30-* | c30-* | fr30-* )
|
||||||
;;
|
;;
|
||||||
# Recognize the various machine names and aliases which stand
|
# Recognize the various machine names and aliases which stand
|
||||||
# for a CPU type and a company and sometimes even an OS.
|
# for a CPU type and a company and sometimes even an OS.
|
||||||
|
386bsd)
|
||||||
|
basic_machine=i386-unknown
|
||||||
|
os=-bsd
|
||||||
|
;;
|
||||||
3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
|
3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
|
||||||
basic_machine=m68000-att
|
basic_machine=m68000-att
|
||||||
;;
|
;;
|
||||||
3b*)
|
3b*)
|
||||||
basic_machine=we32k-att
|
basic_machine=we32k-att
|
||||||
;;
|
;;
|
||||||
|
a29khif)
|
||||||
|
basic_machine=a29k-amd
|
||||||
|
os=-udi
|
||||||
|
;;
|
||||||
|
adobe68k)
|
||||||
|
basic_machine=m68010-adobe
|
||||||
|
os=-scout
|
||||||
|
;;
|
||||||
alliant | fx80)
|
alliant | fx80)
|
||||||
basic_machine=fx80-alliant
|
basic_machine=fx80-alliant
|
||||||
;;
|
;;
|
||||||
@@ -223,6 +270,10 @@ case $basic_machine in
|
|||||||
basic_machine=m68k-apollo
|
basic_machine=m68k-apollo
|
||||||
os=-sysv
|
os=-sysv
|
||||||
;;
|
;;
|
||||||
|
apollo68bsd)
|
||||||
|
basic_machine=m68k-apollo
|
||||||
|
os=-bsd
|
||||||
|
;;
|
||||||
aux)
|
aux)
|
||||||
basic_machine=m68k-apple
|
basic_machine=m68k-apple
|
||||||
os=-aux
|
os=-aux
|
||||||
@@ -299,6 +350,10 @@ case $basic_machine in
|
|||||||
encore | umax | mmax)
|
encore | umax | mmax)
|
||||||
basic_machine=ns32k-encore
|
basic_machine=ns32k-encore
|
||||||
;;
|
;;
|
||||||
|
es1800 | OSE68k | ose68k | ose | OSE)
|
||||||
|
basic_machine=m68k-ericsson
|
||||||
|
os=-ose
|
||||||
|
;;
|
||||||
fx2800)
|
fx2800)
|
||||||
basic_machine=i860-alliant
|
basic_machine=i860-alliant
|
||||||
;;
|
;;
|
||||||
@@ -317,6 +372,14 @@ case $basic_machine in
|
|||||||
basic_machine=h8300-hitachi
|
basic_machine=h8300-hitachi
|
||||||
os=-hms
|
os=-hms
|
||||||
;;
|
;;
|
||||||
|
h8300xray)
|
||||||
|
basic_machine=h8300-hitachi
|
||||||
|
os=-xray
|
||||||
|
;;
|
||||||
|
h8500hms)
|
||||||
|
basic_machine=h8500-hitachi
|
||||||
|
os=-hms
|
||||||
|
;;
|
||||||
harris)
|
harris)
|
||||||
basic_machine=m88k-harris
|
basic_machine=m88k-harris
|
||||||
os=-sysv3
|
os=-sysv3
|
||||||
@@ -332,13 +395,30 @@ case $basic_machine in
|
|||||||
basic_machine=m68k-hp
|
basic_machine=m68k-hp
|
||||||
os=-hpux
|
os=-hpux
|
||||||
;;
|
;;
|
||||||
|
hp3k9[0-9][0-9] | hp9[0-9][0-9])
|
||||||
|
basic_machine=hppa1.0-hp
|
||||||
|
;;
|
||||||
hp9k2[0-9][0-9] | hp9k31[0-9])
|
hp9k2[0-9][0-9] | hp9k31[0-9])
|
||||||
basic_machine=m68000-hp
|
basic_machine=m68000-hp
|
||||||
;;
|
;;
|
||||||
hp9k3[2-9][0-9])
|
hp9k3[2-9][0-9])
|
||||||
basic_machine=m68k-hp
|
basic_machine=m68k-hp
|
||||||
;;
|
;;
|
||||||
hp9k7[0-9][0-9] | hp7[0-9][0-9] | hp9k8[0-9]7 | hp8[0-9]7)
|
hp9k6[0-9][0-9] | hp6[0-9][0-9])
|
||||||
|
basic_machine=hppa1.0-hp
|
||||||
|
;;
|
||||||
|
hp9k7[0-79][0-9] | hp7[0-79][0-9])
|
||||||
|
basic_machine=hppa1.1-hp
|
||||||
|
;;
|
||||||
|
hp9k78[0-9] | hp78[0-9])
|
||||||
|
# FIXME: really hppa2.0-hp
|
||||||
|
basic_machine=hppa1.1-hp
|
||||||
|
;;
|
||||||
|
hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
|
||||||
|
# FIXME: really hppa2.0-hp
|
||||||
|
basic_machine=hppa1.1-hp
|
||||||
|
;;
|
||||||
|
hp9k8[0-9][13679] | hp8[0-9][13679])
|
||||||
basic_machine=hppa1.1-hp
|
basic_machine=hppa1.1-hp
|
||||||
;;
|
;;
|
||||||
hp9k8[0-9][0-9] | hp8[0-9][0-9])
|
hp9k8[0-9][0-9] | hp8[0-9][0-9])
|
||||||
@@ -347,17 +427,16 @@ case $basic_machine in
|
|||||||
hppa-next)
|
hppa-next)
|
||||||
os=-nextstep3
|
os=-nextstep3
|
||||||
;;
|
;;
|
||||||
hp3k9[0-9][0-9] | hp9[0-9][0-9])
|
hppaosf)
|
||||||
basic_machine=hppa1.0-hp
|
basic_machine=hppa1.1-hp
|
||||||
os=-mpeix
|
os=-osf
|
||||||
;;
|
;;
|
||||||
hp3k9[0-9][0-9] | hp9[0-9][0-9])
|
hppro)
|
||||||
basic_machine=hppa1.0-hp
|
basic_machine=hppa1.1-hp
|
||||||
os=-mpeix
|
os=-proelf
|
||||||
;;
|
;;
|
||||||
i370-ibm* | ibm*)
|
i370-ibm* | ibm*)
|
||||||
basic_machine=i370-ibm
|
basic_machine=i370-ibm
|
||||||
os=-mvs
|
|
||||||
;;
|
;;
|
||||||
# I'm not sure what "Sysv32" means. Should this be sysv3.2?
|
# I'm not sure what "Sysv32" means. Should this be sysv3.2?
|
||||||
i[34567]86v32)
|
i[34567]86v32)
|
||||||
@@ -376,6 +455,25 @@ case $basic_machine in
|
|||||||
basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
|
basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
|
||||||
os=-solaris2
|
os=-solaris2
|
||||||
;;
|
;;
|
||||||
|
i386mach)
|
||||||
|
basic_machine=i386-mach
|
||||||
|
os=-mach
|
||||||
|
;;
|
||||||
|
i386-vsta | vsta)
|
||||||
|
basic_machine=i386-unknown
|
||||||
|
os=-vsta
|
||||||
|
;;
|
||||||
|
i386-go32 | go32)
|
||||||
|
basic_machine=i386-unknown
|
||||||
|
os=-go32
|
||||||
|
;;
|
||||||
|
i386-mingw32 | mingw32)
|
||||||
|
basic_machine=i386-unknown
|
||||||
|
os=-mingw32
|
||||||
|
;;
|
||||||
|
i386-qnx | qnx)
|
||||||
|
basic_machine=i386-qnx
|
||||||
|
;;
|
||||||
iris | iris4d)
|
iris | iris4d)
|
||||||
basic_machine=mips-sgi
|
basic_machine=mips-sgi
|
||||||
case $os in
|
case $os in
|
||||||
@@ -404,6 +502,10 @@ case $basic_machine in
|
|||||||
miniframe)
|
miniframe)
|
||||||
basic_machine=m68000-convergent
|
basic_machine=m68000-convergent
|
||||||
;;
|
;;
|
||||||
|
*mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
|
||||||
|
basic_machine=m68k-atari
|
||||||
|
os=-mint
|
||||||
|
;;
|
||||||
mipsel*-linux*)
|
mipsel*-linux*)
|
||||||
basic_machine=mipsel-unknown
|
basic_machine=mipsel-unknown
|
||||||
os=-linux-gnu
|
os=-linux-gnu
|
||||||
@@ -418,12 +520,32 @@ case $basic_machine in
|
|||||||
mips3*)
|
mips3*)
|
||||||
basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
|
basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
|
||||||
;;
|
;;
|
||||||
|
mmix*)
|
||||||
|
basic_machine=mmix-knuth
|
||||||
|
os=-mmixware
|
||||||
|
;;
|
||||||
|
monitor)
|
||||||
|
basic_machine=m68k-rom68k
|
||||||
|
os=-coff
|
||||||
|
;;
|
||||||
|
msdos)
|
||||||
|
basic_machine=i386-unknown
|
||||||
|
os=-msdos
|
||||||
|
;;
|
||||||
|
mvs)
|
||||||
|
basic_machine=i370-ibm
|
||||||
|
os=-mvs
|
||||||
|
;;
|
||||||
ncr3000)
|
ncr3000)
|
||||||
basic_machine=i486-ncr
|
basic_machine=i486-ncr
|
||||||
os=-sysv4
|
os=-sysv4
|
||||||
;;
|
;;
|
||||||
|
netbsd386)
|
||||||
|
basic_machine=i386-unknown
|
||||||
|
os=-netbsd
|
||||||
|
;;
|
||||||
netwinder)
|
netwinder)
|
||||||
basic_machine=armv4l-corel
|
basic_machine=armv4l-rebel
|
||||||
os=-linux
|
os=-linux
|
||||||
;;
|
;;
|
||||||
news | news700 | news800 | news900)
|
news | news700 | news800 | news900)
|
||||||
@@ -438,6 +560,10 @@ case $basic_machine in
|
|||||||
basic_machine=mips-sony
|
basic_machine=mips-sony
|
||||||
os=-newsos
|
os=-newsos
|
||||||
;;
|
;;
|
||||||
|
necv70)
|
||||||
|
basic_machine=v70-nec
|
||||||
|
os=-sysv
|
||||||
|
;;
|
||||||
next | m*-next )
|
next | m*-next )
|
||||||
basic_machine=m68k-next
|
basic_machine=m68k-next
|
||||||
case $os in
|
case $os in
|
||||||
@@ -463,9 +589,25 @@ case $basic_machine in
|
|||||||
basic_machine=i960-intel
|
basic_machine=i960-intel
|
||||||
os=-nindy
|
os=-nindy
|
||||||
;;
|
;;
|
||||||
|
mon960)
|
||||||
|
basic_machine=i960-intel
|
||||||
|
os=-mon960
|
||||||
|
;;
|
||||||
np1)
|
np1)
|
||||||
basic_machine=np1-gould
|
basic_machine=np1-gould
|
||||||
;;
|
;;
|
||||||
|
op50n-* | op60c-*)
|
||||||
|
basic_machine=hppa1.1-oki
|
||||||
|
os=-proelf
|
||||||
|
;;
|
||||||
|
OSE68000 | ose68000)
|
||||||
|
basic_machine=m68000-ericsson
|
||||||
|
os=-ose
|
||||||
|
;;
|
||||||
|
os68k)
|
||||||
|
basic_machine=m68k-none
|
||||||
|
os=-os68k
|
||||||
|
;;
|
||||||
pa-hitachi)
|
pa-hitachi)
|
||||||
basic_machine=hppa1.1-hitachi
|
basic_machine=hppa1.1-hitachi
|
||||||
os=-hiuxwe2
|
os=-hiuxwe2
|
||||||
@@ -483,19 +625,19 @@ case $basic_machine in
|
|||||||
pc532 | pc532-*)
|
pc532 | pc532-*)
|
||||||
basic_machine=ns32k-pc532
|
basic_machine=ns32k-pc532
|
||||||
;;
|
;;
|
||||||
pentium | p5 | k5 | nexen)
|
pentium | p5 | k5 | k6 | nexen)
|
||||||
basic_machine=i586-pc
|
basic_machine=i586-pc
|
||||||
;;
|
;;
|
||||||
pentiumpro | p6 | k6 | 6x86)
|
pentiumpro | p6 | 6x86)
|
||||||
basic_machine=i686-pc
|
basic_machine=i686-pc
|
||||||
;;
|
;;
|
||||||
pentiumii | pentium2)
|
pentiumii | pentium2)
|
||||||
basic_machine=i786-pc
|
basic_machine=i786-pc
|
||||||
;;
|
;;
|
||||||
pentium-* | p5-* | k5-* | nexen-*)
|
pentium-* | p5-* | k5-* | k6-* | nexen-*)
|
||||||
basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
|
basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
|
||||||
;;
|
;;
|
||||||
pentiumpro-* | p6-* | k6-* | 6x86-*)
|
pentiumpro-* | p6-* | 6x86-*)
|
||||||
basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
|
basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
|
||||||
;;
|
;;
|
||||||
pentiumii-* | pentium2-*)
|
pentiumii-* | pentium2-*)
|
||||||
@@ -519,12 +661,20 @@ case $basic_machine in
|
|||||||
ps2)
|
ps2)
|
||||||
basic_machine=i386-ibm
|
basic_machine=i386-ibm
|
||||||
;;
|
;;
|
||||||
|
rom68k)
|
||||||
|
basic_machine=m68k-rom68k
|
||||||
|
os=-coff
|
||||||
|
;;
|
||||||
rm[46]00)
|
rm[46]00)
|
||||||
basic_machine=mips-siemens
|
basic_machine=mips-siemens
|
||||||
;;
|
;;
|
||||||
rtpc | rtpc-*)
|
rtpc | rtpc-*)
|
||||||
basic_machine=romp-ibm
|
basic_machine=romp-ibm
|
||||||
;;
|
;;
|
||||||
|
sa29200)
|
||||||
|
basic_machine=a29k-amd
|
||||||
|
os=-udi
|
||||||
|
;;
|
||||||
sequent)
|
sequent)
|
||||||
basic_machine=i386-sequent
|
basic_machine=i386-sequent
|
||||||
;;
|
;;
|
||||||
@@ -532,6 +682,10 @@ case $basic_machine in
|
|||||||
basic_machine=sh-hitachi
|
basic_machine=sh-hitachi
|
||||||
os=-hms
|
os=-hms
|
||||||
;;
|
;;
|
||||||
|
sparclite-wrs)
|
||||||
|
basic_machine=sparclite-wrs
|
||||||
|
os=-vxworks
|
||||||
|
;;
|
||||||
sps7)
|
sps7)
|
||||||
basic_machine=m68k-bull
|
basic_machine=m68k-bull
|
||||||
os=-sysv2
|
os=-sysv2
|
||||||
@@ -539,6 +693,13 @@ case $basic_machine in
|
|||||||
spur)
|
spur)
|
||||||
basic_machine=spur-unknown
|
basic_machine=spur-unknown
|
||||||
;;
|
;;
|
||||||
|
st2000)
|
||||||
|
basic_machine=m68k-tandem
|
||||||
|
;;
|
||||||
|
stratus)
|
||||||
|
basic_machine=i860-stratus
|
||||||
|
os=-sysv4
|
||||||
|
;;
|
||||||
sun2)
|
sun2)
|
||||||
basic_machine=m68000-sun
|
basic_machine=m68000-sun
|
||||||
;;
|
;;
|
||||||
@@ -579,10 +740,18 @@ case $basic_machine in
|
|||||||
sun386 | sun386i | roadrunner)
|
sun386 | sun386i | roadrunner)
|
||||||
basic_machine=i386-sun
|
basic_machine=i386-sun
|
||||||
;;
|
;;
|
||||||
|
sv1)
|
||||||
|
basic_machine=sv1-cray
|
||||||
|
os=-unicos
|
||||||
|
;;
|
||||||
symmetry)
|
symmetry)
|
||||||
basic_machine=i386-sequent
|
basic_machine=i386-sequent
|
||||||
os=-dynix
|
os=-dynix
|
||||||
;;
|
;;
|
||||||
|
t3e)
|
||||||
|
basic_machine=t3e-cray
|
||||||
|
os=-unicos
|
||||||
|
;;
|
||||||
tx39)
|
tx39)
|
||||||
basic_machine=mipstx39-unknown
|
basic_machine=mipstx39-unknown
|
||||||
;;
|
;;
|
||||||
@@ -600,6 +769,10 @@ case $basic_machine in
|
|||||||
basic_machine=a29k-nyu
|
basic_machine=a29k-nyu
|
||||||
os=-sym1
|
os=-sym1
|
||||||
;;
|
;;
|
||||||
|
v810 | necv810)
|
||||||
|
basic_machine=v810-nec
|
||||||
|
os=-none
|
||||||
|
;;
|
||||||
vaxv)
|
vaxv)
|
||||||
basic_machine=vax-dec
|
basic_machine=vax-dec
|
||||||
os=-sysv
|
os=-sysv
|
||||||
@@ -623,6 +796,14 @@ case $basic_machine in
|
|||||||
basic_machine=a29k-wrs
|
basic_machine=a29k-wrs
|
||||||
os=-vxworks
|
os=-vxworks
|
||||||
;;
|
;;
|
||||||
|
w65*)
|
||||||
|
basic_machine=w65-wdc
|
||||||
|
os=-none
|
||||||
|
;;
|
||||||
|
w89k-*)
|
||||||
|
basic_machine=hppa1.1-winbond
|
||||||
|
os=-proelf
|
||||||
|
;;
|
||||||
xmp)
|
xmp)
|
||||||
basic_machine=xmp-cray
|
basic_machine=xmp-cray
|
||||||
os=-unicos
|
os=-unicos
|
||||||
@@ -630,6 +811,10 @@ case $basic_machine in
|
|||||||
xps | xps100)
|
xps | xps100)
|
||||||
basic_machine=xps100-honeywell
|
basic_machine=xps100-honeywell
|
||||||
;;
|
;;
|
||||||
|
z8k-*-coff)
|
||||||
|
basic_machine=z8k-unknown
|
||||||
|
os=-sim
|
||||||
|
;;
|
||||||
none)
|
none)
|
||||||
basic_machine=none-none
|
basic_machine=none-none
|
||||||
os=-none
|
os=-none
|
||||||
@@ -637,6 +822,15 @@ case $basic_machine in
|
|||||||
|
|
||||||
# Here we handle the default manufacturer of certain CPU types. It is in
|
# Here we handle the default manufacturer of certain CPU types. It is in
|
||||||
# some cases the only manufacturer, in others, it is the most popular.
|
# some cases the only manufacturer, in others, it is the most popular.
|
||||||
|
w89k)
|
||||||
|
basic_machine=hppa1.1-winbond
|
||||||
|
;;
|
||||||
|
op50n)
|
||||||
|
basic_machine=hppa1.1-oki
|
||||||
|
;;
|
||||||
|
op60c)
|
||||||
|
basic_machine=hppa1.1-oki
|
||||||
|
;;
|
||||||
mips)
|
mips)
|
||||||
if [ x$os = x-linux-gnu ]; then
|
if [ x$os = x-linux-gnu ]; then
|
||||||
basic_machine=mips-unknown
|
basic_machine=mips-unknown
|
||||||
@@ -659,7 +853,7 @@ case $basic_machine in
|
|||||||
we32k)
|
we32k)
|
||||||
basic_machine=we32k-att
|
basic_machine=we32k-att
|
||||||
;;
|
;;
|
||||||
sparc)
|
sparc | sparcv9)
|
||||||
basic_machine=sparc-sun
|
basic_machine=sparc-sun
|
||||||
;;
|
;;
|
||||||
cydra)
|
cydra)
|
||||||
@@ -671,6 +865,16 @@ case $basic_machine in
|
|||||||
orion105)
|
orion105)
|
||||||
basic_machine=clipper-highlevel
|
basic_machine=clipper-highlevel
|
||||||
;;
|
;;
|
||||||
|
mac | mpw | mac-mpw)
|
||||||
|
basic_machine=m68k-apple
|
||||||
|
;;
|
||||||
|
pmac | pmac-mpw)
|
||||||
|
basic_machine=powerpc-apple
|
||||||
|
;;
|
||||||
|
c4x*)
|
||||||
|
basic_machine=c4x-none
|
||||||
|
os=-coff
|
||||||
|
;;
|
||||||
*)
|
*)
|
||||||
echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
|
echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
|
||||||
exit 1
|
exit 1
|
||||||
@@ -724,14 +928,21 @@ case $os in
|
|||||||
| -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
|
| -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
|
||||||
| -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
|
| -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
|
||||||
| -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \
|
| -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \
|
||||||
| -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* \
|
| -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
|
||||||
| -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
|
| -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
|
||||||
| -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
|
| -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
|
||||||
| -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
|
| -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
|
||||||
| -mingw32* | -linux-gnu* | -uxpv* | -beos* | -rhapsody* \
|
| -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \
|
||||||
| -openstep* | -mpeix* | -oskit*)
|
| -interix* | -uwin* | -rhapsody* | -opened* | -openstep* | -oskit*)
|
||||||
# Remember, each alternative MUST END IN *, to match a version number.
|
# Remember, each alternative MUST END IN *, to match a version number.
|
||||||
;;
|
;;
|
||||||
|
-sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
|
||||||
|
| -windows* | -osx | -abug | -netware* | -os9* | -beos* \
|
||||||
|
| -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
|
||||||
|
;;
|
||||||
|
-mac*)
|
||||||
|
os=`echo $os | sed -e 's|mac|macos|'`
|
||||||
|
;;
|
||||||
-linux*)
|
-linux*)
|
||||||
os=`echo $os | sed -e 's|linux|linux-gnu|'`
|
os=`echo $os | sed -e 's|linux|linux-gnu|'`
|
||||||
;;
|
;;
|
||||||
@@ -741,6 +952,12 @@ case $os in
|
|||||||
-sunos6*)
|
-sunos6*)
|
||||||
os=`echo $os | sed -e 's|sunos6|solaris3|'`
|
os=`echo $os | sed -e 's|sunos6|solaris3|'`
|
||||||
;;
|
;;
|
||||||
|
-opened*)
|
||||||
|
os=-openedition
|
||||||
|
;;
|
||||||
|
-wince*)
|
||||||
|
os=-wince
|
||||||
|
;;
|
||||||
-osfrose*)
|
-osfrose*)
|
||||||
os=-osfrose
|
os=-osfrose
|
||||||
;;
|
;;
|
||||||
@@ -756,6 +973,9 @@ case $os in
|
|||||||
-acis*)
|
-acis*)
|
||||||
os=-aos
|
os=-aos
|
||||||
;;
|
;;
|
||||||
|
-386bsd)
|
||||||
|
os=-bsd
|
||||||
|
;;
|
||||||
-ctix* | -uts*)
|
-ctix* | -uts*)
|
||||||
os=-sysv
|
os=-sysv
|
||||||
;;
|
;;
|
||||||
@@ -775,6 +995,9 @@ case $os in
|
|||||||
-oss*)
|
-oss*)
|
||||||
os=-sysv3
|
os=-sysv3
|
||||||
;;
|
;;
|
||||||
|
-qnx)
|
||||||
|
os=-qnx4
|
||||||
|
;;
|
||||||
-svr4)
|
-svr4)
|
||||||
os=-sysv4
|
os=-sysv4
|
||||||
;;
|
;;
|
||||||
@@ -787,9 +1010,18 @@ case $os in
|
|||||||
# This must come after -sysvr4.
|
# This must come after -sysvr4.
|
||||||
-sysv*)
|
-sysv*)
|
||||||
;;
|
;;
|
||||||
|
-ose*)
|
||||||
|
os=-ose
|
||||||
|
;;
|
||||||
|
-es1800*)
|
||||||
|
os=-ose
|
||||||
|
;;
|
||||||
-xenix)
|
-xenix)
|
||||||
os=-xenix
|
os=-xenix
|
||||||
;;
|
;;
|
||||||
|
-*mint | -*MiNT)
|
||||||
|
os=-mint
|
||||||
|
;;
|
||||||
-none)
|
-none)
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
@@ -815,7 +1047,7 @@ case $basic_machine in
|
|||||||
*-acorn)
|
*-acorn)
|
||||||
os=-riscix1.2
|
os=-riscix1.2
|
||||||
;;
|
;;
|
||||||
arm*-corel)
|
arm*-rebel)
|
||||||
os=-linux
|
os=-linux
|
||||||
;;
|
;;
|
||||||
arm*-semi)
|
arm*-semi)
|
||||||
@@ -839,6 +1071,15 @@ case $basic_machine in
|
|||||||
# default.
|
# default.
|
||||||
# os=-sunos4
|
# os=-sunos4
|
||||||
;;
|
;;
|
||||||
|
m68*-cisco)
|
||||||
|
os=-aout
|
||||||
|
;;
|
||||||
|
mips*-cisco)
|
||||||
|
os=-elf
|
||||||
|
;;
|
||||||
|
mips*-*)
|
||||||
|
os=-elf
|
||||||
|
;;
|
||||||
*-tti) # must be before sparc entry or we get the wrong os.
|
*-tti) # must be before sparc entry or we get the wrong os.
|
||||||
os=-sysv3
|
os=-sysv3
|
||||||
;;
|
;;
|
||||||
@@ -851,6 +1092,15 @@ case $basic_machine in
|
|||||||
*-ibm)
|
*-ibm)
|
||||||
os=-aix
|
os=-aix
|
||||||
;;
|
;;
|
||||||
|
*-wec)
|
||||||
|
os=-proelf
|
||||||
|
;;
|
||||||
|
*-winbond)
|
||||||
|
os=-proelf
|
||||||
|
;;
|
||||||
|
*-oki)
|
||||||
|
os=-proelf
|
||||||
|
;;
|
||||||
*-hp)
|
*-hp)
|
||||||
os=-hpux
|
os=-hpux
|
||||||
;;
|
;;
|
||||||
@@ -914,6 +1164,18 @@ case $basic_machine in
|
|||||||
f301-fujitsu)
|
f301-fujitsu)
|
||||||
os=-uxpv
|
os=-uxpv
|
||||||
;;
|
;;
|
||||||
|
*-rom68k)
|
||||||
|
os=-coff
|
||||||
|
;;
|
||||||
|
*-*bug)
|
||||||
|
os=-coff
|
||||||
|
;;
|
||||||
|
*-apple)
|
||||||
|
os=-macos
|
||||||
|
;;
|
||||||
|
*-atari*)
|
||||||
|
os=-mint
|
||||||
|
;;
|
||||||
*)
|
*)
|
||||||
os=-none
|
os=-none
|
||||||
;;
|
;;
|
||||||
@@ -935,10 +1197,10 @@ case $basic_machine in
|
|||||||
-aix*)
|
-aix*)
|
||||||
vendor=ibm
|
vendor=ibm
|
||||||
;;
|
;;
|
||||||
-hpux*)
|
-beos*)
|
||||||
vendor=hp
|
vendor=be
|
||||||
;;
|
;;
|
||||||
-mpeix*)
|
-hpux*)
|
||||||
vendor=hp
|
vendor=hp
|
||||||
;;
|
;;
|
||||||
-mpeix*)
|
-mpeix*)
|
||||||
@@ -959,7 +1221,7 @@ case $basic_machine in
|
|||||||
-genix*)
|
-genix*)
|
||||||
vendor=ns
|
vendor=ns
|
||||||
;;
|
;;
|
||||||
-mvs*)
|
-mvs* | -opened*)
|
||||||
vendor=ibm
|
vendor=ibm
|
||||||
;;
|
;;
|
||||||
-ptx*)
|
-ptx*)
|
||||||
@@ -971,6 +1233,15 @@ case $basic_machine in
|
|||||||
-aux*)
|
-aux*)
|
||||||
vendor=apple
|
vendor=apple
|
||||||
;;
|
;;
|
||||||
|
-hms*)
|
||||||
|
vendor=hitachi
|
||||||
|
;;
|
||||||
|
-mpw* | -macos*)
|
||||||
|
vendor=apple
|
||||||
|
;;
|
||||||
|
-*mint | -*MiNT)
|
||||||
|
vendor=atari
|
||||||
|
;;
|
||||||
esac
|
esac
|
||||||
basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
|
basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
|
||||||
;;
|
;;
|
||||||
|
|||||||
972
libffi/configure
vendored
972
libffi/configure
vendored
File diff suppressed because it is too large
Load Diff
@@ -9,9 +9,32 @@ AC_MSG_WARN(then use the most recent one - libffi-1.20.)
|
|||||||
AC_MSG_WARN(***********************************************************)
|
AC_MSG_WARN(***********************************************************)
|
||||||
AC_MSG_WARN(***********************************************************)
|
AC_MSG_WARN(***********************************************************)
|
||||||
|
|
||||||
|
dnl Default to --enable-multilib
|
||||||
|
AC_ARG_ENABLE(multilib,
|
||||||
|
[ --enable-multilib build many library versions (default)],
|
||||||
|
[case "${enableval}" in
|
||||||
|
yes) multilib=yes ;;
|
||||||
|
no) multilib=no ;;
|
||||||
|
*) AC_MSG_ERROR(bad value ${enableval} for multilib option) ;;
|
||||||
|
esac], [multilib=yes])dnl
|
||||||
|
|
||||||
|
dnl We may get other options which we don't document:
|
||||||
|
dnl --with-target-subdir, --with-multisrctop, --with-multisubdir
|
||||||
|
|
||||||
|
if test "${srcdir}" = "."; then
|
||||||
|
if test "${with_target_subdir}" != "."; then
|
||||||
|
libffi_basedir="${srcdir}/${with_multisrctop}.."
|
||||||
|
else
|
||||||
|
libffi_basedir="${srcdir}/${with_multisrctop}"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
libffi_basedir="${srcdir}"
|
||||||
|
fi
|
||||||
|
AC_SUBST(libffi_basedir)
|
||||||
|
|
||||||
AC_CANONICAL_HOST
|
AC_CANONICAL_HOST
|
||||||
|
|
||||||
AM_INIT_AUTOMAKE(libffi,2.00-beta)
|
AM_INIT_AUTOMAKE(libffi,2.00-beta,no-define)
|
||||||
|
|
||||||
AC_EXEEXT
|
AC_EXEEXT
|
||||||
AM_MAINTAINER_MODE
|
AM_MAINTAINER_MODE
|
||||||
@@ -22,11 +45,15 @@ AC_PROG_LIBTOOL
|
|||||||
TARGETDIR="unknown"
|
TARGETDIR="unknown"
|
||||||
case "$host" in
|
case "$host" in
|
||||||
mips-sgi-irix5.* | mips-sgi-irix6.*) TARGET=MIPS; TARGETDIR=mips;;
|
mips-sgi-irix5.* | mips-sgi-irix6.*) TARGET=MIPS; TARGETDIR=mips;;
|
||||||
i*86-pc-linux*) TARGET=X86; TARGETDIR=x86;;
|
i*86-*-linux*) TARGET=X86; TARGETDIR=x86;;
|
||||||
|
i*86-*-solaris*) TARGET=X86; TARGETDIR=x86;;
|
||||||
i*86-*-beos*) TARGET=X86; TARGETDIR=x86;;
|
i*86-*-beos*) TARGET=X86; TARGETDIR=x86;;
|
||||||
sparc-sun-4*) TARGET=SPARC; TARGETDIR=sparc;;
|
sparc-sun-4*) TARGET=SPARC; TARGETDIR=sparc;;
|
||||||
sparc-sun-*) TARGET=SPARC; TARGETDIR=sparc;;
|
sparc-sun-*) TARGET=SPARC; TARGETDIR=sparc;;
|
||||||
|
sparc-*-linux*) TARGET=SPARC; TARGETDIR=sparc;;
|
||||||
|
sparc64-*-linux*) TARGET=SPARC; TARGETDIR=sparc;;
|
||||||
alpha*-*-linux* | alpha*-*-osf*) TARGET=ALPHA; TARGETDIR=alpha;;
|
alpha*-*-linux* | alpha*-*-osf*) TARGET=ALPHA; TARGETDIR=alpha;;
|
||||||
|
ia64*-*-*) TARGET=IA64; TARGETDIR=ia64;;
|
||||||
m68k-*-linux*) TARGET=M68K; TARGETDIR=m68k;;
|
m68k-*-linux*) TARGET=M68K; TARGETDIR=m68k;;
|
||||||
powerpc-*-linux* | powerpc-*-sysv*) TARGET=POWERPC; TARGETDIR=powerpc;;
|
powerpc-*-linux* | powerpc-*-sysv*) TARGET=POWERPC; TARGETDIR=powerpc;;
|
||||||
powerpc-*-beos*) TARGET=POWERPC; TARGETDIR=powerpc;;
|
powerpc-*-beos*) TARGET=POWERPC; TARGETDIR=powerpc;;
|
||||||
@@ -42,6 +69,7 @@ AM_CONDITIONAL(MIPS_SGI, test ${TARGET}${ac_cv_prog_gcc} = MIPSno)
|
|||||||
AM_CONDITIONAL(SPARC, test x$TARGET = xSPARC)
|
AM_CONDITIONAL(SPARC, test x$TARGET = xSPARC)
|
||||||
AM_CONDITIONAL(X86, test x$TARGET = xX86)
|
AM_CONDITIONAL(X86, test x$TARGET = xX86)
|
||||||
AM_CONDITIONAL(ALPHA, test x$TARGET = xALPHA)
|
AM_CONDITIONAL(ALPHA, test x$TARGET = xALPHA)
|
||||||
|
AM_CONDITIONAL(IA64, test x$TARGET = xIA64)
|
||||||
AM_CONDITIONAL(M68K, test x$TARGET = xM68K)
|
AM_CONDITIONAL(M68K, test x$TARGET = xM68K)
|
||||||
AM_CONDITIONAL(POWERPC, test x$TARGET = xPOWERPC)
|
AM_CONDITIONAL(POWERPC, test x$TARGET = xPOWERPC)
|
||||||
AM_CONDITIONAL(ARM, test x$TARGET = xARM)
|
AM_CONDITIONAL(ARM, test x$TARGET = xARM)
|
||||||
@@ -67,16 +95,38 @@ AC_SUBST(TARGETDIR)
|
|||||||
|
|
||||||
AC_SUBST(SHELL)
|
AC_SUBST(SHELL)
|
||||||
|
|
||||||
AC_ARG_ENABLE(debug,[ --enable-debug Debugging mode], AC_DEFINE(FFI_DEBUG))
|
AC_ARG_ENABLE(debug,[ --enable-debug debugging mode], AC_DEFINE(FFI_DEBUG))
|
||||||
|
|
||||||
AC_ARG_ENABLE(debug,[ --disable-structs Omit code for struct support], AC_DEFINE(FFI_NO_STRUCTS))
|
AC_ARG_ENABLE(debug,[ --disable-structs omit code for struct support], AC_DEFINE(FFI_NO_STRUCTS))
|
||||||
|
|
||||||
AC_ARG_ENABLE(debug,[ --disable-raw-api Make the raw api unavailable], AC_DEFINE(FFI_NO_RAW_API))
|
AC_ARG_ENABLE(debug,[ --disable-raw-api make the raw api unavailable], AC_DEFINE(FFI_NO_RAW_API))
|
||||||
|
|
||||||
AC_ARG_ENABLE(purify-safety,
|
AC_ARG_ENABLE(purify-safety,
|
||||||
[ --enable-purify-safety Purify-safe mode], AC_DEFINE(USING_PURIFY))
|
[ --enable-purify-safety purify-safe mode], AC_DEFINE(USING_PURIFY))
|
||||||
|
|
||||||
AC_OUTPUT(include/Makefile include/ffi.h Makefile,,
|
AM_CONDITIONAL(USE_LIBDIR, test -z "$with_cross_host")
|
||||||
|
|
||||||
|
if test "${multilib}" = "yes"; then
|
||||||
|
multilib_arg="--enable-multilib"
|
||||||
|
else
|
||||||
|
multilib_arg=
|
||||||
|
fi
|
||||||
|
|
||||||
|
AC_OUTPUT(include/Makefile include/ffi.h Makefile,
|
||||||
|
[
|
||||||
|
if test -n "$CONFIG_FILES"; then
|
||||||
|
ac_file=Makefile . ${libffi_basedir}/config-ml.in
|
||||||
|
fi
|
||||||
|
],
|
||||||
|
srcdir=${srcdir}
|
||||||
|
host=${host}
|
||||||
|
target=${target}
|
||||||
|
with_multisubdir=${with_multisubdir}
|
||||||
|
ac_configure_args="${multilib_arg} ${ac_configure_args}"
|
||||||
|
CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
|
||||||
|
libffi_basedir=${libffi_basedir}
|
||||||
|
CC="${CC}"
|
||||||
|
DEFS="$DEFS"
|
||||||
test ! -d include && mkdir include
|
test ! -d include && mkdir include
|
||||||
test ! -f include/fficonfig.h && cp fficonfig.h include/fficonfig.h
|
test ! -f include/fficonfig.h && cp fficonfig.h include/fficonfig.h
|
||||||
if cmp -s fficonfig.h include/fficonfig.h 2>/dev/null; then
|
if cmp -s fficonfig.h include/fficonfig.h 2>/dev/null; then
|
||||||
|
|||||||
@@ -68,10 +68,3 @@
|
|||||||
|
|
||||||
/* Define if you have the memcpy function. */
|
/* Define if you have the memcpy function. */
|
||||||
#undef HAVE_MEMCPY
|
#undef HAVE_MEMCPY
|
||||||
|
|
||||||
/* Name of package */
|
|
||||||
#undef PACKAGE
|
|
||||||
|
|
||||||
/* Version number of package */
|
|
||||||
#undef VERSION
|
|
||||||
|
|
||||||
|
|||||||
@@ -59,25 +59,22 @@ PRE_UNINSTALL = :
|
|||||||
POST_UNINSTALL = :
|
POST_UNINSTALL = :
|
||||||
host_alias = @host_alias@
|
host_alias = @host_alias@
|
||||||
host_triplet = @host@
|
host_triplet = @host@
|
||||||
AMTAR = @AMTAR@
|
|
||||||
AMTARFLAGS = @AMTARFLAGS@
|
|
||||||
AS = @AS@
|
AS = @AS@
|
||||||
CC = @CC@
|
CC = @CC@
|
||||||
DLLTOOL = @DLLTOOL@
|
DLLTOOL = @DLLTOOL@
|
||||||
EXEEXT = @EXEEXT@
|
EXEEXT = @EXEEXT@
|
||||||
LD = @LD@
|
|
||||||
LIBTOOL = @LIBTOOL@
|
LIBTOOL = @LIBTOOL@
|
||||||
LN_S = @LN_S@
|
LN_S = @LN_S@
|
||||||
MAINT = @MAINT@
|
MAINT = @MAINT@
|
||||||
MAKEINFO = @MAKEINFO@
|
MAKEINFO = @MAKEINFO@
|
||||||
NM = @NM@
|
OBJDUMP = @OBJDUMP@
|
||||||
PACKAGE = @PACKAGE@
|
PACKAGE = @PACKAGE@
|
||||||
RANLIB = @RANLIB@
|
RANLIB = @RANLIB@
|
||||||
SHELL = @SHELL@
|
SHELL = @SHELL@
|
||||||
TARGET = @TARGET@
|
TARGET = @TARGET@
|
||||||
TARGETDIR = @TARGETDIR@
|
TARGETDIR = @TARGETDIR@
|
||||||
USE_SYMBOL_UNDERSCORE = @USE_SYMBOL_UNDERSCORE@
|
|
||||||
VERSION = @VERSION@
|
VERSION = @VERSION@
|
||||||
|
libffi_basedir = @libffi_basedir@
|
||||||
|
|
||||||
|
|
||||||
AUTOMAKE_OPTIONS = foreign
|
AUTOMAKE_OPTIONS = foreign
|
||||||
@@ -136,15 +133,10 @@ TAGS:
|
|||||||
distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
|
distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
|
||||||
|
|
||||||
distdir: $(DISTFILES)
|
distdir: $(DISTFILES)
|
||||||
here=`cd $(top_builddir) && pwd`; \
|
|
||||||
top_distdir=`cd $(top_distdir) && pwd`; \
|
|
||||||
distdir=`cd $(distdir) && pwd`; \
|
|
||||||
cd $(top_srcdir) \
|
|
||||||
&& $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --foreign include/Makefile
|
|
||||||
@for file in $(DISTFILES); do \
|
@for file in $(DISTFILES); do \
|
||||||
d=$(srcdir); \
|
d=$(srcdir); \
|
||||||
if test -d $$d/$$file; then \
|
if test -d $$d/$$file; then \
|
||||||
cp -pr $$d/$$file $(distdir)/$$file; \
|
cp -pR $$d/$$file $(distdir); \
|
||||||
else \
|
else \
|
||||||
test -f $(distdir)/$$file \
|
test -f $(distdir)/$$file \
|
||||||
|| ln $$d/$$file $(distdir)/$$file 2> /dev/null \
|
|| ln $$d/$$file $(distdir)/$$file 2> /dev/null \
|
||||||
@@ -187,6 +179,7 @@ distclean-generic:
|
|||||||
-rm -f config.cache config.log stamp-h stamp-h[0-9]*
|
-rm -f config.cache config.log stamp-h stamp-h[0-9]*
|
||||||
|
|
||||||
maintainer-clean-generic:
|
maintainer-clean-generic:
|
||||||
|
-rm -f Makefile.in
|
||||||
mostlyclean-am: mostlyclean-generic
|
mostlyclean-am: mostlyclean-generic
|
||||||
|
|
||||||
mostlyclean: mostlyclean-am
|
mostlyclean: mostlyclean-am
|
||||||
|
|||||||
@@ -1,7 +1,5 @@
|
|||||||
/* -----------------------------------------------------------------*-C-*-
|
/* -----------------------------------------------------------------*-C-*-
|
||||||
libffi @VERSION@ - Copyright (c) 1996-1999 Cygnus Solutions
|
libffi 2.00 - Copyright (c) 1996, 1997, 1998, 1999, 2000 Red Hat, Inc.
|
||||||
|
|
||||||
$Id: ffi.h.in,v 1.3 1999/08/08 13:05:12 green Exp $
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
a copy of this software and associated documentation files (the
|
a copy of this software and associated documentation files (the
|
||||||
@@ -24,35 +22,46 @@
|
|||||||
|
|
||||||
----------------------------------------------------------------------- */
|
----------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
/* -------------------------------------------------------------------
|
||||||
|
The basic API is described in the README file.
|
||||||
|
|
||||||
|
The raw API is designed to bypass some of the argument packing
|
||||||
|
and unpacking on architectures for which it can be avoided.
|
||||||
|
|
||||||
|
The closure API allows interpreted functions to be packaged up
|
||||||
|
inside a C function pointer, so that they can be called as C functions,
|
||||||
|
with no understanding on the client side that they are interpreted.
|
||||||
|
It can also be used in other cases in which it is necessary to package
|
||||||
|
up a user specified parameter and a function pointer as a single
|
||||||
|
function pointer.
|
||||||
|
|
||||||
|
The closure API must be implemented in order to get its functionality,
|
||||||
|
e.g. for use by gij. Routines are provided to emulate the raw API
|
||||||
|
if the underlying platform doesn't allow faster implementation.
|
||||||
|
|
||||||
|
More details on the raw and cloure API can be found in:
|
||||||
|
|
||||||
|
http://sourceware.cygnus.com/ml/java-discuss/1999-q3/msg00138.html
|
||||||
|
|
||||||
|
and
|
||||||
|
|
||||||
|
http://sourceware.cygnus.com/ml/java-discuss/1999-q3/msg00174.html
|
||||||
|
-------------------------------------------------------------------- */
|
||||||
|
|
||||||
#ifndef LIBFFI_H
|
#ifndef LIBFFI_H
|
||||||
#define LIBFFI_H
|
#define LIBFFI_H
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Specify which architecture libffi is configured for. */
|
/* Specify which architecture libffi is configured for. */
|
||||||
#define @TARGET@
|
#define @TARGET@
|
||||||
|
|
||||||
/* ---- System configuration information --------------------------------- */
|
/* ---- System configuration information --------------------------------- */
|
||||||
|
|
||||||
#ifdef PACKAGE
|
|
||||||
#define OLD_PACKAGE PACKAGE
|
|
||||||
#undef PACKAGE
|
|
||||||
#endif
|
|
||||||
#ifdef VERSION
|
|
||||||
#define OLD_VERSION VERSION
|
|
||||||
#undef VERSION
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <fficonfig.h>
|
#include <fficonfig.h>
|
||||||
|
|
||||||
#undef PACKAGE
|
|
||||||
#undef VERSION
|
|
||||||
|
|
||||||
#ifdef OLD_PACKAGE
|
|
||||||
#define PACKAGE OLD_PACKAGE
|
|
||||||
#endif
|
|
||||||
#ifdef OLD_VERSION
|
|
||||||
#define VERSION OLD_VERSION
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if !defined(LIBFFI_ASM)
|
#if !defined(LIBFFI_ASM)
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
#if defined(FFI_DEBUG)
|
#if defined(FFI_DEBUG)
|
||||||
@@ -70,75 +79,69 @@
|
|||||||
#define SINT8 signed char
|
#define SINT8 signed char
|
||||||
|
|
||||||
#if SIZEOF_INT == 2
|
#if SIZEOF_INT == 2
|
||||||
|
|
||||||
#define UINT16 unsigned int
|
#define UINT16 unsigned int
|
||||||
#define SINT16 int
|
#define SINT16 int
|
||||||
#define ffi_type_uint ffi_type_uint16
|
#define ffi_type_uint ffi_type_uint16
|
||||||
#define ffi_type_sint ffi_type_sint16
|
#define ffi_type_sint ffi_type_sint16
|
||||||
|
#endif
|
||||||
|
|
||||||
#else
|
|
||||||
#if SIZEOF_SHORT == 2
|
#if SIZEOF_SHORT == 2
|
||||||
|
#undef UINT16
|
||||||
|
#undef SINT16
|
||||||
#define UINT16 unsigned short
|
#define UINT16 unsigned short
|
||||||
#define SINT16 short
|
#define SINT16 short
|
||||||
#define ffi_type_ushort ffi_type_uint16
|
#define ffi_type_ushort ffi_type_uint16
|
||||||
#define ffi_type_sshort ffi_type_sint16
|
#define ffi_type_sshort ffi_type_sint16
|
||||||
|
|
||||||
#endif
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if SIZEOF_INT == 4
|
#if SIZEOF_INT == 4
|
||||||
|
|
||||||
#define UINT32 unsigned int
|
#define UINT32 unsigned int
|
||||||
#define SINT32 int
|
#define SINT32 int
|
||||||
#define ffi_type_uint ffi_type_uint32
|
#define ffi_type_uint ffi_type_uint32
|
||||||
#define ffi_type_sint ffi_type_sint32
|
#define ffi_type_sint ffi_type_sint32
|
||||||
|
#endif
|
||||||
|
|
||||||
#else
|
|
||||||
#if SIZEOF_SHORT == 4
|
#if SIZEOF_SHORT == 4
|
||||||
|
#undef UINT32
|
||||||
|
#undef SINT32
|
||||||
#define UINT32 unsigned short
|
#define UINT32 unsigned short
|
||||||
#define SINT32 short
|
#define SINT32 short
|
||||||
#define ffi_type_ushort ffi_type_uint32
|
#define ffi_type_ushort ffi_type_uint32
|
||||||
#define ffi_type_sshort ffi_type_sint32
|
#define ffi_type_sshort ffi_type_sint32
|
||||||
|
#endif
|
||||||
|
|
||||||
#else
|
|
||||||
#if SIZEOF_LONG == 4
|
#if SIZEOF_LONG == 4
|
||||||
|
#undef UINT32
|
||||||
|
#undef SINT32
|
||||||
#define UINT32 unsigned long
|
#define UINT32 unsigned long
|
||||||
#define SINT32 long
|
#define SINT32 long
|
||||||
#define ffi_type_ulong ffi_type_uint32
|
#define ffi_type_ulong ffi_type_uint32
|
||||||
#define ffi_type_slong ffi_type_sint32
|
#define ffi_type_slong ffi_type_sint32
|
||||||
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if SIZEOF_INT == 8
|
#if SIZEOF_INT == 8
|
||||||
|
|
||||||
#define UINT64 unsigned int
|
#define UINT64 unsigned int
|
||||||
#define SINT64 int
|
#define SINT64 int
|
||||||
#define ffi_type_uint ffi_type_uint64
|
#define ffi_type_uint ffi_type_uint64
|
||||||
#define ffi_type_sint ffi_type_sint64
|
#define ffi_type_sint ffi_type_sint64
|
||||||
|
#endif
|
||||||
|
|
||||||
#else
|
|
||||||
#if SIZEOF_LONG == 8
|
#if SIZEOF_LONG == 8
|
||||||
|
#undef UINT64
|
||||||
|
#undef SINT64
|
||||||
#define UINT64 unsigned long
|
#define UINT64 unsigned long
|
||||||
#define SINT64 long
|
#define SINT64 long
|
||||||
#define ffi_type_ulong ffi_type_uint64
|
#define ffi_type_ulong ffi_type_uint64
|
||||||
#define ffi_type_slong ffi_type_sint64
|
#define ffi_type_slong ffi_type_sint64
|
||||||
|
#endif
|
||||||
|
|
||||||
#else
|
|
||||||
#if SIZEOF_LONG_LONG == 8
|
#if SIZEOF_LONG_LONG == 8
|
||||||
|
#undef UINT64
|
||||||
|
#undef SINT64
|
||||||
#define UINT64 unsigned long long
|
#define UINT64 unsigned long long
|
||||||
#define SINT64 long long
|
#define SINT64 long long
|
||||||
#define ffi_type_ulong ffi_type_uint64
|
#define ffi_type_ulonglong ffi_type_uint64
|
||||||
#define ffi_type_slong ffi_type_sint64
|
#define ffi_type_slonglong ffi_type_sint64
|
||||||
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* ---- System specific configurations ----------------------------------- */
|
/* ---- System specific configurations ----------------------------------- */
|
||||||
@@ -149,11 +152,19 @@
|
|||||||
#define SIZEOF_ARG SIZEOF_VOID_P
|
#define SIZEOF_ARG SIZEOF_VOID_P
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef SPARC
|
||||||
|
#if defined(__arch64__) || defined(__sparcv9)
|
||||||
|
#define SPARC64
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef LIBFFI_ASM
|
#ifndef LIBFFI_ASM
|
||||||
|
|
||||||
/* ---- Generic type definitions ----------------------------------------- */
|
/* ---- Generic type definitions ----------------------------------------- */
|
||||||
|
|
||||||
#define ALIGN(v, a) (((((unsigned) (v))-1) | ((a)-1))+1)
|
#define ALIGN(v, a) (((((size_t) (v))-1) | ((a)-1))+1)
|
||||||
|
/* The closure code assumes that this works on pointers, i.e. a size_t */
|
||||||
|
/* can hold a pointer. */
|
||||||
|
|
||||||
typedef enum ffi_abi {
|
typedef enum ffi_abi {
|
||||||
|
|
||||||
@@ -163,9 +174,13 @@ typedef enum ffi_abi {
|
|||||||
/* ---- Sparc -------------------- */
|
/* ---- Sparc -------------------- */
|
||||||
#ifdef SPARC
|
#ifdef SPARC
|
||||||
FFI_V8,
|
FFI_V8,
|
||||||
FFI_DEFAULT_ABI = FFI_V8,
|
|
||||||
FFI_V8PLUS,
|
FFI_V8PLUS,
|
||||||
FFI_V9,
|
FFI_V9,
|
||||||
|
#ifdef SPARC64
|
||||||
|
FFI_DEFAULT_ABI = FFI_V9,
|
||||||
|
#else
|
||||||
|
FFI_DEFAULT_ABI = FFI_V8,
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* ---- Intel x86 ---------------- */
|
/* ---- Intel x86 ---------------- */
|
||||||
@@ -174,6 +189,12 @@ typedef enum ffi_abi {
|
|||||||
FFI_DEFAULT_ABI = FFI_SYSV,
|
FFI_DEFAULT_ABI = FFI_SYSV,
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* ---- Intel ia64 ---------------- */
|
||||||
|
#ifdef IA64
|
||||||
|
FFI_UNIX, /* Linux and all Unix variants use the same conventions */
|
||||||
|
FFI_DEFAULT_ABI = FFI_UNIX,
|
||||||
|
#endif
|
||||||
|
|
||||||
/* ---- Mips --------------------- */
|
/* ---- Mips --------------------- */
|
||||||
#ifdef MIPS
|
#ifdef MIPS
|
||||||
FFI_O32,
|
FFI_O32,
|
||||||
@@ -283,6 +304,7 @@ typedef struct {
|
|||||||
typedef union {
|
typedef union {
|
||||||
SINT_ARG sint;
|
SINT_ARG sint;
|
||||||
UINT_ARG uint;
|
UINT_ARG uint;
|
||||||
|
float flt;
|
||||||
char data[SIZEOF_ARG];
|
char data[SIZEOF_ARG];
|
||||||
void* ptr;
|
void* ptr;
|
||||||
} ffi_raw;
|
} ffi_raw;
|
||||||
@@ -296,8 +318,22 @@ void ffi_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_raw *raw);
|
|||||||
void ffi_raw_to_ptrarray (ffi_cif *cif, ffi_raw *raw, void **args);
|
void ffi_raw_to_ptrarray (ffi_cif *cif, ffi_raw *raw, void **args);
|
||||||
size_t ffi_raw_size (ffi_cif *cif);
|
size_t ffi_raw_size (ffi_cif *cif);
|
||||||
|
|
||||||
|
#if !NO_JAVA_RAW_API
|
||||||
|
|
||||||
|
/* This is analogous to the raw API, except it uses Java parameter */
|
||||||
|
/* packing, even on 64-bit machines. I.e. on 64-bit machines */
|
||||||
|
/* longs and doubles are followed by an empty 64-bit word. */
|
||||||
|
|
||||||
|
void ffi_java_raw_call (/*@dependent@*/ ffi_cif *cif,
|
||||||
|
void (*fn)(),
|
||||||
|
/*@out@*/ void *rvalue,
|
||||||
|
/*@dependent@*/ ffi_raw *avalue);
|
||||||
|
|
||||||
|
void ffi_java_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_raw *raw);
|
||||||
|
void ffi_java_raw_to_ptrarray (ffi_cif *cif, ffi_raw *raw, void **args);
|
||||||
|
size_t ffi_java_raw_size (ffi_cif *cif);
|
||||||
|
|
||||||
|
#endif /* !NO_JAVA_RAW_API */
|
||||||
|
|
||||||
#endif /* !FFI_NO_RAW_API */
|
#endif /* !FFI_NO_RAW_API */
|
||||||
|
|
||||||
@@ -309,6 +345,21 @@ size_t ffi_raw_size (ffi_cif *cif);
|
|||||||
#define FFI_TRAMPOLINE_SIZE 10
|
#define FFI_TRAMPOLINE_SIZE 10
|
||||||
#define FFI_NATIVE_RAW_API 1 /* and has native raw api support */
|
#define FFI_NATIVE_RAW_API 1 /* and has native raw api support */
|
||||||
|
|
||||||
|
#elif defined(IA64)
|
||||||
|
|
||||||
|
#define FFI_CLOSURES 1
|
||||||
|
#define FFI_TRAMPOLINE_SIZE 24 /* Really the following struct, which */
|
||||||
|
/* can be interpreted as a C function */
|
||||||
|
/* decriptor: */
|
||||||
|
|
||||||
|
struct ffi_ia64_trampoline_struct {
|
||||||
|
void * code_pointer; /* Pointer to ffi_closure_UNIX */
|
||||||
|
void * fake_gp; /* Pointer to closure, installed as gp */
|
||||||
|
void * real_gp; /* Real gp value, reinstalled by */
|
||||||
|
/* ffi_closure_UNIX. */
|
||||||
|
};
|
||||||
|
#define FFI_NATIVE_RAW_API 0
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
#define FFI_CLOSURES 0
|
#define FFI_CLOSURES 0
|
||||||
@@ -362,6 +413,14 @@ ffi_prep_raw_closure (ffi_raw_closure*,
|
|||||||
void (*fun)(ffi_cif*,void*,ffi_raw*,void*),
|
void (*fun)(ffi_cif*,void*,ffi_raw*,void*),
|
||||||
void *user_data);
|
void *user_data);
|
||||||
|
|
||||||
|
#ifndef NO_JAVA_RAW_API
|
||||||
|
ffi_status
|
||||||
|
ffi_prep_java_raw_closure (ffi_raw_closure*,
|
||||||
|
ffi_cif *cif,
|
||||||
|
void (*fun)(ffi_cif*,void*,ffi_raw*,void*),
|
||||||
|
void *user_data);
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif /* !FFI_NO_RAW_API */
|
#endif /* !FFI_NO_RAW_API */
|
||||||
#endif /* FFI_CLOSURES */
|
#endif /* FFI_CLOSURES */
|
||||||
|
|
||||||
@@ -409,5 +468,9 @@ void ffi_call(/*@dependent@*/ ffi_cif *cif,
|
|||||||
/* This should always refer to the last type code (for sanity checks) */
|
/* This should always refer to the last type code (for sanity checks) */
|
||||||
#define FFI_TYPE_LAST FFI_TYPE_POINTER
|
#define FFI_TYPE_LAST FFI_TYPE_POINTER
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
/* -----------------------------------------------------------------------
|
/* -----------------------------------------------------------------------
|
||||||
ffi_common.h - Copyright (c) 1996 Cygnus Solutions
|
ffi_common.h - Copyright (c) 1996 Cygnus Solutions
|
||||||
|
|
||||||
$Id: ffi_common.h,v 1.1 1998/11/29 16:48:16 green Exp $
|
$Id: ffi_common.h,v 1.2 2000/04/17 03:18:45 green Exp $
|
||||||
|
|
||||||
Common internal definitions and macros. Only necessary for building
|
Common internal definitions and macros. Only necessary for building
|
||||||
libffi.
|
libffi.
|
||||||
@@ -10,6 +10,10 @@
|
|||||||
#ifndef FFI_COMMON_H
|
#ifndef FFI_COMMON_H
|
||||||
#define FFI_COMMON_H
|
#define FFI_COMMON_H
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Do not move this. Some versions of AIX are very picky about where
|
/* Do not move this. Some versions of AIX are very picky about where
|
||||||
this is positioned. */
|
this is positioned. */
|
||||||
#ifdef __GNUC__
|
#ifdef __GNUC__
|
||||||
@@ -45,10 +49,12 @@ char *alloca ();
|
|||||||
#define TRUE (!FALSE)
|
#define TRUE (!FALSE)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef __cplusplus
|
||||||
/* bool is a keyword in C++ */
|
/* bool is a keyword in C++ */
|
||||||
/*@-cppnames@*/
|
/*@-cppnames@*/
|
||||||
typedef int bool;
|
typedef int bool;
|
||||||
/*@=cppnames@*/
|
/*@=cppnames@*/
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef FFI_DEBUG
|
#ifdef FFI_DEBUG
|
||||||
|
|
||||||
@@ -76,5 +82,10 @@ typedef struct
|
|||||||
/*@dependent@*/ void **avalue;
|
/*@dependent@*/ void **avalue;
|
||||||
} extended_cif;
|
} extended_cif;
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
MIPS FFI Definitions
|
MIPS FFI Definitions
|
||||||
|
|
||||||
$Id: ffi_mips.h,v 1.1 1998/11/29 16:48:16 green Exp $
|
$Id: ffi_mips.h,v 1.2 2000/04/17 03:18:45 green Exp $
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
a copy of this software and associated documentation files (the
|
a copy of this software and associated documentation files (the
|
||||||
|
|||||||
670
libffi/src/ia64/ffi.c
Normal file
670
libffi/src/ia64/ffi.c
Normal file
@@ -0,0 +1,670 @@
|
|||||||
|
/* -----------------------------------------------------------------------
|
||||||
|
ffi.c - Copyright (c) 1998 Cygnus Solutions
|
||||||
|
Copyright (c) 2000 Hewlett Packard Company
|
||||||
|
|
||||||
|
IA64 Foreign Function Interface
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
a copy of this software and associated documentation files (the
|
||||||
|
``Software''), to deal in the Software without restriction, including
|
||||||
|
without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included
|
||||||
|
in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||||
|
IN NO EVENT SHALL CYGNUS SOLUTIONS BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
||||||
|
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||||
|
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||||
|
OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
----------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
#include <ffi.h>
|
||||||
|
#include <ffi_common.h>
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#include "ia64_flags.h"
|
||||||
|
|
||||||
|
/* Memory image of fp register contents. Should eventually be an fp */
|
||||||
|
/* type long enough to hold an entire register. For now we use double. */
|
||||||
|
typedef double float80;
|
||||||
|
|
||||||
|
/* The stack layout at call to ffi_prep_regs. Other_args will remain */
|
||||||
|
/* on the stack for the actual call. Everything else we be transferred */
|
||||||
|
/* to registers and popped by the assembly code. */
|
||||||
|
|
||||||
|
struct ia64_args {
|
||||||
|
long scratch[2]; /* Two scratch words at top of stack. */
|
||||||
|
/* Allows sp to passed as arg pointer. */
|
||||||
|
void * r8_contents; /* Value to be passed in r8 */
|
||||||
|
long spare; /* Not used. */
|
||||||
|
float80 fp_regs[8]; /* Contents of 8 floating point argument */
|
||||||
|
/* registers. */
|
||||||
|
long out_regs[8]; /* Contents of the 8 out registers used */
|
||||||
|
/* for integer parameters. */
|
||||||
|
long other_args[0]; /* Arguments passed on stack, variable size */
|
||||||
|
/* Treated as continuation of out_regs. */
|
||||||
|
};
|
||||||
|
|
||||||
|
static size_t float_type_size(unsigned short tp)
|
||||||
|
{
|
||||||
|
switch(tp) {
|
||||||
|
case FFI_TYPE_FLOAT:
|
||||||
|
return sizeof(float);
|
||||||
|
case FFI_TYPE_DOUBLE:
|
||||||
|
return sizeof(double);
|
||||||
|
#if FFI_TYPE_LONGDOUBLE != FFI_TYPE_DOUBLE
|
||||||
|
case FFI_TYPE_LONGDOUBLE:
|
||||||
|
return sizeof(long double);
|
||||||
|
#endif
|
||||||
|
default:
|
||||||
|
FFI_ASSERT(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Is type a struct containing at most n floats, doubles, or extended
|
||||||
|
* doubles, all of the same fp type?
|
||||||
|
* If so, set *element_type to the fp type.
|
||||||
|
*/
|
||||||
|
static bool is_homogeneous_fp_aggregate(ffi_type * type, int n,
|
||||||
|
unsigned short * element_type)
|
||||||
|
{
|
||||||
|
ffi_type **ptr;
|
||||||
|
unsigned short element, struct_element;
|
||||||
|
|
||||||
|
int type_set = 0;
|
||||||
|
|
||||||
|
FFI_ASSERT(type != NULL);
|
||||||
|
|
||||||
|
FFI_ASSERT(type->elements != NULL);
|
||||||
|
|
||||||
|
ptr = &(type->elements[0]);
|
||||||
|
|
||||||
|
while ((*ptr) != NULL)
|
||||||
|
{
|
||||||
|
switch((*ptr) -> type) {
|
||||||
|
case FFI_TYPE_FLOAT:
|
||||||
|
if (type_set && element != FFI_TYPE_FLOAT) return 0;
|
||||||
|
if (--n < 0) return FALSE;
|
||||||
|
type_set = 1;
|
||||||
|
element = FFI_TYPE_FLOAT;
|
||||||
|
break;
|
||||||
|
case FFI_TYPE_DOUBLE:
|
||||||
|
if (type_set && element != FFI_TYPE_DOUBLE) return 0;
|
||||||
|
if (--n < 0) return FALSE;
|
||||||
|
type_set = 1;
|
||||||
|
element = FFI_TYPE_DOUBLE;
|
||||||
|
break;
|
||||||
|
case FFI_TYPE_STRUCT:
|
||||||
|
if (!is_homogeneous_fp_aggregate(type, n, &struct_element))
|
||||||
|
return FALSE;
|
||||||
|
if (type_set && struct_element != element) return FALSE;
|
||||||
|
n -= (type -> size)/float_type_size(element);
|
||||||
|
element = struct_element;
|
||||||
|
if (n < 0) return FALSE;
|
||||||
|
break;
|
||||||
|
/* case FFI_TYPE_LONGDOUBLE:
|
||||||
|
Not yet implemented. */
|
||||||
|
default:
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
ptr++;
|
||||||
|
}
|
||||||
|
*element_type = element;
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ffi_prep_args is called by the assembly routine once stack space
|
||||||
|
has been allocated for the function's arguments. Returns nonzero
|
||||||
|
if fp registers are used for arguments. */
|
||||||
|
|
||||||
|
static bool
|
||||||
|
ffi_prep_args(struct ia64_args *stack, extended_cif *ecif, int bytes)
|
||||||
|
{
|
||||||
|
register long i, avn;
|
||||||
|
register void **p_argv;
|
||||||
|
register long *argp = stack -> out_regs;
|
||||||
|
register float80 *fp_argp = stack -> fp_regs;
|
||||||
|
register ffi_type **p_arg;
|
||||||
|
|
||||||
|
/* For big return structs, r8 needs to contain the target address. */
|
||||||
|
/* Since r8 is otherwise dead, we set it unconditionally. */
|
||||||
|
stack -> r8_contents = ecif -> rvalue;
|
||||||
|
i = 0;
|
||||||
|
avn = ecif->cif->nargs;
|
||||||
|
p_arg = ecif->cif->arg_types;
|
||||||
|
p_argv = ecif->avalue;
|
||||||
|
while (i < avn)
|
||||||
|
{
|
||||||
|
size_t z; /* z is in units of arg slots or words, not bytes. */
|
||||||
|
|
||||||
|
switch ((*p_arg)->type)
|
||||||
|
{
|
||||||
|
case FFI_TYPE_SINT8:
|
||||||
|
z = 1;
|
||||||
|
*(SINT64 *) argp = *(SINT8 *)(* p_argv);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case FFI_TYPE_UINT8:
|
||||||
|
z = 1;
|
||||||
|
*(UINT64 *) argp = *(UINT8 *)(* p_argv);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case FFI_TYPE_SINT16:
|
||||||
|
z = 1;
|
||||||
|
*(SINT64 *) argp = *(SINT16 *)(* p_argv);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case FFI_TYPE_UINT16:
|
||||||
|
z = 1;
|
||||||
|
*(UINT64 *) argp = *(UINT16 *)(* p_argv);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case FFI_TYPE_SINT32:
|
||||||
|
z = 1;
|
||||||
|
*(SINT64 *) argp = *(SINT32 *)(* p_argv);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case FFI_TYPE_UINT32:
|
||||||
|
z = 1;
|
||||||
|
*(UINT64 *) argp = *(UINT32 *)(* p_argv);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case FFI_TYPE_SINT64:
|
||||||
|
case FFI_TYPE_UINT64:
|
||||||
|
case FFI_TYPE_POINTER:
|
||||||
|
z = 1;
|
||||||
|
*(UINT64 *) argp = *(UINT64 *)(* p_argv);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case FFI_TYPE_FLOAT:
|
||||||
|
z = 1;
|
||||||
|
if (fp_argp - stack->fp_regs < 8)
|
||||||
|
{
|
||||||
|
/* Note the conversion -- all the fp regs are loaded as
|
||||||
|
doubles. */
|
||||||
|
*fp_argp++ = *(float *)(* p_argv);
|
||||||
|
}
|
||||||
|
/* Also put it into the integer registers or memory: */
|
||||||
|
*(UINT64 *) argp = *(UINT32 *)(* p_argv);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case FFI_TYPE_DOUBLE:
|
||||||
|
z = 1;
|
||||||
|
if (fp_argp - stack->fp_regs < 8)
|
||||||
|
*fp_argp++ = *(double *)(* p_argv);
|
||||||
|
/* Also put it into the integer registers or memory: */
|
||||||
|
*(double *) argp = *(double *)(* p_argv);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case FFI_TYPE_STRUCT:
|
||||||
|
{
|
||||||
|
size_t sz = (*p_arg)->size;
|
||||||
|
unsigned short element_type;
|
||||||
|
z = ((*p_arg)->size + SIZEOF_ARG - 1)/SIZEOF_ARG;
|
||||||
|
if (is_homogeneous_fp_aggregate(*p_arg, 8, &element_type)) {
|
||||||
|
int i;
|
||||||
|
int nelements = sz/float_type_size(element_type);
|
||||||
|
for (i = 0; i < nelements; ++i) {
|
||||||
|
switch (element_type) {
|
||||||
|
case FFI_TYPE_FLOAT:
|
||||||
|
if (fp_argp - stack->fp_regs < 8)
|
||||||
|
*fp_argp++ = ((float *)(* p_argv))[i];
|
||||||
|
break;
|
||||||
|
case FFI_TYPE_DOUBLE:
|
||||||
|
if (fp_argp - stack->fp_regs < 8)
|
||||||
|
*fp_argp++ = ((double *)(* p_argv))[i];
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
/* Extended precision not yet implemented. */
|
||||||
|
abort();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* And pass it in integer registers as a struct, with */
|
||||||
|
/* its actual field sizes packed into registers. */
|
||||||
|
memcpy(argp, *p_argv, (*p_arg)->size);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
FFI_ASSERT(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
argp += z;
|
||||||
|
i++, p_arg++, p_argv++;
|
||||||
|
}
|
||||||
|
return (fp_argp != stack -> fp_regs);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Perform machine dependent cif processing */
|
||||||
|
ffi_status
|
||||||
|
ffi_prep_cif_machdep(ffi_cif *cif)
|
||||||
|
{
|
||||||
|
long i, avn;
|
||||||
|
bool is_simple = TRUE;
|
||||||
|
long simple_flag = FFI_SIMPLE_V;
|
||||||
|
/* Adjust cif->bytes to include space for the 2 scratch words,
|
||||||
|
r8 register contents, spare word,
|
||||||
|
the 8 fp register contents, and all 8 integer register contents.
|
||||||
|
This will be removed before the call, though 2 scratch words must
|
||||||
|
remain. */
|
||||||
|
|
||||||
|
cif->bytes += 4*sizeof(long) + 8 *sizeof(float80);
|
||||||
|
if (cif->bytes < sizeof(struct ia64_args))
|
||||||
|
cif->bytes = sizeof(struct ia64_args);
|
||||||
|
|
||||||
|
/* The stack must be double word aligned, so round bytes up
|
||||||
|
appropriately. */
|
||||||
|
|
||||||
|
cif->bytes = ALIGN(cif->bytes, 2*sizeof(void*));
|
||||||
|
|
||||||
|
avn = cif->nargs;
|
||||||
|
if (avn <= 2) {
|
||||||
|
for (i = 0; i < avn; ++i) {
|
||||||
|
switch(cif -> arg_types[i] -> type) {
|
||||||
|
case FFI_TYPE_SINT32:
|
||||||
|
simple_flag = FFI_ADD_INT_ARG(simple_flag);
|
||||||
|
break;
|
||||||
|
case FFI_TYPE_SINT64:
|
||||||
|
case FFI_TYPE_UINT64:
|
||||||
|
case FFI_TYPE_POINTER:
|
||||||
|
simple_flag = FFI_ADD_LONG_ARG(simple_flag);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
is_simple = FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
is_simple = FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Set the return type flag */
|
||||||
|
switch (cif->rtype->type)
|
||||||
|
{
|
||||||
|
case FFI_TYPE_VOID:
|
||||||
|
cif->flags = FFI_TYPE_VOID;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case FFI_TYPE_STRUCT:
|
||||||
|
{
|
||||||
|
size_t sz = cif -> rtype -> size;
|
||||||
|
unsigned short element_type;
|
||||||
|
|
||||||
|
is_simple = FALSE;
|
||||||
|
if (is_homogeneous_fp_aggregate(cif -> rtype, 8, &element_type)) {
|
||||||
|
int nelements = sz/float_type_size(element_type);
|
||||||
|
if (nelements <= 1) {
|
||||||
|
if (0 == nelements) {
|
||||||
|
cif -> flags = FFI_TYPE_VOID;
|
||||||
|
} else {
|
||||||
|
cif -> flags = element_type;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
switch(element_type) {
|
||||||
|
case FFI_TYPE_FLOAT:
|
||||||
|
cif -> flags = FFI_IS_FLOAT_FP_AGGREGATE | nelements;
|
||||||
|
break;
|
||||||
|
case FFI_TYPE_DOUBLE:
|
||||||
|
cif -> flags = FFI_IS_DOUBLE_FP_AGGREGATE | nelements;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
/* long double NYI */
|
||||||
|
abort();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (sz <= 32) {
|
||||||
|
if (sz <= 8) {
|
||||||
|
cif->flags = FFI_TYPE_INT;
|
||||||
|
} else if (sz <= 16) {
|
||||||
|
cif->flags = FFI_IS_SMALL_STRUCT2;
|
||||||
|
} else if (sz <= 24) {
|
||||||
|
cif->flags = FFI_IS_SMALL_STRUCT3;
|
||||||
|
} else {
|
||||||
|
cif->flags = FFI_IS_SMALL_STRUCT4;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
cif->flags = FFI_TYPE_STRUCT;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case FFI_TYPE_FLOAT:
|
||||||
|
is_simple = FALSE;
|
||||||
|
cif->flags = FFI_TYPE_FLOAT;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case FFI_TYPE_DOUBLE:
|
||||||
|
is_simple = FALSE;
|
||||||
|
cif->flags = FFI_TYPE_DOUBLE;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
cif->flags = FFI_TYPE_INT;
|
||||||
|
/* This seems to depend on little endian mode, and the fact that */
|
||||||
|
/* the return pointer always points to at least 8 bytes. But */
|
||||||
|
/* that also seems to be true for other platforms. */
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (is_simple) cif -> flags |= simple_flag;
|
||||||
|
return FFI_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
extern int ffi_call_unix(bool (*)(struct ia64_args *, extended_cif *, int),
|
||||||
|
extended_cif *, unsigned,
|
||||||
|
unsigned, unsigned *, void (*)());
|
||||||
|
|
||||||
|
void
|
||||||
|
ffi_call(ffi_cif *cif, void (*fn)(), void *rvalue, void **avalue)
|
||||||
|
{
|
||||||
|
extended_cif ecif;
|
||||||
|
long simple = cif -> flags & FFI_SIMPLE;
|
||||||
|
|
||||||
|
/* Should this also check for Unix ABI? */
|
||||||
|
/* This is almost, but not quite, machine independent. Note that */
|
||||||
|
/* we can get away with not caring about length of the result because */
|
||||||
|
/* we assume we are little endian, and the result buffer is large */
|
||||||
|
/* enough. */
|
||||||
|
/* This needs work for HP/UX. */
|
||||||
|
if (simple) {
|
||||||
|
long (*lfn)() = (long (*)())fn;
|
||||||
|
long result;
|
||||||
|
switch(simple) {
|
||||||
|
case FFI_SIMPLE_V:
|
||||||
|
result = lfn();
|
||||||
|
break;
|
||||||
|
case FFI_SIMPLE_I:
|
||||||
|
result = lfn(*(int *)avalue[0]);
|
||||||
|
break;
|
||||||
|
case FFI_SIMPLE_L:
|
||||||
|
result = lfn(*(long *)avalue[0]);
|
||||||
|
break;
|
||||||
|
case FFI_SIMPLE_II:
|
||||||
|
result = lfn(*(int *)avalue[0], *(int *)avalue[1]);
|
||||||
|
break;
|
||||||
|
case FFI_SIMPLE_IL:
|
||||||
|
result = lfn(*(int *)avalue[0], *(long *)avalue[1]);
|
||||||
|
break;
|
||||||
|
case FFI_SIMPLE_LI:
|
||||||
|
result = lfn(*(long *)avalue[0], *(int *)avalue[1]);
|
||||||
|
break;
|
||||||
|
case FFI_SIMPLE_LL:
|
||||||
|
result = lfn(*(long *)avalue[0], *(long *)avalue[1]);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if ((cif->flags & ~FFI_SIMPLE) != FFI_TYPE_VOID && 0 != rvalue) {
|
||||||
|
* (long *)rvalue = result;
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
ecif.cif = cif;
|
||||||
|
ecif.avalue = avalue;
|
||||||
|
|
||||||
|
/* If the return value is a struct and we don't have a return
|
||||||
|
value address then we need to make one. */
|
||||||
|
|
||||||
|
if (rvalue == NULL && cif->rtype->type == FFI_TYPE_STRUCT)
|
||||||
|
ecif.rvalue = alloca(cif->rtype->size);
|
||||||
|
else
|
||||||
|
ecif.rvalue = rvalue;
|
||||||
|
|
||||||
|
switch (cif->abi)
|
||||||
|
{
|
||||||
|
case FFI_UNIX:
|
||||||
|
ffi_call_unix(ffi_prep_args, &ecif, cif->bytes,
|
||||||
|
cif->flags, rvalue, fn);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
FFI_ASSERT(0);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Closures represent a pair consisting of a function pointer, and
|
||||||
|
* some user data. A closure is invoked by reinterpreting the closure
|
||||||
|
* as a function pointer, and branching to it. Thus we can make an
|
||||||
|
* interpreted function callable as a C function: We turn the interpreter
|
||||||
|
* itself, together with a pointer specifying the interpreted procedure,
|
||||||
|
* into a closure.
|
||||||
|
* On X86, the first few words of the closure structure actually contain code,
|
||||||
|
* which will do the right thing. On most other architectures, this
|
||||||
|
* would raise some Icache/Dcache coherence issues (which can be solved, but
|
||||||
|
* often not cheaply).
|
||||||
|
* For IA64, function pointer are already pairs consisting of a code
|
||||||
|
* pointer, and a gp pointer. The latter is needed to access global variables.
|
||||||
|
* Here we set up such a pair as the first two words of the closure (in
|
||||||
|
* the "trampoline" area), but we replace the gp pointer with a pointer
|
||||||
|
* to the closure itself. We also add the real gp pointer to the
|
||||||
|
* closure. This allows the function entry code to both retrieve the
|
||||||
|
* user data, and to restire the correct gp pointer.
|
||||||
|
*/
|
||||||
|
|
||||||
|
static void
|
||||||
|
ffi_prep_incoming_args_UNIX(struct ia64_args *args, void **rvalue,
|
||||||
|
void **avalue, ffi_cif *cif);
|
||||||
|
|
||||||
|
/* This function is entered with the doctored gp (r1) value.
|
||||||
|
* This code is extremely gcc specific. There is some argument that
|
||||||
|
* it should really be written in assembly code, since it depends on
|
||||||
|
* gcc properties that might change over time.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* ffi_closure_UNIX is an assembly routine, which copies the register */
|
||||||
|
/* state into s struct ia64_args, and the invokes */
|
||||||
|
/* ffi_closure_UNIX_inner. It also recovers the closure pointer */
|
||||||
|
/* from its fake gp pointer. */
|
||||||
|
void ffi_closure_UNIX();
|
||||||
|
|
||||||
|
#ifndef __GNUC__
|
||||||
|
# error This requires gcc
|
||||||
|
#endif
|
||||||
|
void
|
||||||
|
ffi_closure_UNIX_inner (ffi_closure *closure, struct ia64_args * args)
|
||||||
|
/* Hopefully declarint this as a varargs function will force all args */
|
||||||
|
/* to memory. */
|
||||||
|
{
|
||||||
|
// this is our return value storage
|
||||||
|
long double res;
|
||||||
|
|
||||||
|
// our various things...
|
||||||
|
ffi_cif *cif;
|
||||||
|
unsigned short rtype;
|
||||||
|
void *resp;
|
||||||
|
void **arg_area;
|
||||||
|
|
||||||
|
resp = (void*)&res;
|
||||||
|
cif = closure->cif;
|
||||||
|
arg_area = (void**) alloca (cif->nargs * sizeof (void*));
|
||||||
|
|
||||||
|
/* this call will initialize ARG_AREA, such that each
|
||||||
|
* element in that array points to the corresponding
|
||||||
|
* value on the stack; and if the function returns
|
||||||
|
* a structure, it will re-set RESP to point to the
|
||||||
|
* structure return address. */
|
||||||
|
|
||||||
|
ffi_prep_incoming_args_UNIX(args, (void**)&resp, arg_area, cif);
|
||||||
|
|
||||||
|
(closure->fun) (cif, resp, arg_area, closure->user_data);
|
||||||
|
|
||||||
|
rtype = cif->flags;
|
||||||
|
|
||||||
|
/* now, do a generic return based on the value of rtype */
|
||||||
|
if (rtype == FFI_TYPE_INT)
|
||||||
|
{
|
||||||
|
asm volatile ("ld8 r8=[%0]" : : "r" (resp) : "r8");
|
||||||
|
}
|
||||||
|
else if (rtype == FFI_TYPE_FLOAT)
|
||||||
|
{
|
||||||
|
asm volatile ("ldfs f8=[%0]" : : "r" (resp) : "f8");
|
||||||
|
}
|
||||||
|
else if (rtype == FFI_TYPE_DOUBLE)
|
||||||
|
{
|
||||||
|
asm volatile ("ldfd f8=[%0]" : : "r" (resp) : "f8");
|
||||||
|
}
|
||||||
|
else if (rtype == FFI_IS_SMALL_STRUCT2)
|
||||||
|
{
|
||||||
|
asm volatile ("ld8 r8=[%0]; ld8 r9=[%1]"
|
||||||
|
: : "r" (resp), "r" (resp+8) : "r8","r9");
|
||||||
|
}
|
||||||
|
else if (rtype == FFI_IS_SMALL_STRUCT3)
|
||||||
|
{
|
||||||
|
asm volatile ("ld8 r8=[%0]; ld8 r9=[%1]; ld8 r10=[%2]"
|
||||||
|
: : "r" (resp), "r" (resp+8), "r" (resp+16)
|
||||||
|
: "r8","r9","r10");
|
||||||
|
}
|
||||||
|
else if (rtype == FFI_IS_SMALL_STRUCT4)
|
||||||
|
{
|
||||||
|
asm volatile ("ld8 r8=[%0]; ld8 r9=[%1]; ld8 r10=[%2]; ld8 r11=[%3]"
|
||||||
|
: : "r" (resp), "r" (resp+8), "r" (resp+16), "r" (resp+24)
|
||||||
|
: "r8","r9","r10","r11");
|
||||||
|
}
|
||||||
|
else if (rtype != FFI_TYPE_VOID && rtype != FFI_TYPE_STRUCT)
|
||||||
|
{
|
||||||
|
/* Can only happen for homogeneous FP aggregates? */
|
||||||
|
abort();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
ffi_prep_incoming_args_UNIX(struct ia64_args *args, void **rvalue,
|
||||||
|
void **avalue, ffi_cif *cif)
|
||||||
|
{
|
||||||
|
register unsigned int i;
|
||||||
|
register unsigned int avn;
|
||||||
|
register void **p_argv;
|
||||||
|
register unsigned long *argp = args -> out_regs;
|
||||||
|
unsigned fp_reg_num = 0;
|
||||||
|
register ffi_type **p_arg;
|
||||||
|
|
||||||
|
avn = cif->nargs;
|
||||||
|
p_argv = avalue;
|
||||||
|
|
||||||
|
for (i = cif->nargs, p_arg = cif->arg_types; i != 0; i--, p_arg++)
|
||||||
|
{
|
||||||
|
size_t z; /* In units of words or argument slots. */
|
||||||
|
|
||||||
|
switch ((*p_arg)->type)
|
||||||
|
{
|
||||||
|
case FFI_TYPE_SINT8:
|
||||||
|
case FFI_TYPE_UINT8:
|
||||||
|
case FFI_TYPE_SINT16:
|
||||||
|
case FFI_TYPE_UINT16:
|
||||||
|
case FFI_TYPE_SINT32:
|
||||||
|
case FFI_TYPE_UINT32:
|
||||||
|
case FFI_TYPE_SINT64:
|
||||||
|
case FFI_TYPE_UINT64:
|
||||||
|
case FFI_TYPE_POINTER:
|
||||||
|
z = 1;
|
||||||
|
*p_argv = (void *)argp;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case FFI_TYPE_FLOAT:
|
||||||
|
z = 1;
|
||||||
|
/* Convert argument back to float in place from the saved value */
|
||||||
|
if (fp_reg_num < 8) {
|
||||||
|
*(float *)argp = args -> fp_regs[fp_reg_num++];
|
||||||
|
} else {
|
||||||
|
*(float *)argp = *(double *)argp;
|
||||||
|
}
|
||||||
|
*p_argv = (void *)argp;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case FFI_TYPE_DOUBLE:
|
||||||
|
z = 1;
|
||||||
|
if (fp_reg_num < 8) {
|
||||||
|
*p_argv = args -> fp_regs + fp_reg_num++;
|
||||||
|
} else {
|
||||||
|
*p_argv = (void *)argp;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case FFI_TYPE_STRUCT:
|
||||||
|
{
|
||||||
|
size_t sz = (*p_arg)->size;
|
||||||
|
unsigned short element_type;
|
||||||
|
z = ((*p_arg)->size + SIZEOF_ARG - 1)/SIZEOF_ARG;
|
||||||
|
if (is_homogeneous_fp_aggregate(*p_arg, 8, &element_type)) {
|
||||||
|
int nelements = sz/float_type_size(element_type);
|
||||||
|
if (nelements + fp_reg_num >= 8) {
|
||||||
|
/* hard case NYI. */
|
||||||
|
abort();
|
||||||
|
}
|
||||||
|
if (element_type == FFI_TYPE_DOUBLE) {
|
||||||
|
*p_argv = args -> fp_regs + fp_reg_num;
|
||||||
|
fp_reg_num += nelements;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (element_type == FFI_TYPE_FLOAT) {
|
||||||
|
int j;
|
||||||
|
for (j = 0; j < nelements; ++ j) {
|
||||||
|
((float *)argp)[j] = args -> fp_regs[fp_reg_num + j];
|
||||||
|
}
|
||||||
|
*p_argv = (void *)argp;
|
||||||
|
fp_reg_num += nelements;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
abort(); /* Other fp types NYI */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
FFI_ASSERT(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
argp += z;
|
||||||
|
p_argv++;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Fill in a closure to refer to the specified fun and user_data. */
|
||||||
|
/* cif specifies the argument and result types for fun. */
|
||||||
|
/* the cif must already be prep'ed */
|
||||||
|
|
||||||
|
/* The layout of a function descriptor. A C function pointer really */
|
||||||
|
/* points to one of these. */
|
||||||
|
typedef struct ia64_fd_struct {
|
||||||
|
void *code_pointer;
|
||||||
|
void *gp;
|
||||||
|
} ia64_fd;
|
||||||
|
|
||||||
|
ffi_status
|
||||||
|
ffi_prep_closure (ffi_closure* closure,
|
||||||
|
ffi_cif* cif,
|
||||||
|
void (*fun)(ffi_cif*,void*,void**,void*),
|
||||||
|
void *user_data)
|
||||||
|
{
|
||||||
|
struct ffi_ia64_trampoline_struct *tramp =
|
||||||
|
(struct ffi_ia64_trampoline_struct *) (closure -> tramp);
|
||||||
|
ia64_fd *fd = (ia64_fd *)(void *)ffi_closure_UNIX;
|
||||||
|
|
||||||
|
FFI_ASSERT (cif->abi == FFI_UNIX);
|
||||||
|
|
||||||
|
tramp -> code_pointer = fd -> code_pointer;
|
||||||
|
tramp -> real_gp = fd -> gp;
|
||||||
|
tramp -> fake_gp = closure;
|
||||||
|
closure->cif = cif;
|
||||||
|
closure->user_data = user_data;
|
||||||
|
closure->fun = fun;
|
||||||
|
|
||||||
|
return FFI_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
62
libffi/src/ia64/ia64_flags.h
Normal file
62
libffi/src/ia64/ia64_flags.h
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
/* -----------------------------------------------------------------------
|
||||||
|
ia64_flags.h - Copyright (c) 2000 Hewlett Packard Company
|
||||||
|
|
||||||
|
IA64/unix Foreign Function Interface
|
||||||
|
|
||||||
|
Original author: Hans Boehm, HP Labs
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
a copy of this software and associated documentation files (the
|
||||||
|
``Software''), to deal in the Software without restriction, including
|
||||||
|
without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included
|
||||||
|
in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||||
|
IN NO EVENT SHALL CYGNUS SOLUTIONS BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
||||||
|
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||||
|
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||||
|
OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
----------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
|
||||||
|
/* Homogeneous Floating Point Aggregates (HFAs) which are returned */
|
||||||
|
/* in FP registers. The least significant bits specify the size in */
|
||||||
|
/* words. */
|
||||||
|
#define FFI_IS_FLOAT_FP_AGGREGATE 0x1000
|
||||||
|
#define FFI_IS_DOUBLE_FP_AGGREGATE 0x0800
|
||||||
|
#define FLOAT_FP_AGGREGATE_BIT 12
|
||||||
|
#define DOUBLE_FP_AGGREGATE_BIT 11
|
||||||
|
|
||||||
|
/* Small structures containing N words. If N=1, they are returned */
|
||||||
|
/* as though they were integers. */
|
||||||
|
#define FFI_IS_SMALL_STRUCT2 0x40 /* Struct > 8, <=16 bytes */
|
||||||
|
#define FFI_IS_SMALL_STRUCT3 0x41 /* Struct > 16 <= 24 bytes */
|
||||||
|
#define FFI_IS_SMALL_STRUCT4 0x42 /* Struct > 24, <=32 bytes */
|
||||||
|
|
||||||
|
/* Flag values identifying particularly simple cases, which are */
|
||||||
|
/* handled specially. We treat functions as simple if they take all */
|
||||||
|
/* arguments can be passed as 32 or 64 bit integer quantities, there is */
|
||||||
|
/* either no return value or it can be treated as a 64bit integer, and */
|
||||||
|
/* if there are at most 2 arguments. */
|
||||||
|
/* This is OR'ed with the normal flag values. */
|
||||||
|
#define FFI_SIMPLE_V 0x10000 /* () -> X */
|
||||||
|
#define FFI_SIMPLE_I 0x20000 /* (int) -> X */
|
||||||
|
#define FFI_SIMPLE_L 0x30000 /* (long) -> X */
|
||||||
|
#define FFI_SIMPLE_II 0x40000 /* (int,int) -> X */
|
||||||
|
#define FFI_SIMPLE_IL 0x50000 /* (int,long) -> X */
|
||||||
|
#define FFI_SIMPLE_LI 0x60000 /* (long,int) -> X */
|
||||||
|
#define FFI_SIMPLE_LL 0x70000 /* (long,long) -> X */
|
||||||
|
|
||||||
|
/* Mask for all of the FFI_SIMPLE bits: */
|
||||||
|
#define FFI_SIMPLE 0xf0000
|
||||||
|
|
||||||
|
/* An easy way to build FFI_SIMPLE flags from FFI_SIMPLE_V: */
|
||||||
|
#define FFI_ADD_LONG_ARG(flag) (((flag) << 1) | 0x10000)
|
||||||
|
#define FFI_ADD_INT_ARG(flag) ((flag) << 1)
|
||||||
301
libffi/src/ia64/unix.S
Normal file
301
libffi/src/ia64/unix.S
Normal file
@@ -0,0 +1,301 @@
|
|||||||
|
/* -----------------------------------------------------------------------
|
||||||
|
unix.S - Copyright (c) 1998 Cygnus Solutions
|
||||||
|
Copyright (c) 2000 Hewlett Packard Company
|
||||||
|
|
||||||
|
IA64/unix Foreign Function Interface
|
||||||
|
|
||||||
|
Primary author: Hans Boehm, HP Labs
|
||||||
|
|
||||||
|
Loosely modeled on Cygnus code for other platforms.
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
a copy of this software and associated documentation files (the
|
||||||
|
``Software''), to deal in the Software without restriction, including
|
||||||
|
without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included
|
||||||
|
in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||||
|
IN NO EVENT SHALL CYGNUS SOLUTIONS BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
||||||
|
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||||
|
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||||
|
OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
----------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
#define LIBFFI_ASM
|
||||||
|
#include <ffi.h>
|
||||||
|
#include "ia64_flags.h"
|
||||||
|
|
||||||
|
/* parameters: */
|
||||||
|
#define callback in0
|
||||||
|
#define ecifp in1
|
||||||
|
#define bytes in2
|
||||||
|
#define flags in3
|
||||||
|
#define raddr in4
|
||||||
|
#define fn in5
|
||||||
|
|
||||||
|
#define FLOAT_SZ 8 /* in-memory size of fp operands */
|
||||||
|
|
||||||
|
.text
|
||||||
|
.align 16
|
||||||
|
.global ffi_call_unix#
|
||||||
|
.proc ffi_call_unix#
|
||||||
|
ffi_call_unix:
|
||||||
|
alloc loc0=ar.pfs,6,5,8,0
|
||||||
|
mov loc1=b0;
|
||||||
|
sub sp=sp,bytes
|
||||||
|
mov loc4=r1 /* Save gp */
|
||||||
|
ld8 r8=[callback],8 /* code address of callback */
|
||||||
|
;;
|
||||||
|
mov out0=sp
|
||||||
|
mov out1=ecifp
|
||||||
|
mov out2=bytes
|
||||||
|
ld8 r1=[callback] /* Set up gp for callback. Unnecessary? */
|
||||||
|
mov b6=r8
|
||||||
|
;;
|
||||||
|
br.call.sptk.many b0 = b6 /* call ffi_prep_args */
|
||||||
|
cmp.eq p6,p0=0,r8 /* r8 nonzero ==> need fp regs */
|
||||||
|
;;
|
||||||
|
(p6) add loc2=32+8*FLOAT_SZ,sp
|
||||||
|
(p6) br.cond.dptk.many fp_done
|
||||||
|
;; /* Quiets warning; needed? */
|
||||||
|
add loc2=32,sp
|
||||||
|
add loc3=32+FLOAT_SZ,sp
|
||||||
|
;;
|
||||||
|
ldfd f8=[loc2],2*FLOAT_SZ
|
||||||
|
ldfd f9=[loc3],2*FLOAT_SZ
|
||||||
|
;;
|
||||||
|
ldfd f10=[loc2],2*FLOAT_SZ
|
||||||
|
ldfd f11=[loc3],2*FLOAT_SZ
|
||||||
|
;;
|
||||||
|
ldfd f12=[loc2],2*FLOAT_SZ
|
||||||
|
ldfd f13=[loc3],2*FLOAT_SZ
|
||||||
|
;;
|
||||||
|
ldfd f14=[loc2],2*FLOAT_SZ
|
||||||
|
ldfd f15=[loc3]
|
||||||
|
fp_done:
|
||||||
|
add r9=16,sp /* Pointer to r8_contents */
|
||||||
|
/* loc2 points at first integer register value. */
|
||||||
|
add loc3=8,loc2
|
||||||
|
;;
|
||||||
|
ld8 r8=[r9] /* Just in case we return large struct */
|
||||||
|
ld8 out0=[loc2],16
|
||||||
|
ld8 out1=[loc3],16
|
||||||
|
;;
|
||||||
|
ld8 out2=[loc2],16
|
||||||
|
ld8 out3=[loc3],16
|
||||||
|
;;
|
||||||
|
ld8 out4=[loc2],16
|
||||||
|
ld8 out5=[loc3],16
|
||||||
|
;;
|
||||||
|
ld8 out6=[loc2],16
|
||||||
|
ld8 out7=[loc3]
|
||||||
|
/* loc2 points at first stack parameter. Set sp to 16 bytes */
|
||||||
|
/* below that. */
|
||||||
|
add sp=-16,loc2
|
||||||
|
|
||||||
|
ld8 r8=[fn],8
|
||||||
|
;;
|
||||||
|
ld8 r1=[fn] /* Set up gp */
|
||||||
|
mov b6=r8;;
|
||||||
|
br.call.sptk.many b0 = b6 /* call ffi_prep_args */
|
||||||
|
|
||||||
|
/* Handle return value. */
|
||||||
|
cmp.eq p6,p0=0,raddr
|
||||||
|
cmp.eq p7,p0=FFI_TYPE_INT,flags
|
||||||
|
cmp.eq p10,p0=FFI_IS_SMALL_STRUCT2,flags
|
||||||
|
cmp.eq p11,p0=FFI_IS_SMALL_STRUCT3,flags
|
||||||
|
cmp.eq p12,p0=FFI_IS_SMALL_STRUCT4,flags
|
||||||
|
;;
|
||||||
|
(p6) br.cond.dpnt.few done /* Dont copy ret values if raddr = 0 */
|
||||||
|
(p7) br.cond.dptk.few copy1
|
||||||
|
(p10) br.cond.dpnt.few copy2
|
||||||
|
(p11) br.cond.dpnt.few copy3
|
||||||
|
(p12) br.cond.dpnt.few copy4
|
||||||
|
cmp.eq p8,p0=FFI_TYPE_FLOAT,flags
|
||||||
|
cmp.eq p9,p0=FFI_TYPE_DOUBLE,flags
|
||||||
|
tbit.nz p6,p0=flags,FLOAT_FP_AGGREGATE_BIT
|
||||||
|
tbit.nz p7,p0=flags,DOUBLE_FP_AGGREGATE_BIT
|
||||||
|
;;
|
||||||
|
(p8) stfs [raddr]=f8
|
||||||
|
(p9) stfd [raddr]=f8
|
||||||
|
;;
|
||||||
|
(p6) br.cond.dpnt.few handle_float_hfa
|
||||||
|
(p7) br.cond.dpnt.few handle_double_hfa
|
||||||
|
br done
|
||||||
|
|
||||||
|
copy4:
|
||||||
|
add loc3=24,raddr
|
||||||
|
;;
|
||||||
|
st8 [loc3]=r11
|
||||||
|
copy3:
|
||||||
|
add loc3=16,raddr
|
||||||
|
;;
|
||||||
|
st8 [loc3]=r10
|
||||||
|
copy2:
|
||||||
|
add loc3=8,raddr
|
||||||
|
;;
|
||||||
|
st8 [loc3]=r9
|
||||||
|
copy1:
|
||||||
|
st8 [raddr]=r8
|
||||||
|
/* In the big struct case, raddr was passed as an argument. */
|
||||||
|
/* In the void case there was nothing to do. */
|
||||||
|
|
||||||
|
done:
|
||||||
|
mov r1=loc4 /* Restore gp */
|
||||||
|
mov ar.pfs = loc0
|
||||||
|
mov b0 = loc1
|
||||||
|
br.ret.sptk.many b0
|
||||||
|
|
||||||
|
handle_double_hfa:
|
||||||
|
/* Homogeneous floating point array of doubles is returned in */
|
||||||
|
/* registers f8-f15. Save one at a time to return area. */
|
||||||
|
and flags=0xf,flags /* Retrieve size */
|
||||||
|
;;
|
||||||
|
cmp.eq p6,p0=2,flags
|
||||||
|
cmp.eq p7,p0=3,flags
|
||||||
|
cmp.eq p8,p0=4,flags
|
||||||
|
cmp.eq p9,p0=5,flags
|
||||||
|
cmp.eq p10,p0=6,flags
|
||||||
|
cmp.eq p11,p0=7,flags
|
||||||
|
cmp.eq p12,p0=8,flags
|
||||||
|
;;
|
||||||
|
(p6) br.cond.dptk.few dhfa2
|
||||||
|
(p7) br.cond.dptk.few dhfa3
|
||||||
|
(p8) br.cond.dptk.few dhfa4
|
||||||
|
(p9) br.cond.dptk.few dhfa5
|
||||||
|
(p10) br.cond.dptk.few dhfa6
|
||||||
|
(p11) br.cond.dptk.few dhfa7
|
||||||
|
dhfa8: add loc3=7*8,raddr
|
||||||
|
;;
|
||||||
|
stfd [loc3]=f15
|
||||||
|
dhfa7: add loc3=6*8,raddr
|
||||||
|
;;
|
||||||
|
stfd [loc3]=f14
|
||||||
|
dhfa6: add loc3=5*8,raddr
|
||||||
|
;;
|
||||||
|
stfd [loc3]=f13
|
||||||
|
dhfa5: add loc3=4*8,raddr
|
||||||
|
;;
|
||||||
|
stfd [loc3]=f12
|
||||||
|
dhfa4: add loc3=3*8,raddr
|
||||||
|
;;
|
||||||
|
stfd [loc3]=f11
|
||||||
|
dhfa3: add loc3=2*8,raddr
|
||||||
|
;;
|
||||||
|
stfd [loc3]=f10
|
||||||
|
dhfa2: add loc3=1*8,raddr
|
||||||
|
;;
|
||||||
|
stfd [loc3]=f9
|
||||||
|
stfd [raddr]=f8
|
||||||
|
br done
|
||||||
|
|
||||||
|
handle_float_hfa:
|
||||||
|
/* Homogeneous floating point array of floats is returned in */
|
||||||
|
/* registers f8-f15. Save one at a time to return area. */
|
||||||
|
and flags=0xf,flags /* Retrieve size */
|
||||||
|
;;
|
||||||
|
cmp.eq p6,p0=2,flags
|
||||||
|
cmp.eq p7,p0=3,flags
|
||||||
|
cmp.eq p8,p0=4,flags
|
||||||
|
cmp.eq p9,p0=5,flags
|
||||||
|
cmp.eq p10,p0=6,flags
|
||||||
|
cmp.eq p11,p0=7,flags
|
||||||
|
cmp.eq p12,p0=8,flags
|
||||||
|
;;
|
||||||
|
(p6) br.cond.dptk.few shfa2
|
||||||
|
(p7) br.cond.dptk.few shfa3
|
||||||
|
(p8) br.cond.dptk.few shfa4
|
||||||
|
(p9) br.cond.dptk.few shfa5
|
||||||
|
(p10) br.cond.dptk.few shfa6
|
||||||
|
(p11) br.cond.dptk.few shfa7
|
||||||
|
shfa8: add loc3=7*4,raddr
|
||||||
|
;;
|
||||||
|
stfd [loc3]=f15
|
||||||
|
shfa7: add loc3=6*4,raddr
|
||||||
|
;;
|
||||||
|
stfd [loc3]=f14
|
||||||
|
shfa6: add loc3=5*4,raddr
|
||||||
|
;;
|
||||||
|
stfd [loc3]=f13
|
||||||
|
shfa5: add loc3=4*4,raddr
|
||||||
|
;;
|
||||||
|
stfd [loc3]=f12
|
||||||
|
shfa4: add loc3=3*4,raddr
|
||||||
|
;;
|
||||||
|
stfd [loc3]=f11
|
||||||
|
shfa3: add loc3=2*4,raddr
|
||||||
|
;;
|
||||||
|
stfd [loc3]=f10
|
||||||
|
shfa2: add loc3=1*4,raddr
|
||||||
|
;;
|
||||||
|
stfd [loc3]=f9
|
||||||
|
stfd [raddr]=f8
|
||||||
|
br done
|
||||||
|
|
||||||
|
.endp ffi_call_unix
|
||||||
|
|
||||||
|
|
||||||
|
.text
|
||||||
|
.align 16
|
||||||
|
.global ffi_closure_UNIX
|
||||||
|
.proc ffi_closure_UNIX
|
||||||
|
ffi_closure_UNIX:
|
||||||
|
alloc loc0=ar.pfs,8,2,2,0
|
||||||
|
mov loc1=b0
|
||||||
|
/* Retrieve closure pointer and real gp. */
|
||||||
|
mov out0=gp
|
||||||
|
add gp=16,gp
|
||||||
|
;;
|
||||||
|
ld8 gp=[gp]
|
||||||
|
/* Reserve a structia64_args on the stack such that arguments */
|
||||||
|
/* past the first 8 are automatically placed in the right */
|
||||||
|
/* slot. Note that when we start the sp points at 2 8-byte */
|
||||||
|
/* scratch words, followed by the extra arguments. */
|
||||||
|
# define BASIC_ARGS_SZ (8*FLOAT_SZ+8*8+2*8)
|
||||||
|
# define FIRST_FP_OFFSET (4*8)
|
||||||
|
add r14=-(BASIC_ARGS_SZ-FIRST_FP_OFFSET),sp
|
||||||
|
add r15=-(BASIC_ARGS_SZ-FIRST_FP_OFFSET-FLOAT_SZ),sp
|
||||||
|
add sp=-BASIC_ARGS_SZ,sp
|
||||||
|
/* r14 points to fp_regs[0], r15 points to fp_regs[1] */
|
||||||
|
;;
|
||||||
|
stfd [r14]=f8,2*FLOAT_SZ
|
||||||
|
stfd [r15]=f9,2*FLOAT_SZ
|
||||||
|
;;
|
||||||
|
stfd [r14]=f10,2*FLOAT_SZ
|
||||||
|
stfd [r15]=f11,2*FLOAT_SZ
|
||||||
|
;;
|
||||||
|
stfd [r14]=f12,2*FLOAT_SZ
|
||||||
|
stfd [r15]=f13,2*FLOAT_SZ
|
||||||
|
;;
|
||||||
|
stfd [r14]=f14,FLOAT_SZ+8
|
||||||
|
stfd [r15]=f15,2*8
|
||||||
|
;;
|
||||||
|
/* r14 points to first parameter register area, r15 to second. */
|
||||||
|
st8 [r14]=in0,2*8
|
||||||
|
st8 [r15]=in1,2*8
|
||||||
|
;;
|
||||||
|
st8 [r14]=in2,2*8
|
||||||
|
st8 [r15]=in3,2*8
|
||||||
|
;;
|
||||||
|
st8 [r14]=in4,2*8
|
||||||
|
st8 [r15]=in5,2*8
|
||||||
|
;;
|
||||||
|
st8 [r14]=in6,2*8
|
||||||
|
st8 [r15]=in7,2*8
|
||||||
|
/* Call ffi_closure_UNIX_inner */
|
||||||
|
mov out1=sp
|
||||||
|
br.call.sptk.many b0=ffi_closure_UNIX_inner
|
||||||
|
;;
|
||||||
|
mov b0=loc1
|
||||||
|
mov ar.pfs=loc0
|
||||||
|
br.ret.sptk.many b0
|
||||||
|
.endp ffi_closure_UNIX
|
||||||
|
|
||||||
|
|
||||||
271
libffi/src/java_raw_api.c
Normal file
271
libffi/src/java_raw_api.c
Normal file
@@ -0,0 +1,271 @@
|
|||||||
|
/* -----------------------------------------------------------------------
|
||||||
|
java_raw_api.c - Copyright (c) 1999 Cygnus Solutions
|
||||||
|
|
||||||
|
Cloned from raw_api.c
|
||||||
|
|
||||||
|
Raw_api.c author: Kresten Krab Thorup <krab@gnu.org>
|
||||||
|
Java_raw_api.c author: Hans-J. Boehm <hboehm@hpl.hp.com>
|
||||||
|
|
||||||
|
$Id $
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
a copy of this software and associated documentation files (the
|
||||||
|
``Software''), to deal in the Software without restriction, including
|
||||||
|
without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included
|
||||||
|
in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||||
|
IN NO EVENT SHALL CYGNUS SOLUTIONS BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
||||||
|
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||||
|
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||||
|
OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
----------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
/* This defines a Java- and 64-bit specific variant of the raw API. */
|
||||||
|
/* It assumes that "raw" argument blocks look like Java stacks on a */
|
||||||
|
/* 64-bit machine. Arguments that can be stored in a single stack */
|
||||||
|
/* stack slots (longs, doubles) occupy 128 bits, but only the first */
|
||||||
|
/* 64 bits are actually used. */
|
||||||
|
|
||||||
|
#include <ffi.h>
|
||||||
|
#include <ffi_common.h>
|
||||||
|
|
||||||
|
#if !defined(NO_JAVA_RAW_API) && !defined(FFI_NO_RAW_API)
|
||||||
|
|
||||||
|
size_t
|
||||||
|
ffi_java_raw_size (ffi_cif *cif)
|
||||||
|
{
|
||||||
|
size_t result = 0;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
ffi_type **at = cif->arg_types;
|
||||||
|
|
||||||
|
for (i = cif->nargs-1; i >= 0; i--, at++)
|
||||||
|
{
|
||||||
|
switch((*at) -> type) {
|
||||||
|
case FFI_TYPE_UINT64:
|
||||||
|
case FFI_TYPE_SINT64:
|
||||||
|
result += 2 * SIZEOF_ARG;
|
||||||
|
break;
|
||||||
|
case FFI_TYPE_STRUCT:
|
||||||
|
/* No structure parameters in Java. */
|
||||||
|
abort();
|
||||||
|
default:
|
||||||
|
result += SIZEOF_ARG;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
ffi_java_raw_to_ptrarray (ffi_cif *cif, ffi_raw *raw, void **args)
|
||||||
|
{
|
||||||
|
unsigned i;
|
||||||
|
ffi_type **tp = cif->arg_types;
|
||||||
|
|
||||||
|
#if WORDS_BIGENDIAN
|
||||||
|
|
||||||
|
for (i = 0; i < cif->nargs; i++, tp++, args++)
|
||||||
|
{
|
||||||
|
switch ((*tp)->type)
|
||||||
|
{
|
||||||
|
case FFI_TYPE_UINT8:
|
||||||
|
case FFI_TYPE_SINT8:
|
||||||
|
*args = (void*) ((char*)(raw++) + SIZEOF_ARG - 1);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case FFI_TYPE_UINT16:
|
||||||
|
case FFI_TYPE_SINT16:
|
||||||
|
*args = (void*) ((char*)(raw++) + SIZEOF_ARG - 2);
|
||||||
|
break;
|
||||||
|
|
||||||
|
#if SIZEOF_ARG >= 4
|
||||||
|
case FFI_TYPE_UINT32:
|
||||||
|
case FFI_TYPE_SINT32:
|
||||||
|
*args = (void*) ((char*)(raw++) + SIZEOF_ARG - 4);
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if SIZEOF_ARG == 8
|
||||||
|
case FFI_TYPE_UINT64:
|
||||||
|
case FFI_TYPE_SINT64:
|
||||||
|
case FFI_TYPE_DOUBLE:
|
||||||
|
*args = (void *)raw;
|
||||||
|
raw += 2;
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
case FFI_TYPE_POINTER:
|
||||||
|
*args = (void*) &(raw++)->ptr;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
*args = raw;
|
||||||
|
raw += ALIGN ((*tp)->size, SIZEOF_ARG) / SIZEOF_ARG;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#else /* WORDS_BIGENDIAN */
|
||||||
|
|
||||||
|
#if !PDP
|
||||||
|
|
||||||
|
/* then assume little endian */
|
||||||
|
for (i = 0; i < cif->nargs; i++, tp++, args++)
|
||||||
|
{
|
||||||
|
#if SIZEOF_ARG == 8
|
||||||
|
switch((*tp)->type) {
|
||||||
|
case FFI_TYPE_UINT64:
|
||||||
|
case FFI_TYPE_SINT64:
|
||||||
|
case FFI_TYPE_DOUBLE:
|
||||||
|
*args = (void*) raw;
|
||||||
|
raw += 2;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
*args = (void*) raw++;
|
||||||
|
}
|
||||||
|
#else /* SIZEOF_ARG != 8 */
|
||||||
|
*args = (void*) raw;
|
||||||
|
raw += ALIGN ((*tp)->size, sizeof (void*)) / sizeof (void*);
|
||||||
|
#endif /* SIZEOF_ARG == 8 */
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
#error "pdp endian not supported"
|
||||||
|
#endif /* ! PDP */
|
||||||
|
|
||||||
|
#endif /* WORDS_BIGENDIAN */
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
ffi_java_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_raw *raw)
|
||||||
|
{
|
||||||
|
unsigned i;
|
||||||
|
ffi_type **tp = cif->arg_types;
|
||||||
|
|
||||||
|
for (i = 0; i < cif->nargs; i++, tp++, args++)
|
||||||
|
{
|
||||||
|
switch ((*tp)->type)
|
||||||
|
{
|
||||||
|
case FFI_TYPE_UINT8:
|
||||||
|
(raw++)->uint = *(UINT8*) (*args);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case FFI_TYPE_SINT8:
|
||||||
|
(raw++)->sint = *(SINT8*) (*args);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case FFI_TYPE_UINT16:
|
||||||
|
(raw++)->uint = *(UINT16*) (*args);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case FFI_TYPE_SINT16:
|
||||||
|
(raw++)->sint = *(SINT16*) (*args);
|
||||||
|
break;
|
||||||
|
|
||||||
|
#if SIZEOF_ARG >= 4
|
||||||
|
case FFI_TYPE_UINT32:
|
||||||
|
(raw++)->uint = *(UINT32*) (*args);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case FFI_TYPE_SINT32:
|
||||||
|
(raw++)->sint = *(SINT32*) (*args);
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
case FFI_TYPE_FLOAT:
|
||||||
|
(raw++)->flt = *(FLOAT32*) (*args);
|
||||||
|
break;
|
||||||
|
|
||||||
|
#if SIZEOF_ARG == 8
|
||||||
|
case FFI_TYPE_UINT64:
|
||||||
|
case FFI_TYPE_SINT64:
|
||||||
|
case FFI_TYPE_DOUBLE:
|
||||||
|
raw->uint = *(UINT64*) (*args);
|
||||||
|
raw += 2;
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
case FFI_TYPE_POINTER:
|
||||||
|
(raw++)->ptr = **(void***) args;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
#if SIZEOF_ARG == 8
|
||||||
|
FFI_ASSERT(FALSE); /* Should have covered all cases */
|
||||||
|
#else
|
||||||
|
memcpy ((void*) raw->data, (void*)*args, (*tp)->size);
|
||||||
|
raw += ALIGN ((*tp)->size, SIZEOF_ARG) / SIZEOF_ARG;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#if !FFI_NATIVE_RAW_API
|
||||||
|
|
||||||
|
|
||||||
|
/* This is a generic definition of ffi_raw_call, to be used if the
|
||||||
|
* native system does not provide a machine-specific implementation.
|
||||||
|
* Having this, allows code to be written for the raw API, without
|
||||||
|
* the need for system-specific code to handle input in that format;
|
||||||
|
* these following couple of functions will handle the translation forth
|
||||||
|
* and back automatically. */
|
||||||
|
|
||||||
|
void ffi_java_raw_call (/*@dependent@*/ ffi_cif *cif,
|
||||||
|
void (*fn)(),
|
||||||
|
/*@out@*/ void *rvalue,
|
||||||
|
/*@dependent@*/ ffi_raw *raw)
|
||||||
|
{
|
||||||
|
void **avalue = (void**) alloca (cif->nargs * sizeof (void*));
|
||||||
|
ffi_java_raw_to_ptrarray (cif, raw, avalue);
|
||||||
|
ffi_call (cif, fn, rvalue, avalue);
|
||||||
|
}
|
||||||
|
|
||||||
|
#if FFI_CLOSURES /* base system provides closures */
|
||||||
|
|
||||||
|
static void
|
||||||
|
ffi_java_translate_args (ffi_cif *cif, void *rvalue,
|
||||||
|
void **avalue, void *user_data)
|
||||||
|
{
|
||||||
|
ffi_raw *raw = (ffi_raw*)alloca (ffi_java_raw_size (cif));
|
||||||
|
ffi_raw_closure *cl = (ffi_raw_closure*)user_data;
|
||||||
|
|
||||||
|
ffi_java_ptrarray_to_raw (cif, avalue, raw);
|
||||||
|
(*cl->fun) (cif, rvalue, raw, cl->user_data);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Again, here is the generic version of ffi_prep_raw_closure, which
|
||||||
|
* will install an intermediate "hub" for translation of arguments from
|
||||||
|
* the pointer-array format, to the raw format */
|
||||||
|
|
||||||
|
ffi_status
|
||||||
|
ffi_prep_java_raw_closure (ffi_raw_closure* cl,
|
||||||
|
ffi_cif *cif,
|
||||||
|
void (*fun)(ffi_cif*,void*,ffi_raw*,void*),
|
||||||
|
void *user_data)
|
||||||
|
{
|
||||||
|
ffi_status status;
|
||||||
|
|
||||||
|
status = ffi_prep_closure ((ffi_closure*) cl,
|
||||||
|
cif,
|
||||||
|
&ffi_java_translate_args,
|
||||||
|
(void*)cl);
|
||||||
|
if (status == FFI_OK)
|
||||||
|
{
|
||||||
|
cl->fun = fun;
|
||||||
|
cl->user_data = user_data;
|
||||||
|
}
|
||||||
|
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* FFI_CLOSURES */
|
||||||
|
#endif /* !FFI_NATIVE_RAW_API */
|
||||||
|
#endif /* !FFI_NO_RAW_API */
|
||||||
127
libffi/src/sparc/v9.S
Normal file
127
libffi/src/sparc/v9.S
Normal file
@@ -0,0 +1,127 @@
|
|||||||
|
/* -----------------------------------------------------------------------
|
||||||
|
v9.S - Copyright (c) 2000 Cygnus Solutions
|
||||||
|
|
||||||
|
Sparc 64bit Foreign Function Interface
|
||||||
|
|
||||||
|
$Id: v9.S,v 1.1 2000/04/17 03:18:46 green Exp $
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
a copy of this software and associated documentation files (the
|
||||||
|
``Software''), to deal in the Software without restriction, including
|
||||||
|
without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included
|
||||||
|
in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||||
|
IN NO EVENT SHALL CYGNUS SOLUTIONS BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
||||||
|
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||||
|
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||||
|
OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
----------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
#define LIBFFI_ASM
|
||||||
|
#include <ffi.h>
|
||||||
|
|
||||||
|
#ifdef SPARC64
|
||||||
|
/* Only compile this in for 64bit builds, because otherwise the object file
|
||||||
|
will have inproper architecture due to used instructions. */
|
||||||
|
|
||||||
|
#define STACKFRAME 128 /* Minimum stack framesize for SPARC */
|
||||||
|
#define STACK_BIAS 2047
|
||||||
|
#define ARGS (128) /* Offset of register area in frame */
|
||||||
|
|
||||||
|
.text
|
||||||
|
.align 8
|
||||||
|
.globl ffi_call_V9
|
||||||
|
.globl _ffi_call_V9
|
||||||
|
|
||||||
|
ffi_call_V9:
|
||||||
|
_ffi_call_V9:
|
||||||
|
save %sp, -STACKFRAME, %sp
|
||||||
|
|
||||||
|
sub %sp, %i2, %sp ! alloca() space in stack for frame to set up
|
||||||
|
add %sp, STACKFRAME+STACK_BIAS, %l0 ! %l0 has start of
|
||||||
|
! frame to set up
|
||||||
|
|
||||||
|
mov %l0, %o0 ! call routine to set up frame
|
||||||
|
call %i0
|
||||||
|
mov %i1, %o1 ! (delay)
|
||||||
|
brz,pt %o0, 1f
|
||||||
|
ldx [%l0+ARGS], %o0 ! call foreign function
|
||||||
|
|
||||||
|
ldd [%l0+ARGS], %f0
|
||||||
|
ldd [%l0+ARGS+8], %f2
|
||||||
|
ldd [%l0+ARGS+16], %f4
|
||||||
|
ldd [%l0+ARGS+24], %f6
|
||||||
|
ldd [%l0+ARGS+32], %f8
|
||||||
|
ldd [%l0+ARGS+40], %f10
|
||||||
|
ldd [%l0+ARGS+48], %f12
|
||||||
|
ldd [%l0+ARGS+56], %f14
|
||||||
|
ldd [%l0+ARGS+64], %f16
|
||||||
|
ldd [%l0+ARGS+72], %f18
|
||||||
|
ldd [%l0+ARGS+80], %f20
|
||||||
|
ldd [%l0+ARGS+88], %f22
|
||||||
|
ldd [%l0+ARGS+96], %f24
|
||||||
|
ldd [%l0+ARGS+104], %f26
|
||||||
|
ldd [%l0+ARGS+112], %f28
|
||||||
|
ldd [%l0+ARGS+120], %f30
|
||||||
|
|
||||||
|
1: ldx [%l0+ARGS+8], %o1
|
||||||
|
ldx [%l0+ARGS+16], %o2
|
||||||
|
ldx [%l0+ARGS+24], %o3
|
||||||
|
ldx [%l0+ARGS+32], %o4
|
||||||
|
ldx [%l0+ARGS+40], %o5
|
||||||
|
call %i5
|
||||||
|
sub %l0, STACK_BIAS, %sp ! (delay) switch to frame
|
||||||
|
|
||||||
|
! If the return value pointer is NULL, assume no return value.
|
||||||
|
brz,pn %i4, done
|
||||||
|
nop
|
||||||
|
|
||||||
|
cmp %i3, FFI_TYPE_INT
|
||||||
|
be,a,pt %icc, done
|
||||||
|
stx %o0, [%i4] ! (delay)
|
||||||
|
|
||||||
|
cmp %i3, FFI_TYPE_FLOAT
|
||||||
|
be,a,pn %icc, done
|
||||||
|
st %f0, [%i4+0] ! (delay)
|
||||||
|
|
||||||
|
cmp %i3, FFI_TYPE_DOUBLE
|
||||||
|
be,a,pn %icc, done
|
||||||
|
std %f0, [%i4+0] ! (delay)
|
||||||
|
|
||||||
|
cmp %i3, FFI_TYPE_STRUCT
|
||||||
|
be,pn %icc, dostruct
|
||||||
|
|
||||||
|
cmp %i3, FFI_TYPE_LONGDOUBLE
|
||||||
|
bne,pt %icc, done
|
||||||
|
nop
|
||||||
|
std %f0, [%i4+0]
|
||||||
|
std %f2, [%i4+8]
|
||||||
|
|
||||||
|
done: ret
|
||||||
|
restore
|
||||||
|
|
||||||
|
dostruct:
|
||||||
|
/* This will not work correctly for unions. */
|
||||||
|
stx %o0, [%i4+0]
|
||||||
|
stx %o1, [%i4+8]
|
||||||
|
stx %o2, [%i4+16]
|
||||||
|
stx %o3, [%i4+24]
|
||||||
|
std %f0, [%i4+32]
|
||||||
|
std %f2, [%i4+40]
|
||||||
|
std %f4, [%i4+48]
|
||||||
|
std %f6, [%i4+56]
|
||||||
|
ret
|
||||||
|
restore
|
||||||
|
|
||||||
|
.ffi_call_V9_end:
|
||||||
|
.size ffi_call_V9,.ffi_call_V9_end-ffi_call_V9
|
||||||
|
|
||||||
|
#endif
|
||||||
Reference in New Issue
Block a user