| #!/usr/bin/env bash |
| |
| # Copyright 2016 The Go Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style |
| # license that can be found in the LICENSE file. |
| |
| # A simple script to compare differences between |
| # assembly listings for packages built with different |
| # compiler flags. It is useful to inspect the impact |
| # of a compiler change across all std lib packages. |
| # |
| # The script builds the std library (make.bash) once |
| # with FLAGS1 and once with FLAGS2 and compares the |
| # "go build <pkg>" assembly output for each package |
| # and lists the packages with differences. |
| # |
| # It leaves and old.txt and new.txt file in the package |
| # directories for the packages with differences. |
| |
| FLAGS1="-newexport=0" |
| FLAGS2="-newexport=1" |
| |
| echo |
| echo |
| echo "1a) clean build using $FLAGS1" |
| (export GO_GCFLAGS="$FLAGS1"; sh make.bash) |
| |
| echo |
| echo |
| echo "1b) save go build output for all packages" |
| for pkg in `go list std`; do |
| echo $pkg |
| DIR=$GOROOT/src/$pkg |
| go build -gcflags "$FLAGS1 -S" -o /dev/null $pkg &> $DIR/old.txt |
| done |
| |
| echo |
| echo |
| echo "2a) clean build using $FLAGS2" |
| (export GO_GCFLAGS="$FLAGS2"; sh make.bash) |
| |
| echo |
| echo |
| echo "2b) save go build output for all packages" |
| for pkg in `go list std`; do |
| echo $pkg |
| DIR=$GOROOT/src/$pkg |
| go build -gcflags "$FLAGS2 -S" -o /dev/null $pkg &> $DIR/new.txt |
| done |
| |
| echo |
| echo |
| echo "3) compare assembly files" |
| for pkg in `go list std`; do |
| DIR=$GOROOT/src/$pkg |
| |
| if cmp $DIR/old.txt $DIR/new.txt &> /dev/null |
| then rm $DIR/old.txt $DIR/new.txt |
| else echo "==> $DIR" |
| fi |
| done |