From 6b2d2a2e030574e58df9f1d5ba6e09e7fdf7685b Mon Sep 17 00:00:00 2001
From: jdh8d <jdh8d@git.zephyr-software.com>
Date: Fri, 12 May 2017 17:04:06 +0000
Subject: [PATCH] Updates for VGT

Former-commit-id: 30aa1548b584864dfcf1f65b7d2c3b41b1b408ca
---
 .gitattributes                                |   1 +
 tools/cfar.sh                                 |   2 +-
 ...obNos_probBilr_probP1_probHeaprand_zipr.sh |   5 +-
 ...tNoc_structP1Canaries_probHeaprand_zipr.sh |   4 +-
 .../cfar_configs/cfar_probNog_phase1_zipr.sh  |   2 +-
 ...obNos_probBilr_probP1_probHeaprand_zipr.sh |   2 +-
 .../cfar_probNog_probSS_phase1_zipr.sh        |   2 +-
 .../cfar_probNog_probSS_probDS_phase1_zipr.sh |   2 +-
 tools/cfar_configs/cfar_scfi_zipr.sh          |   2 +-
 .../cfar_structNogOF_phase1_zipr.sh           |   2 +-
 .../cfar_structNogOF_structSS_phase1_zipr.sh  |   2 +-
 ...structNogOF_structSS_probDS_phase1_zipr.sh |   2 +-
 .../cfar_structNog_phase1_zipr.sh             |   2 +-
 ...h_structNos_structNoc_probHeaprand_zipr.sh |   2 +-
 ...tNoc_structP1Canaries_probHeaprand_zipr.sh |   2 +-
 tools/generate_mvee_package.sh                |   5 +-
 tools/vgt.sh                                  | 491 ++++++++++++++++++
 17 files changed, 512 insertions(+), 18 deletions(-)
 create mode 100755 tools/vgt.sh

diff --git a/.gitattributes b/.gitattributes
index ebd379523..6cf0b633e 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -3894,6 +3894,7 @@ tools/signatures/sqlite.sigs -text
 tools/test_controller.sh -text
 tools/update_env_var.sh -text
 tools/validate.sh -text
+tools/vgt.sh -text
 tools/zanalyze.sh -text
 tools/zipr_ce.sh -text
 web_server/.lighttpdpassword -text
diff --git a/tools/cfar.sh b/tools/cfar.sh
index dd56ac562..a7e9fb288 100755
--- a/tools/cfar.sh
+++ b/tools/cfar.sh
@@ -1,4 +1,4 @@
-#!/bin/bash -x
+#!/bin/bash
 
 source $(dirname $0)/ps_wrapper.source $0
 
diff --git a/tools/cfar_configs/cfar_partProbNog_probNol_probNoh_probNos_probBilr_probP1_probHeaprand_zipr.sh b/tools/cfar_configs/cfar_partProbNog_probNol_probNoh_probNos_probBilr_probP1_probHeaprand_zipr.sh
index f67024ba7..c62b75136 100755
--- a/tools/cfar_configs/cfar_partProbNog_probNol_probNoh_probNos_probBilr_probP1_probHeaprand_zipr.sh
+++ b/tools/cfar_configs/cfar_partProbNog_probNol_probNoh_probNos_probBilr_probP1_probHeaprand_zipr.sh
@@ -3,9 +3,10 @@
 source $(dirname $0)/../ps_wrapper.source $0
 
 
+
 file $2|grep "ELF 64-bit LSB  executable" > /dev/null
 if [ $? = 0 ]; then
-	$PEASOUP_HOME/tools/cfar.sh "$@" --backend zipr --step p1transform=on --step non_overlapping_stack=on --config_name $(basename $0 .sh|sed "s/cfar_//") --step move_globals=on --step set_interpreter=on --step-option set_interpreter:"--interp /target_apps/ld-nol.so" --step-option zipr:"--large_only:nog_on true" --step diehard=on --step noh=on --step nol=on
+	$PEASOUP_HOME/tools/cfar.sh "$@" --backend zipr --step p1transform=on --step non_overlapping_stack=on --config_name $(basename $0 .sh|sed "s/cfar_//") --step move_globals=on --step set_interpreter=on --step-option set_interpreter:"--interp /target_apps/ld-nol.so" --step-option zipr:"--large_only:nog_on true" --step diehard=on --step noh=on --step nol=on --step-option move_globals:-d --step-option move_globals:.interp
 else
-	$PEASOUP_HOME/tools/cfar.sh "$@" --backend zipr --step p1transform=on --step non_overlapping_stack=on --config_name $(basename $0 .sh|sed "s/cfar_//") --step diehard=on --step noh=on --step nol=on
+	$PEASOUP_HOME/tools/cfar.sh "$@" --backend zipr --step p1transform=on --step non_overlapping_stack=on --config_name $(basename $0 .sh|sed "s/cfar_//") --step diehard=on --step noh=on --step nol=on --step-option move_globals:-d --step-option move_globals:.interp
 fi
diff --git a/tools/cfar_configs/cfar_partStructNog_structNol_structNoh_structNos_structNoc_structP1Canaries_probHeaprand_zipr.sh b/tools/cfar_configs/cfar_partStructNog_structNol_structNoh_structNos_structNoc_structP1Canaries_probHeaprand_zipr.sh
index beb2d3648..f63490618 100755
--- a/tools/cfar_configs/cfar_partStructNog_structNol_structNoh_structNos_structNoc_structP1Canaries_probHeaprand_zipr.sh
+++ b/tools/cfar_configs/cfar_partStructNog_structNol_structNoh_structNos_structNoc_structP1Canaries_probHeaprand_zipr.sh
@@ -4,7 +4,7 @@ source $(dirname $0)/../ps_wrapper.source $0
 
 file $2|grep "ELF 64-bit LSB  executable" > /dev/null
 if [ $? = 0 ]; then
