From 9b586031db728929282b4702703f95a1cacbdb98 Mon Sep 17 00:00:00 2001 From: Masahiro Yamada Date: Tue, 5 Aug 2014 15:56:45 +0900 Subject: [PATCH] scripts: objdiff: sync with Linux 3.16 Import scripts/objdiff improvements from Linux v3.16, which consists of 7 commits written by me. commit 7fa0e6db3cedc9b70d68a4170f1352e2b1aa0f90 scripts: objdiff: support directories for the augument of record command commit 8ac28bee76eec006aac5ba5c418878a607d53a9b scripts: objdiff: fix a comment commit 8b5d0f20d64f00ffd5685879f8eb3659379f5aaa scripts: objdiff: change the extension of disassembly from .o to .dis commit 18165efa8203a34d82f60a1831ea290e7304c654 scripts: objdiff: improve path flexibility for record command commit 1ecc8e489abfdaa6d8d1689f7ff62fdf1adda30c scripts: objdiff: remove unnecessary code commit 5ab370e91af70d5f1b1dbaec78798a2ff236a2d5 scripts: objdiff: direct error messages to stderr commit fd6e12423311697860f30d10398a0f9eb91977d2 scripts: objdiff: get the path to .tmp_objdiff more simply Signed-off-by: Masahiro Yamada --- scripts/objdiff | 74 ++++++++++++++++++++++++++++++------------------- 1 file changed, 46 insertions(+), 28 deletions(-) diff --git a/scripts/objdiff b/scripts/objdiff index b3e4f10bfc..62e51dae21 100755 --- a/scripts/objdiff +++ b/scripts/objdiff @@ -25,25 +25,47 @@ # # Note: 'make mrproper' will also remove .tmp_objdiff -GIT_DIR="`git rev-parse --git-dir`" +SRCTREE=$(cd $(git rev-parse --show-toplevel 2>/dev/null); pwd) -if [ -d "$GIT_DIR" ]; then - TMPD="${GIT_DIR%git}tmp_objdiff" - - [ -d "$TMPD" ] || mkdir "$TMPD" -else - echo "ERROR: git directory not found." +if [ -z "$SRCTREE" ]; then + echo >&2 "ERROR: Not a git repository." exit 1 fi +TMPD=$SRCTREE/.tmp_objdiff + usage() { - echo "Usage: $0 " - echo " record " - echo " diff " - echo " clean all | " + echo >&2 "Usage: $0 " + echo >&2 " record " + echo >&2 " diff " + echo >&2 " clean all | " exit 1 } +get_output_dir() { + dir=${1%/*} + + if [ "$dir" = "$1" ]; then + dir=. + fi + + dir=$(cd $dir; pwd) + + echo $TMPD/$CMT${dir#$SRCTREE} +} + +do_objdump() { + dir=$(get_output_dir $1) + base=${1##*/} + dis=$dir/${base%.o}.dis + + [ ! -d "$dir" ] && mkdir -p $dir + + # remove addresses for a cleaner diff + # http://dummdida.tumblr.com/post/60924060451/binary-diff-between-libc-from-scientificlinux-and + $OBJDUMP -D $1 | sed "s/^[[:space:]]\+[0-9a-f]\+//" > $dis +} + dorecord() { [ $# -eq 0 ] && usage @@ -52,20 +74,16 @@ dorecord() { CMT="`git rev-parse --short HEAD`" OBJDUMP="${CROSS_COMPILE}objdump" - OBJDIFFD="$TMPD/$CMT" - - [ ! -d "$OBJDIFFD" ] && mkdir -p "$OBJDIFFD" - for f in $FILES; do - dn="${f%/*}" - bn="${f##*/}" - - [ ! -d "$OBJDIFFD/$dn" ] && mkdir -p "$OBJDIFFD/$dn" - - # remove addresses for a more clear diff - # http://dummdida.tumblr.com/post/60924060451/binary-diff-between-libc-from-scientificlinux-and - $OBJDUMP -D "$f" | sed "s/^[[:space:]]\+[0-9a-f]\+//" \ - >"$OBJDIFFD/$dn/$bn" + for d in $FILES; do + if [ -d "$d" ]; then + for f in $(find $d -name '*.o') + do + do_objdump $f + done + else + do_objdump $d + fi done } @@ -90,12 +108,12 @@ dodiff() { DSTD="$TMPD/$DST" if [ ! -d "$SRCD" ]; then - echo "ERROR: $SRCD doesn't exist" + echo >&2 "ERROR: $SRCD doesn't exist" exit 1 fi if [ ! -d "$DSTD" ]; then - echo "ERROR: $DSTD doesn't exist" + echo >&2 "ERROR: $DSTD doesn't exist" exit 1 fi @@ -114,7 +132,7 @@ doclean() { if [ -d "$TMPD/$CMT" ]; then rm -rf $TMPD/$CMT else - echo "$CMT not found" + echo >&2 "$CMT not found" fi fi } @@ -135,7 +153,7 @@ case "$1" in doclean $* ;; *) - echo "Unrecognized command '$1'" + echo >&2 "Unrecognized command '$1'" exit 1 ;; esac -- 2.30.2