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

dill 2018-05-05 (1087df20)

Code extracted from:

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

at commit 1087df2005d67c5d53a2091d99a12046aef33d14 (master).

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

Greg Eisenhauer (5):
      f94e2c33 Eliminate never-completed powerpc arch.  The ppc64le would serve as an example if needed
      442a4ff4 Switch to static allocation for the jump tables
      d01332ec don't die if malloc.h isn't around
      581109b7 Possible bug, static analysis
      54ed9bac Kick patch version

greg eisenhauer (1):
      1087df20 fix author
parent 7dd77318
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
cmake_minimum_required(VERSION 2.8.3)
if(POLICY CMP0048)
  cmake_policy(SET CMP0048 NEW)
  project(DILL VERSION 2.3.1 LANGUAGES C CXX)
  project(DILL VERSION 2.3.2 LANGUAGES C CXX)
else()
  project(DILL C CXX)
  set(DILL_MAJOR_VERSION 2)
  set(DILL_MINOR_VERSION 3)
  set(DILL_PATCH_VERSION 1)
  set(DILL_PATCH_VERSION 2)
  set(DILL_VERSION
    ${DILL_MAJOR_VERSION}.${DILL_MINOR_VERSION}.${DILL_PATCH_VERSION})
endif()
@@ -189,7 +189,7 @@ ENDIF (LIBFFI_FOUND)
option(DILL_ENABLE_DISASSEMBLY
  "enable binutils-based disassembly (default is OFF)" OFF)

