| #!/bin/bash |
| # This scripts builds a self-contained executable file for ThreadSanitizer. |
| # Usage: |
| # ./mk-self-contained-tsan.sh \ |
| # /pin/root \ |
| # /dir/where/tsan-pin-files/reside \ |
| # resulting_binary |
| |
| # take Pin from here: |
| PIN_ROOT="$1" |
| # Our .so files are here: |
| IN_DIR="$2" |
| # Put the result here: |
| OUT="$3" |
| # The files/dirs to take: |
| IN_FILES="tsan_pin.sh bin/*ts_pin.so" |
| |
| rm -rf $OUT # remove the old one |
| touch $OUT # create the new one |
| chmod +x $OUT |
| |
| # Create the header. |
| cat << 'EOF' >> $OUT |
| #!/bin/bash |
| # This is a self-extracting executable of ThreadSanitizerPin. |
| # This file is autogenerated by mk-self-contained-tsan-pin.sh. |
| |
| # We extract the temporary files to $TSAN_EXTRACT_DIR/tsan_pin.XXXXXX |
| TSAN_EXTRACT_DIR=${TSAN_EXTRACT_DIR:-/tmp} |
| EXTRACT_DIR="$(mktemp -d $TSAN_EXTRACT_DIR/tsan_pin.XXXXXX)" |
| |
| cleanup() { |
| rm -rf $EXTRACT_DIR |
| } |
| # We will cleanup on exit. |
| trap cleanup EXIT |
| |
| mkdir -p $EXTRACT_DIR |
| chmod +rwx $EXTRACT_DIR |
| EOF |
| # end of header |
| |
| # Create the self-extractor |
| |
| # Exclude unneeded binaries. |
| TAR_EXCLUDE="$TAR_EXCLUDE --exclude=*/doc/* \ |
| --exclude=*/include/* \ |
| --exclude=*/examples/* \ |
| " |
| # Create the running part. |
| |
| cat << 'EOF' >> $OUT |
| # Extract: |
| echo Extracting ThreadSanitizerPin to $EXTRACT_DIR |
| sed '1,/^__COMPRESSED_DATA_BELOW__$/d' $0 | tar xz -C $EXTRACT_DIR |
| |
| export PIN_ROOT=$EXTRACT_DIR |
| export TS_ROOT=$EXTRACT_DIR |
| $EXTRACT_DIR/tsan_pin.sh "$@" |
| EXIT_STATUS=$? |
| cleanup # the trap above will handle the cleanup only if we are in bash 3.x |
| exit $EXIT_STATUS # make sure to return the exit code from the tool. |
| |
| __COMPRESSED_DATA_BELOW__ |
| EOF |
| |
| # Dump the compressed binary at the very end of the file. |
| echo tar zcvh -C $IN_DIR $TAR_EXCLUDE $IN_FILES |
| tar zcvh -C $IN_DIR $TAR_EXCLUDE $IN_FILES -C $PIN_ROOT ./{extras,ia32,intel64,pin} >> $OUT |
| |
| echo "File $OUT successfully created" |
| |