-	$PEASOUP_HOME/tools/cfar.sh "$@" --backend zipr --step-option zipr:"--zipr:seed $$" --structured_noc --structured_nos --step-option zipr:"--large_only:on true" --structured_p1_canaries  --step p1transform=on --step non_overlapping_stack=on --config_name $(basename $0 .sh|sed "s/cfar_//") --step move_globals=on --step set_interpreter=on --step-option set_interpreter:"--interp /target_apps/ld-nol.so" --structured_nog --step-option zipr:"--large_only:nog_on true" --step diehard=on --step noh=on --step nol=on
+	$PEASOUP_HOME/tools/cfar.sh "$@" --backend zipr --step-option zipr:"--zipr:seed $$" --structured_noc --structured_nos --step-option zipr:"--large_only:on true" --structured_p1_canaries  --step p1transform=on --step non_overlapping_stack=on --config_name $(basename $0 .sh|sed "s/cfar_//") --step move_globals=on --step set_interpreter=on --step-option set_interpreter:"--interp /target_apps/ld-nol.so" --structured_nog --step-option zipr:"--large_only:nog_on true" --step diehard=on --step noh=on --step nol=on --step-option move_globals:-d --step-option move_globals:.interp
 else
-	$PEASOUP_HOME/tools/cfar.sh "$@" --backend zipr --step-option zipr:"--zipr:seed $$" --structured_noc --structured_nos --step-option zipr:"--large_only:on true" --structured_p1_canaries  --step p1transform=on --step non_overlapping_stack=on --config_name $(basename $0 .sh|sed "s/cfar_//") --step diehard=on --step noh=on --step nol=on
+	$PEASOUP_HOME/tools/cfar.sh "$@" --backend zipr --step-option zipr:"--zipr:seed $$" --structured_noc --structured_nos --step-option zipr:"--large_only:on true" --structured_p1_canaries  --step p1transform=on --step non_overlapping_stack=on --config_name $(basename $0 .sh|sed "s/cfar_//") --step diehard=on --step noh=on --step nol=on --step-option move_globals:-d --step-option move_globals:.interp
 fi
diff --git a/tools/cfar_configs/cfar_probNog_phase1_zipr.sh b/tools/cfar_configs/cfar_probNog_phase1_zipr.sh
index 8563eb45c..69fc2b9b8 100755
--- a/tools/cfar_configs/cfar_probNog_phase1_zipr.sh
+++ b/tools/cfar_configs/cfar_probNog_phase1_zipr.sh
@@ -2,5 +2,5 @@
 source $(dirname $0)/../ps_wrapper.source $0
 
 
-$PEASOUP_HOME/tools/cfar.sh "$@" --backend zipr --step diehard=on --step p1transform=on --step non_overlapping_stack=on --config_name $(basename $0 .sh|sed "s/cfar_//") --step move_globals=on --step set_interpreter=on --step-option set_interpreter:"--interp /target_apps/ld-nol.so" --step-option zipr:"--large_only:nog_on true" --step noh=on --step nol=on
+$PEASOUP_HOME/tools/cfar.sh "$@" --backend zipr --step diehard=on --step p1transform=on --step non_overlapping_stack=on --config_name $(basename $0 .sh|sed "s/cfar_//") --step move_globals=on --step set_interpreter=on --step-option set_interpreter:"--interp /target_apps/ld-nol.so" --step-option zipr:"--large_only:nog_on true" --step noh=on --step nol=on --step-option move_globals:-d --step-option move_globals:.interp
 
diff --git a/tools/cfar_configs/cfar_probNog_probNol_probNoh_probNos_probBilr_probP1_probHeaprand_zipr.sh b/tools/cfar_configs/cfar_probNog_probNol_probNoh_probNos_probBilr_probP1_probHeaprand_zipr.sh
index 3ab21ad92..d88cf783b 100755
--- a/tools/cfar_configs/cfar_probNog_probNol_probNoh_probNos_probBilr_probP1_probHeaprand_zipr.sh
+++ b/tools/cfar_configs/cfar_probNog_probNol_probNoh_probNos_probBilr_probP1_probHeaprand_zipr.sh
@@ -2,4 +2,4 @@
 source $(dirname $0)/../ps_wrapper.source $0
 
 
-$PEASOUP_HOME/tools/cfar.sh "$@" --backend zipr --step diehard=on --step p1transform=on --step non_overlapping_stack=on --config_name $(basename $0 .sh|sed "s/cfar_//") --step move_globals=on --step set_interpreter=on --step-option set_interpreter:"--interp /target_apps/ld-nol.so" --step-option zipr:"--large_only:nog_on true" --step noh=on --step nol=on
+$PEASOUP_HOME/tools/cfar.sh "$@" --backend zipr --step diehard=on --step p1transform=on --step non_overlapping_stack=on --config_name $(basename $0 .sh|sed "s/cfar_//") --step move_globals=on --step set_interpreter=on --step-option set_interpreter:"--interp /target_apps/ld-nol.so" --step-option zipr:"--large_only:nog_on true" --step noh=on --step nol=on --step-option move_globals:-d --step-option move_globals:.interp
diff --git a/tools/cfar_configs/cfar_probNog_probSS_phase1_zipr.sh b/tools/cfar_configs/cfar_probNog_probSS_phase1_zipr.sh
index 89616c28b..4a4cac3c6 100755
--- a/tools/cfar_configs/cfar_probNog_probSS_phase1_zipr.sh
+++ b/tools/cfar_configs/cfar_probNog_probSS_phase1_zipr.sh
@@ -1,4 +1,4 @@
 #!/bin/bash 
 
