diff options
| author | Wolfram Sang <wsa@the-dreams.de> | 2014-06-17 08:36:41 -0400 |
|---|---|---|
| committer | Wolfram Sang <wsa@the-dreams.de> | 2014-06-17 08:37:31 -0400 |
| commit | f0b1f6442b5090fed3529cb39f3acf8c91693d3d (patch) | |
| tree | bc5f62b017a82161c9a7f892f464813f6efd5bf3 /scripts/objdiff | |
| parent | 4632a93f015caf6d7db4352f37aab74a39e60d7a (diff) | |
| parent | 7171511eaec5bf23fb06078f59784a3a0626b38f (diff) | |
Merge tag 'v3.16-rc1' into i2c/for-next
Merge a stable base (Linux 3.16-rc1)
Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
Diffstat (limited to 'scripts/objdiff')
| -rwxr-xr-x | scripts/objdiff | 74 |
1 files changed, 46 insertions, 28 deletions
diff --git a/scripts/objdiff b/scripts/objdiff index b3e4f10bfc3e..62e51dae2138 100755 --- a/scripts/objdiff +++ b/scripts/objdiff | |||
| @@ -25,25 +25,47 @@ | |||
| 25 | # | 25 | # |
| 26 | # Note: 'make mrproper' will also remove .tmp_objdiff | 26 | # Note: 'make mrproper' will also remove .tmp_objdiff |
| 27 | 27 | ||
| 28 | GIT_DIR="`git rev-parse --git-dir`" | 28 | SRCTREE=$(cd $(git rev-parse --show-toplevel 2>/dev/null); pwd) |
| 29 | 29 | ||
| 30 | if [ -d "$GIT_DIR" ]; then | 30 | if [ -z "$SRCTREE" ]; then |
| 31 | TMPD="${GIT_DIR%git}tmp_objdiff" | 31 | echo >&2 "ERROR: Not a git repository." |
| 32 | |||
| 33 | [ -d "$TMPD" ] || mkdir "$TMPD" | ||
| 34 | else | ||
| 35 | echo "ERROR: git directory not found." | ||
| 36 | exit 1 | 32 | exit 1 |
| 37 | fi | 33 | fi |
| 38 | 34 | ||
| 35 | TMPD=$SRCTREE/.tmp_objdiff | ||
| 36 | |||
| 39 | usage() { | 37 | usage() { |
| 40 | echo "Usage: $0 <command> <args>" | 38 | echo >&2 "Usage: $0 <command> <args>" |
| 41 | echo " record <list of object files>" | 39 | echo >&2 " record <list of object files or directories>" |
| 42 | echo " diff <commitA> <commitB>" | 40 | echo >&2 " diff <commitA> <commitB>" |
| 43 | echo " clean all | <commit>" | 41 | echo >&2 " clean all | <commit>" |
| 44 | exit 1 | 42 | exit 1 |
| 45 | } | 43 | } |
| 46 | 44 | ||
| 45 | get_output_dir() { | ||
| 46 | dir=${1%/*} | ||
| 47 | |||
| 48 | if [ "$dir" = "$1" ]; then | ||
| 49 | dir=. | ||
| 50 | fi | ||
| 51 | |||
| 52 | dir=$(cd $dir; pwd) | ||
| 53 | |||
| 54 | echo $TMPD/$CMT${dir#$SRCTREE} | ||
| 55 | } | ||
| 56 | |||
| 57 | do_objdump() { | ||
| 58 | dir=$(get_output_dir $1) | ||
| 59 | base=${1##*/} | ||
| 60 | dis=$dir/${base%.o}.dis | ||
| 61 | |||
| 62 | [ ! -d "$dir" ] && mkdir -p $dir | ||
| 63 | |||
| 64 | # remove addresses for a cleaner diff | ||
| 65 | # http://dummdida.tumblr.com/post/60924060451/binary-diff-between-libc-from-scientificlinux-and | ||
| 66 | $OBJDUMP -D $1 | sed "s/^[[:space:]]\+[0-9a-f]\+//" > $dis | ||
| 67 | } | ||
| 68 | |||
| 47 | dorecord() { | 69 | dorecord() { |
| 48 | [ $# -eq 0 ] && usage | 70 | [ $# -eq 0 ] && usage |
| 49 | 71 | ||
| @@ -52,20 +74,16 @@ dorecord() { | |||
| 52 | CMT="`git rev-parse --short HEAD`" | 74 | CMT="`git rev-parse --short HEAD`" |
| 53 | 75 | ||
| 54 | OBJDUMP="${CROSS_COMPILE}objdump" | 76 | OBJDUMP="${CROSS_COMPILE}objdump" |
| 55 | OBJDIFFD="$TMPD/$CMT" | ||
| 56 | |||
| 57 | [ ! -d "$OBJDIFFD" ] && mkdir -p "$OBJDIFFD" | ||
| 58 | 77 | ||
| 59 | for f in $FILES; do | 78 | for d in $FILES; do |
| 60 | dn="${f%/*}" | 79 | if [ -d "$d" ]; then |
| 61 | bn="${f##*/}" | 80 | for f in $(find $d -name '*.o') |
| 62 | 81 | do | |
| 63 | [ ! -d "$OBJDIFFD/$dn" ] && mkdir -p "$OBJDIFFD/$dn" | 82 | do_objdump $f |
| 64 | 83 | done | |
| 65 | # remove addresses for a more clear diff | 84 | else |
| 66 | # http://dummdida.tumblr.com/post/60924060451/binary-diff-between-libc-from-scientificlinux-and | 85 | do_objdump $d |
| 67 | $OBJDUMP -D "$f" | sed "s/^[[:space:]]\+[0-9a-f]\+//" \ | 86 | fi |
| 68 | >"$OBJDIFFD/$dn/$bn" | ||
| 69 | done | 87 | done |
| 70 | } | 88 | } |
| 71 | 89 | ||
| @@ -90,12 +108,12 @@ dodiff() { | |||
| 90 | DSTD="$TMPD/$DST" | 108 | DSTD="$TMPD/$DST" |
| 91 | 109 | ||
| 92 | if [ ! -d "$SRCD" ]; then | 110 | if [ ! -d "$SRCD" ]; then |
| 93 | echo "ERROR: $SRCD doesn't exist" | 111 | echo >&2 "ERROR: $SRCD doesn't exist" |
| 94 | exit 1 | 112 | exit 1 |
| 95 | fi | 113 | fi |
| 96 | 114 | ||
| 97 | if [ ! -d "$DSTD" ]; then | 115 | if [ ! -d "$DSTD" ]; then |
| 98 | echo "ERROR: $DSTD doesn't exist" | 116 | echo >&2 "ERROR: $DSTD doesn't exist" |
| 99 | exit 1 | 117 | exit 1 |
| 100 | fi | 118 | fi |
| 101 | 119 | ||
| @@ -114,7 +132,7 @@ doclean() { | |||
| 114 | if [ -d "$TMPD/$CMT" ]; then | 132 | if [ -d "$TMPD/$CMT" ]; then |
| 115 | rm -rf $TMPD/$CMT | 133 | rm -rf $TMPD/$CMT |
| 116 | else | 134 | else |
| 117 | echo "$CMT not found" | 135 | echo >&2 "$CMT not found" |
| 118 | fi | 136 | fi |
| 119 | fi | 137 | fi |
| 120 | } | 138 | } |
| @@ -135,7 +153,7 @@ case "$1" in | |||
| 135 | doclean $* | 153 | doclean $* |
| 136 | ;; | 154 | ;; |
| 137 | *) | 155 | *) |
| 138 | echo "Unrecognized command '$1'" | 156 | echo >&2 "Unrecognized command '$1'" |
| 139 | exit 1 | 157 | exit 1 |
| 140 | ;; | 158 | ;; |
| 141 | esac | 159 | esac |