set (ARCHITECTURES sparc powerpc ppc64le virtual x86 x86_64 ia64 arm5 arm6 arm8)
set (ARCHITECTURES sparc ppc64le virtual x86 x86_64 ia64 arm5 arm6 arm8)
foreach(_arch ${ARCHITECTURES})
  add_custom_command(
    OUTPUT "dill_${_arch}.c"
+5 −9
Original line number Diff line number Diff line
@@ -54,10 +54,10 @@ sub upperc {
&branch_insn( "eq ge gt le lt ne", "i u ul l p d f", "arm5_branch");
&branchi_insn( "eq ge gt le lt ne", "i u ul l p", "arm5_branchi");

print COUT "jmp_table ${mach}_jump_table;\n";
print COUT "DECLARE_JUMP_TABLE(${mach});\n";
print COUT "static void gen_arm5_jump_table()\n";
print COUT "{\n";
print COUT "\t  ${mach}_jump_table = alloc_dill_jump_table();\n";
print COUT "\t  FILL_JUMP_STRUCTURE($mach);\n";
print COUT $jmp_a3_assigns;
print COUT $jmp_a3i_assigns;
print COUT $jmp_a2_assigns;
@@ -103,9 +103,7 @@ print COUT "\t ${mach}_jump_table->target_byte_order = 2; /* Format_Integer_li
print COUT "\t  ${mach}_jump_table->target_float_format = 3;  /* Format_IEEE_754_mixedendian */ \n";
print COUT "}\n\n";
print COUT "extern void dill_arm5_init(dill_stream s)\n{\n";
print COUT "\tif(${mach}_jump_table == 0) {\n";
print COUT "\tgen_arm5_jump_table();\n";
print COUT "\t}\n";
print COUT "\ts->j = ${mach}_jump_table;\n";
print COUT "\ts->dill_local_pointer = _fp;\n";
print COUT "\ts->dill_param_reg_pointer = _fp;\n";
@@ -113,10 +111,8 @@ print COUT "\ts->p->mach_info = (void*)gen_arm5_mach_info(s,/*v9*/ 0);\n";
print COUT "\ts->p->machine_strr_tmp_reg = _v1;\n";
print COUT "\treturn;\n";
print COUT "}\n";
print COUT "extern void dill_armv9_init(dill_stream s)\n{\n";
print COUT "\tif(${mach}_jump_table == 0) {\n";
print COUT "extern void dill_armv5_init(dill_stream s)\n{\n";
print COUT "\tgen_arm5_jump_table();\n";
print COUT "\t}\n";
print COUT "\ts->j = ${mach}_jump_table;\n";
print COUT "\ts->dill_local_pointer = _fp;\n";
print COUT "\ts->dill_param_reg_pointer = _fp;\n";
+5 −9
Original line number Diff line number Diff line
@@ -57,10 +57,10 @@ sub upperc {
&compare_insn( "eq ge gt le lt ne", "c uc s us i u ul l p d f", "arm6_compare");
&comparei_insn( "eq ge gt le lt ne", "c uc s us i u ul l p", "arm6_comparei");

print COUT "jmp_table ${mach}_jump_table;\n";
print COUT "DECLARE_JUMP_TABLE(${mach});\n";
print COUT "static void gen_arm6_jump_table()\n";
print COUT "{\n";
print COUT "\t  ${mach}_jump_table = alloc_dill_jump_table();\n";
print COUT "\t  FILL_JUMP_STRUCTURE($mach);\n";
print COUT $jmp_a3_assigns;
print COUT $jmp_a3i_assigns;
print COUT $jmp_a2_assigns;
@@ -110,9 +110,7 @@ print COUT "\t ${mach}_jump_table->target_byte_order = 2; /* Format_Integer_li
print COUT "\t  ${mach}_jump_table->target_float_format = 3;  /* Format_IEEE_754_mixedendian */ \n";
print COUT "}\n\n";
print COUT "extern void dill_arm6_init(dill_stream s)\n{\n";
print COUT "\tif(${mach}_jump_table == 0) {\n";
print COUT "\tgen_arm6_jump_table();\n";
print COUT "\t}\n";
print COUT "\ts->j = ${mach}_jump_table;\n";
print COUT "\ts->dill_local_pointer = _fp;\n";
print COUT "\ts->dill_param_reg_pointer = _fp;\n";
@@ -120,10 +118,8 @@ print COUT "\ts->p->mach_info = (void*)gen_arm6_mach_info(s,/*v9*/ 0);\n";
print COUT "\ts->p->machine_strr_tmp_reg = _v1;\n";
print COUT "\treturn;\n";
print COUT "}\n";
print COUT "extern void dill_armv9_init(dill_stream s)\n{\n";
print COUT "\tif(${mach}_jump_table == 0) {\n";
print COUT "extern void dill_armv6_init(dill_stream s)\n{\n";
print COUT "\tgen_arm6_jump_table();\n";
print COUT "\t}\n";
print COUT "\ts->j = ${mach}_jump_table;\n";
print COUT "\ts->dill_local_pointer = _fp;\n";
print COUT "\ts->dill_param_reg_pointer = _fp;\n";
+5 −8
Original line number Diff line number Diff line
@@ -57,10 +57,11 @@ sub upperc {
&compare_insn( "eq ge gt le lt ne", "c uc s us i u ul l p d f", "arm8_compare");
&comparei_insn( "eq ge gt le lt ne", "c uc s us i u ul l p", "arm8_comparei");

print COUT "jmp_table ${mach}_jump_table;\n";

print COUT "DECLARE_JUMP_TABLE(${mach});\n";
print COUT "static void gen_arm8_jump_table()\n";
print COUT "{\n";
print COUT "\t  ${mach}_jump_table = alloc_dill_jump_table();\n";
print COUT "\t  FILL_JUMP_STRUCTURE($mach);\n";
print COUT $jmp_a3_assigns;
print COUT $jmp_a3i_assigns;
print COUT $jmp_a2_assigns;
@@ -110,9 +111,7 @@ print COUT "\t ${mach}_jump_table->target_byte_order = 2; /* Format_Integer_li
print COUT "\t  ${mach}_jump_table->target_float_format = 3;  /* Format_IEEE_754_mixedendian */ \n";
print COUT "}\n\n";
print COUT "extern void dill_arm8_init(dill_stream s)\n{\n";
print COUT "\tif(${mach}_jump_table == 0) {\n";
print COUT "\tgen_arm8_jump_table();\n";
print COUT "\t}\n";
print COUT "\ts->j = ${mach}_jump_table;\n";
print COUT "\ts->dill_local_pointer = _fp;\n";
print COUT "\ts->dill_param_reg_pointer = _fp;\n";
@@ -121,9 +120,7 @@ print COUT "\ts->p->machine_strr_tmp_reg = _v1;\n";
print COUT "\treturn;\n";
print COUT "}\n";
print COUT "extern void dill_armv9_init(dill_stream s)\n{\n";
print COUT "\tif(${mach}_jump_table == 0) {\n";
print COUT "\tgen_arm8_jump_table();\n";
print COUT "\t}\n";
print COUT "\ts->j = ${mach}_jump_table;\n";
print COUT "\ts->dill_local_pointer = _fp;\n";
print COUT "\ts->dill_param_reg_pointer = _fp;\n";
+30 −0
Original line number Diff line number Diff line
@@ -275,3 +275,33 @@ struct dill_exec_s {
    void*closure;
};

#define DECLARE_JUMP_TABLE(NAME) \
struct jmp_table_s NAME ## _table_s;\
arith_op3 NAME ## _a3[dill_jmp_a3_size+1];\
jmp_data NAME ## _a3_data[dill_jmp_a3_size+1];\
arith_op3i NAME ## _a3i[dill_jmp_a3_size+1];\
jmp_data NAME ## _a3i_data[dill_jmp_a3_size+1];\
arith_op2 NAME ## _a2[dill_jmp_a2_size+1];\
jmp_data NAME ## _a2_data[dill_jmp_a2_size+1];\
branch_op NAME ## _b[dill_jmp_branch_size+1];\
branch_opi NAME ## _bi[dill_jmp_branch_size+1];\
jmp_data NAME ## _b_data[dill_jmp_branch_size+1];\
compare_op NAME ## _c[dill_jmp_compare_size+1];\
compare_opi NAME ## _ci[dill_jmp_compare_size+1];\
jmp_data NAME ## _c_data[dill_jmp_compare_size+1];\
\
jmp_table NAME ## _jump_table = & NAME ## _table_s;

#define FILL_JUMP_STRUCTURE(NAME)\
    NAME ## _jump_table->jmp_a3 = &NAME ## _a3[0];\
    NAME ## _jump_table->a3_data = &NAME ## _a3_data[0];\
    NAME ## _jump_table->jmp_a3i = &NAME ## _a3i[0];\
    NAME ## _jump_table->a3i_data = &NAME ## _a3i_data[0];\
    NAME ## _jump_table->jmp_a2 = &NAME ## _a2[0];\
    NAME ## _jump_table->a2_data = &NAME ## _a2_data[0];\
    NAME ## _jump_table->jmp_b = &NAME ## _b[0];\
    NAME ## _jump_table->jmp_bi = &NAME ## _bi[0];\
    NAME ## _jump_table->b_data = &NAME ## _b_data[0];\
    NAME ## _jump_table->jmp_c = &NAME ## _c[0];\
    NAME ## _jump_table->jmp_ci = &NAME ## _ci[0];\
    NAME ## _jump_table->c_data = &NAME ## _c_data[0];
Loading