-$PEASOUP_HOME/tools/cfar.sh "$@" --backend zipr --step diehard=on --step p1transform=on --step non_overlapping_stack=on --config_name $(basename $0 .sh|sed "s/cfar_//") --step move_globals=on --step set_interpreter=on --step-option set_interpreter:"--interp /target_apps/ld-nol.so" --step-option zipr:"--large_only:nog_on true" --step noh=on --step nol=on --step stack_stamp=on
+$PEASOUP_HOME/tools/cfar.sh "$@" --backend zipr --step diehard=on --step p1transform=on --step non_overlapping_stack=on --config_name $(basename $0 .sh|sed "s/cfar_//") --step move_globals=on --step set_interpreter=on --step-option set_interpreter:"--interp /target_apps/ld-nol.so" --step-option zipr:"--large_only:nog_on true" --step noh=on --step nol=on --step stack_stamp=on --step-option move_globals:-d --step-option move_globals:.interp
 
diff --git a/tools/cfar_configs/cfar_probNog_probSS_probDS_phase1_zipr.sh b/tools/cfar_configs/cfar_probNog_probSS_probDS_phase1_zipr.sh
index f572105f6..1d2de7ad2 100755
--- a/tools/cfar_configs/cfar_probNog_probSS_probDS_phase1_zipr.sh
+++ b/tools/cfar_configs/cfar_probNog_probSS_probDS_phase1_zipr.sh
@@ -8,5 +8,5 @@ source $(dirname $0)/../ps_wrapper.source $0
 #    --imagename
 #
 
-$PEASOUP_HOME/tools/cfar.sh "$@" --backend zipr --step diehard=on --step p1transform=on --step duck_season=on --step non_overlapping_stack=on --config_name $(basename $0 .sh|sed "s/cfar_//") --step move_globals=on --step set_interpreter=on --step-option set_interpreter:"--interp /target_apps/ld-nol.so" --step-option zipr:"--large_only:nog_on true" --step noh=on --step nol=on --step stack_stamp=on 
+$PEASOUP_HOME/tools/cfar.sh "$@" --backend zipr --step diehard=on --step p1transform=on --step duck_season=on --step non_overlapping_stack=on --config_name $(basename $0 .sh|sed "s/cfar_//") --step move_globals=on --step set_interpreter=on --step-option set_interpreter:"--interp /target_apps/ld-nol.so" --step-option zipr:"--large_only:nog_on true" --step noh=on --step nol=on --step stack_stamp=on  --step-option move_globals:-d --step-option move_globals:.interp
 
diff --git a/tools/cfar_configs/cfar_scfi_zipr.sh b/tools/cfar_configs/cfar_scfi_zipr.sh
index 6b138a9fd..71ac65b24 100755
--- a/tools/cfar_configs/cfar_scfi_zipr.sh
+++ b/tools/cfar_configs/cfar_scfi_zipr.sh
@@ -2,4 +2,4 @@
 source $(dirname $0)/../ps_wrapper.source $0
 
 
-$PEASOUP_HOME/tools/cfar.sh "$@" --config_name $(basename $0 .sh|sed "s/cfar_//") --step move_globals=on --step-option move_globals:--cfi --step selective_cfi=on --step-option selective_cfi:--multimodule --step-option fix_calls:--fix-all  --backend zipr
+$PEASOUP_HOME/tools/cfar.sh "$@" --config_name $(basename $0 .sh|sed "s/cfar_//") --step move_globals=on --step-option move_globals:--cfi --step selective_cfi=on --step-option selective_cfi:--multimodule --step-option fix_calls:--fix-all  --backend zipr --step-option move_globals:-d --step-option move_globals:.interp
diff --git a/tools/cfar_configs/cfar_structNogOF_phase1_zipr.sh b/tools/cfar_configs/cfar_structNogOF_phase1_zipr.sh
index f63e955f6..420e910f2 100755
--- a/tools/cfar_configs/cfar_structNogOF_phase1_zipr.sh
+++ b/tools/cfar_configs/cfar_structNogOF_phase1_zipr.sh
@@ -2,5 +2,5 @@
 source $(dirname $0)/../ps_wrapper.source $0
 
 
-$PEASOUP_HOME/tools/cfar.sh "$@" --backend zipr --step diehard=on --step-option zipr:"--zipr:seed $$" --structured_noc --structured_nos --step-option zipr:"--large_only:on true" --structured_p1_canaries  --step p1transform=on --step non_overlapping_stack=on --config_name $(basename $0 .sh|sed "s/cfar_//") --step move_globals=on --step set_interpreter=on --step-option set_interpreter:"--interp /target_apps/ld-nol.so" --structured_nog --step-option zipr:"--large_only:nog_on true --large_only:overflow_protection true" --step noh=on --step nol=on
+$PEASOUP_HOME/tools/cfar.sh "$@" --backend zipr --step diehard=on --step-option zipr:"--zipr:seed $$" --structured_noc --structured_nos --step-option zipr:"--large_only:on true" --structured_p1_canaries  --step p1transform=on --step non_overlapping_stack=on --config_name $(basename $0 .sh|sed "s/cfar_//") --step move_globals=on --step set_interpreter=on --step-option set_interpreter:"--interp /target_apps/ld-nol.so" --structured_nog --step-option zipr:"--large_only:nog_on true --large_only:overflow_protection true" --step noh=on --step nol=on --step-option move_globals:-d --step-option move_globals:.interp
 
