Commit cfb446ed authored by dill Upstream's avatar dill Upstream Committed by Eisenhauer, Greg
Browse files

dill 2018-07-02 (7e576d14)

Code extracted from:

    https://github.com/GTkorvo/dill.git

at commit 7e576d14ccd2cbf4d3dfee306469cf8bb60cc1d3 (master).

Upstream Shortlog
-----------------

Greg Eisenhauer (1):
      7e576d14 Add -DDILL_IGNORE_NATIVE flag to force emulation rather than DCG
parent 3e5e8466
Loading
Loading
Loading
Loading
+20 −2
Original line number Diff line number Diff line
@@ -68,6 +68,7 @@ ENDIF("${isSystemDir}" STREQUAL "-1")
set (CMAKE_MACOSX_RPATH 1)

include(CMakeDependentOption)
include(ExternalProject)

# Setup shared library defaults.  If explicitly specified somehow, then default 
# to that.  Otherwise base the default on whether or not shared libs are even
@@ -182,10 +183,27 @@ if (CMAKE_SYSTEM_PROCESSOR MATCHES "^arm" AND CMAKE_SYSTEM_NAME STREQUAL "Linux"
endif (CMAKE_SYSTEM_PROCESSOR MATCHES "^arm" AND CMAKE_SYSTEM_NAME STREQUAL "Linux")
set(ARM_HARD_FLOAT ${HARDFP_AVAILABLE})

option(DILL_IGNORE_NATIVE  "Build to do emulation, regardless of architecture" OFF)
if (DILL_IGNORE_NATIVE)
    set (NATIVE_CG false)
    set (NATIVE_ARCH UNSUPPORTED)
endif()
find_package (LibFFI PATHS ${CMAKE_INSTALL_PREFIX} QUIET)
IF (LIBFFI_FOUND) 
  set (EMULATION_POSSIBLE true)
ENDIF (LIBFFI_FOUND) 
ELSEIF (DILL_IGNORE_NATIVE)
  ExternalProject_Add(LibFFI
    PREFIX ${PROJECT_BINARY_DIR}/libffi
    GIT_REPOSITORY https://github.com/libffi/libffi.git
    CONFIGURE_COMMAND pwd COMMAND ./autogen.sh COMMAND ./configure --prefix=<INSTALL_DIR>
    )
  set (EMULATION_POSSIBLE true)
  ExternalProject_Get_property(LibFFI install_dir)
  set (LIBFFI_INCLUDE_DIR ${install_dir}/include)
  link_directories(${install_dir}/lib)
  set (LIBFFI_LIBRARY -lffi)
ENDIF()

option(DILL_ENABLE_DISASSEMBLY
  "enable binutils-based disassembly (default is OFF)" OFF)

@@ -236,7 +254,7 @@ if(DILL_MULTI_TARGET OR NATIVE_CG OR EMULATION_POSSIBLE)
else ()
    message ( FATAL_ERROR "Configure has detected no native dynamic code generation support 
    for this architecture (\"$NATIVE_ARCH\"), -DDILL_MULTI_TARGET=ON 
	was not specified, and no emulation is possible (avcall library 
	was not specified, and no emulation is possible (libffi library 
	not found)
		       NO LIBRARY WILL BE BUILT")
endif()
+3 −0
Original line number Diff line number Diff line
@@ -149,6 +149,9 @@
/* Define if using ARMv7 hardware */
#cmakedefine ARMV7_AVAILABLE

/* Define if we shouldn't use native DCG */
#cmakedefine DILL_IGNORE_NATIVE

/* Define to `__inline__' or `__inline' if that's what the C compiler
   calls it, or to nothing if 'inline' is not supported under any name.  */
#ifndef __cplusplus
+11 −11
Original line number Diff line number Diff line
@@ -81,27 +81,27 @@ dill_package_stitch(char *pkg, dill_extern_entry* extra_externs)
    if (extra_externs) {
	dill_lookup_xfer_addrs(&t, (xfer_entry *)extra_externs);
    }
#if defined(HOST_X86)
#if defined(HOST_X86) && !defined(DILL_IGNORE_NATIVE)
    char *p = x86_package_stitch(code, &t, (dill_pkg) pkg);
#elif defined(HOST_SPARC)
#elif defined(HOST_SPARC) && !defined(DILL_IGNORE_NATIVE)
    char *p = sparc_package_stitch(code, &t, (dill_pkg) pkg);
#elif defined(HOST_SPARCV9)
#elif defined(HOST_SPARCV9) && !defined(DILL_IGNORE_NATIVE)
    char *p = sparc_package_stitch(code, &t, (dill_pkg) pkg);
#elif defined(HOST_X86_64)
#elif defined(HOST_X86_64) && !defined(DILL_IGNORE_NATIVE)
    char *p = x86_64_package_stitch(code, &t, (dill_pkg) pkg);
#elif defined(HOST_IA64)
#elif defined(HOST_IA64) && !defined(DILL_IGNORE_NATIVE)
    char *p = ia64_package_stitch(code, &t, (dill_pkg) pkg);
#elif defined(HOST_ARM5)
#elif defined(HOST_ARM5) && !defined(DILL_IGNORE_NATIVE)
    char *p = arm5_package_stitch(code, &t, (dill_pkg) pkg);
#elif defined(HOST_ARM6)
#elif defined(HOST_ARM6) && !defined(DILL_IGNORE_NATIVE)
    char *p = arm6_package_stitch(code, &t, (dill_pkg) pkg);
#elif defined(HOST_ARM7)
#elif defined(HOST_ARM7) && !defined(DILL_IGNORE_NATIVE)
    char *p = arm6_package_stitch(code, &t, (dill_pkg) pkg);
#elif defined(HOST_ARM8)
#elif defined(HOST_ARM8) && !defined(DILL_IGNORE_NATIVE)
    char *p = arm8_package_stitch(code, &t, (dill_pkg) pkg);
#elif defined(HOST_POWERPC)
#elif defined(HOST_POWERPC) && !defined(DILL_IGNORE_NATIVE)
    char *p = powerpc_package_stitch(code, &t, (dill_pkg) pkg);
#elif defined(HOST_PPC64LE)
#elif defined(HOST_PPC64LE) && !defined(DILL_IGNORE_NATIVE)
    char *p = ppc64le_package_stitch(code, &t, (dill_pkg) pkg);
#else
    char *p = NULL;
+10 −10
Original line number Diff line number Diff line
@@ -147,7 +147,7 @@ static void null_init(dill_stream s)
static int
set_mach_reset(dill_stream s, char *arch)
{
#if defined(MULTI_TARGET) || defined(HOST_SPARC) || defined(HOST_SPARCV9)
#if (defined(MULTI_TARGET) || defined(HOST_SPARC) || defined(HOST_SPARCV9)) && !defined(DILL_IGNORE_NATIVE)
    if (strcmp(arch, "sparc") == 0) {
	s->p->mach_reset = dill_sparc_init;
	return 1;
@@ -156,55 +156,55 @@ set_mach_reset(dill_stream s, char *arch)
	return 1;
    } else 
#endif
#if defined(MULTI_TARGET) || defined(HOST_X86)
#if (defined(MULTI_TARGET) || defined(HOST_X86))  && !defined(DILL_IGNORE_NATIVE)
    if (strcmp(arch, "x86") == 0) {
	s->p->mach_reset = dill_x86_init;
	return 1;
    } else 
#endif
#if defined(MULTI_TARGET) || defined(HOST_X86_64)
#if (defined(MULTI_TARGET) || defined(HOST_X86_64)) && !defined(DILL_IGNORE_NATIVE)
    if (strcmp(arch, "x86_64") == 0) {
	s->p->mach_reset = dill_x86_64_init;
	return 1;
    } else 
#endif
#if defined(MULTI_TARGET) || defined(HOST_IA64)
#if (defined(MULTI_TARGET) || defined(HOST_IA64)) && !defined(DILL_IGNORE_NATIVE)
    if (strcmp(arch, "ia64") == 0) {
	s->p->mach_reset = dill_ia64_init;
	return 1;
    } else 
#endif
#if defined(MULTI_TARGET) || defined(HOST_ARM5)
#if (defined(MULTI_TARGET) || defined(HOST_ARM5)) && !defined(DILL_IGNORE_NATIVE)
    if (strcmp(arch, "arm5") == 0) {
	s->p->mach_reset = dill_arm5_init;
	return 1;
    }
#endif
#if defined(MULTI_TARGET) || defined(HOST_ARM6)|| defined(HOST_ARM7)
#if (defined(MULTI_TARGET) || defined(HOST_ARM6)|| defined(HOST_ARM7)) && !defined(DILL_IGNORE_NATIVE)
    if (strcmp(arch, "arm6") == 0) {
	s->p->mach_reset = dill_arm6_init;
	return 1;
    }
#endif
#if defined(MULTI_TARGET) || defined(HOST_ARM7)
#if (defined(MULTI_TARGET) || defined(HOST_ARM7)) && !defined(DILL_IGNORE_NATIVE)
    if (strcmp(arch, "arm7") == 0) {
	s->p->mach_reset = dill_arm6_init;
	return 1;
    }
#endif
#if defined(MULTI_TARGET) || defined(HOST_ARM8)
#if (defined(MULTI_TARGET) || defined(HOST_ARM8)) && !defined(DILL_IGNORE_NATIVE)
    if (strcmp(arch, "arm8") == 0) {
	s->p->mach_reset = dill_arm8_init;
	return 1;
    }
#endif
#if defined(MULTI_TARGET) || defined(HOST_PPC64LE)
#if (defined(MULTI_TARGET) || defined(HOST_PPC64LE)) && !defined(DILL_IGNORE_NATIVE)
    if (strcmp(arch, "ppc64le") == 0) {
	s->p->mach_reset = dill_ppc64le_init;
	return 1;
    }
#endif
#if defined(EMULATION_ONLY)
#if defined(EMULATION_ONLY) || defined(DILL_IGNORE_NATIVE)
    s->p->mach_reset = null_init;
    return 1;
#endif