# remove modules from kernel
kmodules_dir=$KERNEL_DIR/$MODULES_SUBDIR/
- CALL git rm -r "$kmodules_dir" > /dev/null
+ CALL git rm -r --ignore-unmatch "$kmodules_dir" > /dev/null
CALL cd $SWAP_DIR
files=$(CALL git ls-files modules/)
# remove old hooks
CALL cd $KERNEL_DIR
- CALL git rm -r $KERNEL_DIR/include/swap/ > /dev/null
- CALL git rm -r $HOOKS_SUBDIR > /dev/null
- CALL git rm $KERNEL_DIR/kernel/swap/Makefile > /dev/null
- CALL git rm $KERNEL_DIR/kernel/swap/Kconfig > /dev/null
+ CALL git rm -r --ignore-unmatch $KERNEL_DIR/include/swap/ > /dev/null
+ CALL git rm -r --ignore-unmatch $HOOKS_SUBDIR > /dev/null
+ CALL git rm --ignore-unmatch $KERNEL_DIR/kernel/swap/Makefile > /dev/null
+ CALL git rm --ignore-unmatch $KERNEL_DIR/kernel/swap/Kconfig > /dev/null
# copy new hooks
CALL cd $SWAP_DIR
fi
}
+prepare_kernel() {
+ if [ -z $CONFIG_FILE ]; then
+ if [ ! -d $KERNEL_DIR/kernel/swap ]; then
+ echo "#"
+ echo "# Kernel config file is not specified! Add necessary data by yourself"
+ echo "#"
+ fi
+ return
+ fi
+
+ OUTPUT=$(cat $CONFIG_FILE | grep SWAP_DA)
+
+ if [ ! -z "$OUTPUT" ]; then
+ return
+ fi
+
+ CALL echo "#" >> $CONFIG_FILE
+ CALL echo "# SWAP subsystem for Dynamic Analyzer" >> $CONFIG_FILE
+ CALL echo "#" >> $CONFIG_FILE
+ CALL echo "CONFIG_SWAP_DA=y" >> $CONFIG_FILE
+ CALL echo "CONFIG_SWAP_KERNEL_IMMUTABLE=y" >> $CONFIG_FILE
+ CALL echo "CONFIG_SWAP_HOOK_TASKDATA=y" >> $CONFIG_FILE
+ CALL echo "CONFIG_SWAP_HOOK_USAUX=y" >> $CONFIG_FILE
+ CALL echo "CONFIG_SWAP_HOOK_SYSCALL=y" >> $CONFIG_FILE
+ CALL echo "CONFIG_SWAP_HOOK_SWITCH_TO=y" >> $CONFIG_FILE
+ CALL echo "CONFIG_SWAP_HOOK_ENERGY=y" >> $CONFIG_FILE
+ CALL echo "CONFIG_SWAP_HOOK_FILE_OPS=y" >> $CONFIG_FILE
+ CALL echo "CONFIG_SWAP_HOOK_SIGNAL=y" >> $CONFIG_FILE
+
+ CONF_NAME=$(basename $CONFIG_FILE)
+ author="$(git config --global user.name) <$(git config --global user.email)>"
+
+ CALL git add $CONFIG_FILE
+ git commit --author="$(echo -e $author)" -m "SWAP-DA: enable SWAP DA in $CONF_NAME"
+}
+
main() {
if [ "$#" -lt 2 ] ; then
- echo "Usage: $0 <swap_dir> <kernel_dir>"
+ echo "Usage: $0 <swap_dir> <kernel_dir> [kernel_config_file]"
exit 1
fi
SWAP_DIR=$(readlink -f $1)
KERNEL_DIR=$(readlink -f $2)
+ if [ -n $3 ]; then
+ CONFIG_FILE=$3
+ else
+ CONFIG_FILE=""
+ fi
+
+ CALL cd $KERNEL_DIR
+
+ # prepare kernel for SWAP
+ prepare_kernel
+
# set subdir variables
set_subdirs