diff --git a/tools/cfar_configs/cfar_structNogOF_structSS_phase1_zipr.sh b/tools/cfar_configs/cfar_structNogOF_structSS_phase1_zipr.sh
index a8099d7d4..3a704adf9 100755
--- a/tools/cfar_configs/cfar_structNogOF_structSS_phase1_zipr.sh
+++ b/tools/cfar_configs/cfar_structNogOF_structSS_phase1_zipr.sh
@@ -2,5 +2,5 @@
 source $(dirname $0)/../ps_wrapper.source $0
 
 
-$PEASOUP_HOME/tools/cfar.sh "$@" --backend zipr --step diehard=on --step-option zipr:"--zipr:seed $$" --structured_noc --structured_nos --step-option zipr:"--large_only:on true" --structured_p1_canaries  --step p1transform=on --step non_overlapping_stack=on --config_name $(basename $0 .sh|sed "s/cfar_//") --step move_globals=on --step set_interpreter=on --step-option set_interpreter:"--interp /target_apps/ld-nol.so" --structured_nog --step-option zipr:"--large_only:nog_on true --large_only:overflow_protection true" --step noh=on --step nol=on --step stack_stamp=on --structured_stack_stamp
+$PEASOUP_HOME/tools/cfar.sh "$@" --backend zipr --step diehard=on --step-option zipr:"--zipr:seed $$" --structured_noc --structured_nos --step-option zipr:"--large_only:on true" --structured_p1_canaries  --step p1transform=on --step non_overlapping_stack=on --config_name $(basename $0 .sh|sed "s/cfar_//") --step move_globals=on --step set_interpreter=on --step-option set_interpreter:"--interp /target_apps/ld-nol.so" --structured_nog --step-option zipr:"--large_only:nog_on true --large_only:overflow_protection true" --step noh=on --step nol=on --step stack_stamp=on --structured_stack_stamp --step-option move_globals:-d --step-option move_globals:.interp
 
diff --git a/tools/cfar_configs/cfar_structNogOF_structSS_probDS_phase1_zipr.sh b/tools/cfar_configs/cfar_structNogOF_structSS_probDS_phase1_zipr.sh
index 93359588f..93b9143e6 100755
--- a/tools/cfar_configs/cfar_structNogOF_structSS_probDS_phase1_zipr.sh
+++ b/tools/cfar_configs/cfar_structNogOF_structSS_probDS_phase1_zipr.sh
@@ -2,5 +2,5 @@
 source $(dirname $0)/../ps_wrapper.source $0
 
 
-$PEASOUP_HOME/tools/cfar.sh "$@" --backend zipr --step diehard=on --step-option zipr:"--zipr:seed $$" --structured_noc --structured_nos --step-option zipr:"--large_only:on true" --structured_p1_canaries  --step p1transform=on --step duck_season=on --step non_overlapping_stack=on --config_name $(basename $0 .sh|sed "s/cfar_//") --step move_globals=on --step set_interpreter=on --step-option set_interpreter:"--interp /target_apps/ld-nol.so" --structured_nog --step-option zipr:"--large_only:nog_on true --large_only:overflow_protection true" --step noh=on --step nol=on --step stack_stamp=on --structured_stack_stamp
+$PEASOUP_HOME/tools/cfar.sh "$@" --backend zipr --step diehard=on --step-option zipr:"--zipr:seed $$" --structured_noc --structured_nos --step-option zipr:"--large_only:on true" --structured_p1_canaries  --step p1transform=on --step duck_season=on --step non_overlapping_stack=on --config_name $(basename $0 .sh|sed "s/cfar_//") --step move_globals=on --step set_interpreter=on --step-option set_interpreter:"--interp /target_apps/ld-nol.so" --structured_nog --step-option zipr:"--large_only:nog_on true --large_only:overflow_protection true" --step noh=on --step nol=on --step stack_stamp=on --structured_stack_stamp --step-option move_globals:-d --step-option move_globals:.interp
 
diff --git a/tools/cfar_configs/cfar_structNog_phase1_zipr.sh b/tools/cfar_configs/cfar_structNog_phase1_zipr.sh
index 010bf86bb..eec2dae76 100755
--- a/tools/cfar_configs/cfar_structNog_phase1_zipr.sh
+++ b/tools/cfar_configs/cfar_structNog_phase1_zipr.sh
@@ -2,4 +2,4 @@
 source $(dirname $0)/../ps_wrapper.source $0
 
 
