| 1 | #!/usr/bin/env bash
 | 
| 2 | #
 | 
| 3 | # Junk drawer for ASDL.
 | 
| 4 | #
 | 
| 5 | # Usage:
 | 
| 6 | #   asdl/run.sh <function name>
 | 
| 7 | 
 | 
| 8 | set -o nounset
 | 
| 9 | set -o pipefail
 | 
| 10 | set -o errexit
 | 
| 11 | 
 | 
| 12 | REPO_ROOT=$(cd "$(dirname $0)/.."; pwd)
 | 
| 13 | readonly REPO_ROOT
 | 
| 14 | 
 | 
| 15 | source build/common.sh
 | 
| 16 | 
 | 
| 17 | export PYTHONPATH='.:vendor/'
 | 
| 18 | 
 | 
| 19 | #
 | 
| 20 | # Native Code
 | 
| 21 | #
 | 
| 22 | 
 | 
| 23 | # http://www.commandlinefu.com/commands/view/6004/print-stack-trace-of-a-core-file-without-needing-to-enter-gdb-interactively
 | 
| 24 | # http://stackoverflow.com/questions/4521015/how-to-pass-arguments-and-redirect-stdin-from-a-file-to-program-run-in-gdb
 | 
| 25 | gdb-trace() {
 | 
| 26 |   # -args goes before the executable
 | 
| 27 |   gdb -batch -ex "run" -ex "bt" -args "$@" 2>&1 
 | 
| 28 | }
 | 
| 29 | 
 | 
| 30 | # http://stackoverflow.com/questions/22769246/disassemble-one-function-using-objdump
 | 
| 31 | # It would be nice to disassemble a single function.
 | 
| 32 | 
 | 
| 33 | disassemble() {
 | 
| 34 |   local opt_flag=${1:-'-O0'}
 | 
| 35 |   local out=_tmp/typed_arith_demo$opt_flag.S 
 | 
| 36 |   $CLANGXX -std='c++11' $opt_flag -I _tmp -o $out -S \
 | 
| 37 |     -mllvm --x86-asm-syntax=intel asdl/typed_arith_demo.cc
 | 
| 38 |   #cat $out
 | 
| 39 | }
 | 
| 40 | 
 | 
| 41 | llvm() {
 | 
| 42 |   local opt_flag=${1:-'-O0'}
 | 
| 43 |   local out=_tmp/typed_arith_demo$opt_flag.ll 
 | 
| 44 |   $CLANGXX -std='c++11' $opt_flag -I _tmp -o $out -S \
 | 
| 45 |     -emit-llvm asdl/typed_arith_demo.cc
 | 
| 46 |   #cat $out
 | 
| 47 | }
 | 
| 48 | 
 | 
| 49 | # With -O0, you can see all the functions.  With -O2, they ARE inlined.
 | 
| 50 | objdump-arith() {
 | 
| 51 |   # NOTE: This doesn't take into account different optimization levels
 | 
| 52 |   objdump -d _tmp/typed_arith_demo | grep '^0'
 | 
| 53 | }
 | 
| 54 | # https://sourceware.org/ml/binutils/2010-04/msg00447.html
 | 
| 55 | # http://stackoverflow.com/questions/4274804/query-on-ffunction-section-fdata-sections-options-of-gcc
 | 
| 56 | # Hm you can force a function.  Write it inline with typed_arith_demo.cc then.
 | 
| 57 | 
 | 
| 58 | # TODO: Is there a pattern we can grep for to test if ANY accessor was NOT
 | 
| 59 | # inlined?  Demangle names I guess.
 | 
| 60 | nm-arith() {
 | 
| 61 |   nm _tmp/typed_arith_demo
 | 
| 62 | }
 | 
| 63 | 
 | 
| 64 | opt-stats() {
 | 
| 65 |   wc -l _tmp/*.S
 | 
| 66 |   echo
 | 
| 67 |   wc -l _tmp/*.ll
 | 
| 68 |   echo
 | 
| 69 |   md5sum _tmp/*.S
 | 
| 70 |   echo
 | 
| 71 |   md5sum _tmp/*.ll
 | 
| 72 | }
 | 
| 73 | 
 | 
| 74 | compare-opts() {
 | 
| 75 |   # http://stackoverflow.com/questions/15548023/clang-optimization-levels
 | 
| 76 |   # Says -Os is identical to -O2?  But not according to my test!
 | 
| 77 | 
 | 
| 78 |   for opt in -Os -O0 -O1 -O2 -O3 -O4; do
 | 
| 79 |     echo $opt
 | 
| 80 |     disassemble $opt
 | 
| 81 |     llvm $opt
 | 
| 82 |   done
 | 
| 83 |   opt-stats
 | 
| 84 | }
 | 
| 85 | 
 | 
| 86 | regress() {
 | 
| 87 |   bin/osh -n configure > _tmp/configure-tree-abbrev.txt
 | 
| 88 |   bin/osh --ast-format text -n configure > _tmp/configure-tree-full.txt
 | 
| 89 |   { wc -l _tmp/configure*.txt
 | 
| 90 |     md5sum _tmp/configure*.txt
 | 
| 91 |   } #| tee _tmp/gold.txt
 | 
| 92 | }
 | 
| 93 | 
 | 
| 94 | # To check if the lines go over 100 characters.
 | 
| 95 | line-length-hist() {
 | 
| 96 |   for f in _tmp/configure*.txt; do
 | 
| 97 |     echo $f
 | 
| 98 |     awk '{ print length($0) } ' $f | sort -n | uniq -c | tail 
 | 
| 99 |   done
 | 
| 100 | }
 | 
| 101 | 
 | 
| 102 | gen-cpp-errors() {
 | 
| 103 | 
 | 
| 104 |   # This doesn't produce an error, even though 'int?' isn't representable in C++
 | 
| 105 |   cat >_tmp/bad.asdl <<EOF
 | 
| 106 | module bad {
 | 
| 107 |   foo = (int? x, int y)
 | 
| 108 | }
 | 
| 109 | EOF
 | 
| 110 | 
 | 
| 111 |   asdl/asdl_main.py cpp _tmp/bad.asdl _tmp/asdl_bad
 | 
| 112 | 
 | 
| 113 |   ls -l _tmp/asdl_bad*
 | 
| 114 | }
 | 
| 115 | 
 | 
| 116 | "$@"
 |