-$PEASOUP_HOME/tools/cfar.sh "$@" --backend zipr --step diehard=on --step-option zipr:"--zipr:seed $$" --structured_noc --structured_nos --step-option zipr:"--large_only:on true" --structured_p1_canaries  --step p1transform=on --step non_overlapping_stack=on --config_name $(basename $0 .sh|sed "s/cfar_//") --step move_globals=on --step set_interpreter=on --step-option set_interpreter:"--interp /target_apps/ld-nol.so" --structured_nog --step-option zipr:"--large_only:nog_on true" --step noh=on --step nol=on
+$PEASOUP_HOME/tools/cfar.sh "$@" --backend zipr --step diehard=on --step-option zipr:"--zipr:seed $$" --structured_noc --structured_nos --step-option zipr:"--large_only:on true" --structured_p1_canaries  --step p1transform=on --step non_overlapping_stack=on --config_name $(basename $0 .sh|sed "s/cfar_//") --step move_globals=on --step set_interpreter=on --step-option set_interpreter:"--interp /target_apps/ld-nol.so" --structured_nog --step-option zipr:"--large_only:nog_on true" --step noh=on --step nol=on --step-option move_globals:-d --step-option move_globals:.interp
diff --git a/tools/cfar_configs/cfar_structNog_structNol_structNoh_structNos_structNoc_probHeaprand_zipr.sh b/tools/cfar_configs/cfar_structNog_structNol_structNoh_structNos_structNoc_probHeaprand_zipr.sh
index 28e9c6ecc..5f6830d2d 100755
--- a/tools/cfar_configs/cfar_structNog_structNol_structNoh_structNos_structNoc_probHeaprand_zipr.sh
+++ b/tools/cfar_configs/cfar_structNog_structNol_structNoh_structNos_structNoc_probHeaprand_zipr.sh
@@ -2,4 +2,4 @@
 source $(dirname $0)/../ps_wrapper.source $0
 
 
-$PEASOUP_HOME/tools/cfar.sh "$@" --backend zipr --step diehard=on --step-option zipr:"--zipr:seed $$" --structured_noc --structured_nos --step-option zipr:"--large_only:on true" --step non_overlapping_stack=on --config_name $(basename $0 .sh|sed "s/cfar_//") --step move_globals=on --step set_interpreter=on --step-option set_interpreter:"--interp /target_apps/ld-nol.so" --structured_nog --step-option zipr:"--large_only:nog_on true" --step noh=on --step nol=on
+$PEASOUP_HOME/tools/cfar.sh "$@" --backend zipr --step diehard=on --step-option zipr:"--zipr:seed $$" --structured_noc --structured_nos --step-option zipr:"--large_only:on true" --step non_overlapping_stack=on --config_name $(basename $0 .sh|sed "s/cfar_//") --step move_globals=on --step set_interpreter=on --step-option set_interpreter:"--interp /target_apps/ld-nol.so" --structured_nog --step-option zipr:"--large_only:nog_on true" --step noh=on --step nol=on --step-option move_globals:-d --step-option move_globals:.interp
diff --git a/tools/cfar_configs/cfar_structNog_structNol_structNoh_structNos_structNoc_structP1Canaries_probHeaprand_zipr.sh b/tools/cfar_configs/cfar_structNog_structNol_structNoh_structNos_structNoc_structP1Canaries_probHeaprand_zipr.sh
index 010bf86bb..eec2dae76 100755
--- a/tools/cfar_configs/cfar_structNog_structNol_structNoh_structNos_structNoc_structP1Canaries_probHeaprand_zipr.sh
+++ b/tools/cfar_configs/cfar_structNog_structNol_structNoh_structNos_structNoc_structP1Canaries_probHeaprand_zipr.sh
@@ -2,4 +2,4 @@
 source $(dirname $0)/../ps_wrapper.source $0
 
 
-$PEASOUP_HOME/tools/cfar.sh "$@" --backend zipr --step diehard=on --step-option zipr:"--zipr:seed $$" --structured_noc --structured_nos --step-option zipr:"--large_only:on true" --structured_p1_canaries  --step p1transform=on --step non_overlapping_stack=on --config_name $(basename $0 .sh|sed "s/cfar_//") --step move_globals=on --step set_interpreter=on --step-option set_interpreter:"--interp /target_apps/ld-nol.so" --structured_nog --step-option zipr:"--large_only:nog_on true" --step noh=on --step nol=on
+$PEASOUP_HOME/tools/cfar.sh "$@" --backend zipr --step diehard=on --step-option zipr:"--zipr:seed $$" --structured_noc --structured_nos --step-option zipr:"--large_only:on true" --structured_p1_canaries  --step p1transform=on --step non_overlapping_stack=on --config_name $(basename $0 .sh|sed "s/cfar_//") --step move_globals=on --step set_interpreter=on --step-option set_interpreter:"--interp /target_apps/ld-nol.so" --structured_nog --step-option zipr:"--large_only:nog_on true" --step noh=on --step nol=on --step-option move_globals:-d --step-option move_globals:.interp
diff --git a/tools/generate_mvee_package.sh b/tools/generate_mvee_package.sh
index 491c04098..fc536ec01 100755
--- a/tools/generate_mvee_package.sh
+++ b/tools/generate_mvee_package.sh
@@ -411,7 +411,7 @@ finalize_json()
 
 
 			# remove host's portion of the path to get path on target
-			exe_dir=$(echo $full_exe_dir|sed "s/^$indir//")
+			exe_dir=$(echo $full_exe_dir|sed "s|^$indir||")
 
 			echo "	variant coming from $full_exe_dir "
 			mkdir -p $new_variant_dir/bin
@@ -500,7 +500,7 @@ finalize_json()
 
 
 			variant_name="variant_${vs}_${seq}"
-			variant_config_contents="${variant_config_contents//<<EXEPATH>>/$new_variant_dir_ts\/bin}"
+			variant_config_contents="${variant_config_contents//<<EXEPATH>>/$new_variant_dir_ts/bin}"
 			variant_config_contents="${variant_config_contents//<<VARIANTNUM>>/$variant_name}"
 			variant_config_contents="${variant_config_contents//<<VARIANTINDEX>>/$seq}"
 			variant_config_contents="${variant_config_contents//<<VARIANTDIR>>/$new_variant_dir_ts}"
@@ -585,6 +585,7 @@ finalize_json()
 	json_contents="${json_contents//<<SERVER>>/$server}"
 	json_contents="${json_contents//<<ARGS>>/$args}"
 
+	echo "$json_contents" > $json.ugly
 	echo "$json_contents" |json_pp > $json
 
 	echo "Finalized $json as atd config."
diff --git a/tools/vgt.sh b/tools/vgt.sh
new file mode 100755
index 000000000..60bef314d
--- /dev/null
+++ b/tools/vgt.sh
@@ -0,0 +1,491 @@
+#!/bin/bash
+
+source $(dirname $0)/ps_wrapper.source $0
+
+
+
+declare -a configs
+declare -A style_options
+
+is_natural()
+{
+	if [[ $1 =~ ^[0-9]+$ ]]; then
+		# echo Detected natural -- bash uses 0 as normal exit
+		return 0
+	else
+		#echo Detected non-natural -- bash uses non-zero as err exit
+		return 1	
+	fi
+}
+
+init_globals()
+{
+	do_marshaling=0
+	do_duckseason=0
+	variant_sets=1
+	input_package=""
+	output_package=""
+	duck_json=""
+	config_label=""
+	verbose=0
+	temp_dir=""
+}
+
+usage_raw()
+{
+	echo ""
+	echo "Usage:"
+	echo ""
+	echo "$1 "
+	echo "   --input-package <path> "
+	echo "   --output-package <path> "
+	echo "   --config <config> [options...]"
+	echo ""
+	echo "Options:"
+	echo ""
+	echo "	--input-package <path>                    path to input package of replicants"
+	echo "	-i <path>                                 "
+	echo ""
+	echo "	--temp-dir <path>                         path to temporary files needed to build output"
+	echo "	-t <path>                                 package -- caution!  used in a cache-like way!"
+	echo ""
+	echo "	--output-package <path>                   path to write a package of diverse variants"
+	echo "	-o <path>                                 "
+	echo ""
+	echo "	--config <config>                         describe the configuration to use, e.g., 2structNoc+1probBilr"
+	echo "	-c <path>                                 "
+	echo ""
+	echo "  --extra-style-flags <style>:<flags>       pass along <flags> when creating variants of type <style>"
+	echo "  -e <style>:<flags>                        if <style> is empty (i.e., the paramters starts with a : or has no :) "
+	echo "                                            or has the value \"default\", <flags> is passed to all styles.  "
+	echo "                                            Can be repeated to add more flags."
+	echo "                                            Possible values for <flags> is undocumented.  See \$PS."
+	echo ""
+	echo "	--marshaling <# variant sets>             include checkpoint, recovery, and marshaling support for the "
+	echo "	--marshalling <# variant sets>            application and specify how many variant sets to use"
+	echo "	-m <# variant sets>                       "
+	echo ""
+	echo "	--duck-json <daffy.json>                  Specify the input file generated by daffy for this application."
+	echo "	-d <daffy.json>                           "
+	echo ""
+	echo "	--help, --usage, -h                       Display this message and exit."
+	echo "	--verbose, -v                             Spew debug data"
+	echo ""
+	echo "Notes:"
+	echo "	* Not all listed configurations will work on all programs.  For example, stack samping (probSS or structSS) "
+	echo "	  is incompatible with exception handling.  It's recommended you start with simpler configs for testing purposes."
+	echo "	* This tool may take a long time.  High CPU load indicates progress is being made."
+	echo "	* Configurations are of the form:"
+	echo ""
+	echo "			<#><style>+<#>style+..."
+	echo ""
+	echo "		where <#> represents a positive, integer number of variants"
+	echo "		and <style> represents how to configure those variants."
+	echo "		For example, '2structNoc+1probBilr' means 2 structured variants with "
+	echo "		non-overlapping code with 1 probablistic code layout variant."
+	echo ""
+	echo "	* In configuration descriptions, Use the + notation when more than one variant style is desired."
+	echo "	* Behavior when a configuration has a duplicate style is undefined. "
+	echo "	* Possible style options are:"
+	ls -1 $PEASOUP_HOME/tools/cfar_configs/*.sh|sed "s:^.*cfar_:		:g"|sed "s/\.sh$//g"| awk '{ print length, $0 }' | sort -n -s | cut -d" " -f2-
+	
+	exit 1
+}
+
+usage()
+{
+	usage_raw "$@" | less
+	exit 1
+}
+
+parse_args()
+{
+	program=$0
+	init_globals
+
+        short_opts="i:o:m:d:c:huvt:e:"
+        long_opts="--long do-marshaling:
+                   --long do-marshalling:
+                   --long config:
+                   --long input-package:
+                   --long temp-dir:
+                   --long output-package:
+                   --long duck-json:
+                   --long extra-style-flags:
+                   --long help
+                   --long usage
+                   --long verbose
+		"
+
+        # solaris does not support long option names
+        if [ `uname -s` = "SunOS" ]; then
+                TEMP=`getopt $short_opts "$@"`
+        else
+                TEMP=`getopt -o $short_opts $long_opts -n 'vgt.sh' -- "$@"`
+        fi
+
+        # error check #
+        if [ $? != 0 ] ; then echo "Terminating..." >&2 ; exit -1 ; fi
+
+        # Note the quotes around `$TEMP': they are essential!
+        eval set -- "$TEMP"
+
+
+	# the configuration you'd like to protect for the application
+        while true ; do
+                case "$1" in
+			--do-marshaling|--do-marshalling|-m)
+				do_marshaling=1
+				shift
+				variant_sets=$1
+				shift
+				#echo Enabling marshaling with $variant_sets variant sets.
+			;;
+			--duck-json|-d)
+				shift
+				duck_json=$1
+				shift
+			;;
+			--input-package|-i)
+				shift
+				input_package=$(echo "$1"|sed "s:/*$::")
+				shift
+			;;
+			--temp-dir|-t)
+				shift
+				temp_dir=$1
+				shift
+			;;
+			--output-package|-o)
+				shift
+				output_package=$(echo "$1"|sed "s:/*$::")
+				shift
+			;;
+			--config|-c)
+				shift
+				config_label=$1
+				shift
+			;;
+			--extra-style-flags|-e)
+				shift
+				extra_flag=$1
+				style=${extra_flag%%:*}	 # delete longest (%%) string that matches regex :* starting at end of string (%)
+				flag=${extra_flag#*:} 	 # delete shortest (##) string that matches regex *: starting at begining of string (#)
+				#echo "in extra-style-flags, style='$style'"
+				#echo "in extra-style-flags, flag='$flag'"
+				if [[ -z "$style" ]]; then
+					style_options["default"]="${style_options[default]} $flag"
+				else
+					style_options["$style"]="${style_options[$style]} $flag"
+				fi
+				shift
+			;;
+			--verbose|-v)
+				verbose=1
+				shift
+			;;
+			--help|--usage|-h|-u)
+				usage $program
+			;;	
+			--)
+				break;
+			;;	
+			*)
+			echo "unknown option: $1"
+			exit 1
+			;;
+		esac
+	done
+}
+
+
+sanity_check_args()
+{
+	if [ "$do_marshaling" = "1" -a "$do_duckseason" = "1" ]; then
+		echo "--duck-season is incompatible with --do-marshaling"
+		exit 1
+	fi
+
+	if [ -z "$input_package"  ]; then
+		echo "Must specify an input package of replicants. "
+		exit 1
+	fi
+	if [ ! -d "$input_package" ]; then
+		echo "Input package does not exist: $input_package"
+		exit 1
+	fi
+
+	if [ ! -z "$output_package" ]; then
+		if [ ! -d $(dirname $(realpath "$output_package") ) ]; then
+			echo "Cannot make output package directory: $output_package"
+			exit 1
+		fi
+	fi
+
+	if ! is_natural "$variant_sets" ; then
+		echo "Variant set specifier ($variant_sets) is not an integer";
+		exit 1
+	fi
+	if [[ 0 -gt "$variant_sets" || 100 -lt "$variant_sets" ]] ; then
+		echo "Invalid number of variant sets.  Must be 0 < #variant_sets < 100."
+		exit 1
+	fi
+
+	if [[ -z "$config_label" ]]; then
+		echo "Must specify a configuration to build"
+		exit 1
+	fi
+	if [[ ! -f $input_package/monitor.conf ]]; then
+		echo "Cannot find monitor.conf in input package $input_package."
+		exit 1
+	fi
+}
+
+find_configs()
+{
+
+	# configurations to provide for this variant set.
+
+	local config_count=0
+	for config in $(echo $config_label | sed "s|+| |g")
+	do
+		#echo Found config=$config
+		config_name=$(echo $config | sed "s|^[0-9]*||")
+		#echo Found config_name=$config_name
+		config_num=$(echo $config | sed "s|\(^[0-9]*\).*|\1|")
+		#echo Found config_num=$config_num
+	
+		# find any extra flags for this option
+		config_options="${style_options[$config_name]} ${style_options[default]}"
+		#echo config_options=$config_options
+
+		if [[ ! -x $PEASOUP_HOME/tools/cfar_configs/cfar_$config_name.sh ]]; then
+			echo "Cannot find config named $config_name"
+			exit 1
+		fi
+		if ! is_natural "$config_num"; then
+			echo "Found bad configuration number ($config_num) in config $config"
+			exit 1
+		fi
+
+
+		configs[$config_count]="cfar_${config_name}.sh $config_num $config_options"
+
+		config_count=$(expr $config_count + 1)
+	done
+
+	# build options for package generation
+	gen_mvee_opts=""
+
+	# check for marshaling support
+	if [[ $do_marshaling = 1 ]]; then
+		gen_mvee_opts="$gen_mvee_opts --include-cr"
+	fi
+
+	# check for NOH xform.
+	if [[ "$config_label" =~ .*structNoh.* ]]  || [[ "$config_label" =~ .*probNoh.* ]] || [[ "$config_label" =~ .*phase1* ]] ; then
+		gen_mvee_opts="$gen_mvee_opts --enablenoh"
+	fi
+
+	if [[ "$config_label" =~ .*structNol.* ]]  || [[ "$config_label" =~ .*probNol.* ]] || [[ "$config_label" =~ .*phase1* ]]; then
+		gen_mvee_opts="$gen_mvee_opts --enablenol"
+	fi
+
+	if [[ $verbose = 1 ]]; then
+		echo gen_mvee_opts are $gen_mvee_opts
+	fi
+
+	# FIXME
+	# need to pass duck_json to duck-season step.
+	# need image_name to duck-season step?
+	# need VGT flag for "extra PS options such as --step-option move_globals:-d --step-option move_globals:.interp"
+}
+
+find_main_exe()
+{
+	# need to add --mainexe flag to gen_mvee_opts
+	mon_conf=$input_package/monitor.conf
+	main_alias=$(cat $mon_conf |jq '.variant.global.exec.path'|sed 's/"//g')
+	variant_name=$(cat $mon_conf | jq '.variant.sets.default[0]') # leave quotes 
+	variant_alias=$(cat $mon_conf |jq '.variant.specs['"$variant_name"'].exec.alias'|grep "$main_alias="|sed 's/",//g'|sed 's/"//g'|sed "s/.*=//")
+
+	main_exe=$(basename $variant_alias)
+	gen_mvee_opts="$gen_mvee_opts --mainexe $main_exe"
+	if [[ $verbose = 1 ]]; then
+		echo "main_exe name is $main_exe"
+		echo "gen_mvee_opts are $gen_mvee_opts"
+	fi
+
+
+}
+
+
+# ---- probably not changing these things.
+
+find_extra_preloads()
+{
+	mon_conf=$input_package/monitor.conf
+	preloads=$(cat $mon_conf|jq '.variant.global.exec.env'|grep LD_PRELOAD|sed 's|"||g'|sed "s|.*=||")
+	extra_preloads=" --extra_preloads $preloads"
+
+	if [[ $verbose = 1 ]]; then
+		echo extra_preloads=$extra_preloads
+	fi
+}
+
+
+
+find_executable_files()
+{
+	# inputs to the script.
+
+	# which files to protect
+	#files="KUDYN_00006_GCC_64"
+	files=$(find $input_package -exec file {} \; |grep -i elf |cut -d":" -f1)
+
+	if [[ $verbose = 1 ]]; then
+		echo exe_elf_files=$files
+	fi
+
+}
+
+find_class()
+{
+	# which class this atd.
+	# class=$(echo $files |sed "s/_CLANG_64//"|sed "s/_GCC_64//" )
+	mon_conf=$input_package/monitor.conf
+	class=$(cat $mon_conf|jq '.atd.class'|sed 's|"||g'|sed "s|.*=||")
+	if [[ $class = "null" ]]; then
+		echo "Warning!  Input package does not specify an atd.class setting.  Assuming NO_POLLS..."
+		class="NO_POLLS"
+	fi
+	if [[ $verbose = 1 ]]; then
+		echo class=$class
+	fi
+}
+
+find_application_name()
+{
+	# which server is this?
+	mon_conf=$input_package/monitor.conf
+	server=$(cat $mon_conf|jq '.atd.server'|sed 's|"||g'|sed "s|.*=||")
+	if [[ $server = "null" ]]; then
+		echo "Error!  Input package does not specify an atd.server setting."
+		exit 1
+	fi
+	if [[ $verbose = 1 ]]; then
+		echo server=$server
+	fi
+}
+
+find_command_line()
+{
+	# args for the server?
+	# changed output log to /dev/null so it's not chckpointed, as documented on apogee wiki
+	# args=' "-p", "8888", "-d", "/tmp/www", "-D", "-c", "/cgi-bin/**", "-l", "/dev/null", "-i", "/testing/results/thttpd.pid" '
+	mon_conf=$input_package/monitor.conf
+	args=$(cat $mon_conf |jq '.variant.global.exec.argv'|grep -v -e '\[' -e '\]' )
+
+	if [[ $args = "null" ]]; then
+		echo "Error!  Input package does not specify .variant.global.exec.argv"
+		exit 1
+	fi
+	if [[ $verbose = 1 ]]; then
+		echo argv="$args"
+	fi
+}
+
+
+find_temp_dir()
+{
+	if [[ -z "$temp_dir" ]]; then
+		# where to put intermediate results.
+		outdir=$input_package-temp.$$
+	else
+		outdir=$temp_dir
+	fi
+}
+
+
+find_output_dir()
+{
+	if [[ -z "$output_package" ]]; then
+		finaldir=${input_package}-${config_label}-UVATA1-$(date "+%d_%m_%Y")
+	else
+		finaldir=$output_package
+	fi
+	if [ -d $finaldir ]; then
+		echo "$finaldir already exists; aborting...."
+		exit 1
+	else
+		if ! mkdir $finaldir ; then
+			echo "Error creating output directory"
+			exit 1
+		fi
+	fi
+}
+
+generate_variants()
+{
+	for variant_set_no in $(seq 1 $variant_sets)
+	do
+		echo Creating variant set $variant_set_no
+		myoutdir=$outdir/vs-$variant_set_no
+		#create outdir
+		mkdir -p $myoutdir
+
+		#for each config
+		for config in "${configs[@]}"
+		do
+			echo Creating variants for $config
+
+			# and for each file
+			for file in $files
+			do
+				# parse the script/num variants from the config 
+				script=$(echo $config|cut -d" " -f1)
+				numvariants=$(echo $config|cut -d" " -f2)
+				options=$(echo $config|cut -d" " -f3-)
+
+				# run cfar.sh
+				$PEASOUP_HOME/tools/cfar_configs/$script $numvariants $file $myoutdir $options
+				
+				if [[ $? != 0 ]]; then
+					echo "Protection failed."
+					exit 1
+				fi
+
+			done
+		done
+	done
+	echo Variant generation complete.
+}
+
+generate_package()
+{
+	# generate a config.
+	$PEASOUP_HOME/tools/generate_mvee_package.sh --indir "$outdir" --outdir "$finaldir" --class "$class" --server "$server" --args "$args" $gen_mvee_opts  $extra_preloads
+
+	# FIXME:  can't find this used, although I know it is.
+	#cp $CFAR_EMT_PLUGINS/debug/libdebug.so $finaldir
+}
+
+
+main()
+{
+	parse_args "$@"
+	sanity_check_args
+	find_output_dir
+	find_configs
+	find_extra_preloads
+	find_executable_files
+	find_class
+	find_application_name
+	find_command_line
+	find_temp_dir
+	find_main_exe
+	generate_variants
+	generate_package
+}
+
+main "$@"
-- 
GitLab