scripts: objdiff: improve path flexibility for record command
authorMasahiro Yamada <yamada.m@jp.panasonic.com>
Mon, 9 Jun 2014 02:16:37 +0000 (11:16 +0900)
committerMichal Marek <mmarek@suse.cz>
Tue, 10 Jun 2014 12:59:33 +0000 (14:59 +0200)
Prior to this commit, scripts/objdiff expected to be run at the top
directory and only the relative path of objects.

This commit provides more flexibility in terms of object path:

[1] scripts/objdiff can be run in any directory

For example,

  $ scripts/objdiff record init/main.o

and

  $ cd init; ../scripts/objdiff record main.o

produce the same result.

[2] Support absolute path for objects

  $ scripts/objdiff record /home/foo/bar/linux/init/main.o

work as well.

Signed-off-by: Masahiro Yamada <yamada.m@jp.panasonic.com>
Acked-by: Jason Cooper <jason@lakedaemon.net>
Signed-off-by: Michal Marek <mmarek@suse.cz>
scripts/objdiff

index 6e72f9645983fde612e9d4bcd8e657f7228b2b5b..499eb4bc1e8daed28474c4fbe68a66aea6a645d7 100755 (executable)
@@ -25,7 +25,7 @@
 #
 # Note: 'make mrproper' will also remove .tmp_objdiff
 
-SRCTREE=$(git rev-parse --show-toplevel 2>/dev/null)
+SRCTREE=$(cd $(git rev-parse --show-toplevel 2>/dev/null); pwd)
 
 if [ -z "$SRCTREE" ]; then
        echo >&2 "ERROR: Not a git repository."
@@ -42,6 +42,18 @@ usage() {
        exit 1
 }
 
+get_output_dir() {
+       dir=${1%/*}
+
+       if [ "$dir" = "$1" ]; then
+               dir=.
+       fi
+
+       dir=$(cd $dir; pwd)
+
+       echo $TMPD/$CMT${dir#$SRCTREE}
+}
+
 dorecord() {
        [ $# -eq 0 ] && usage
 
@@ -50,18 +62,16 @@ dorecord() {
        CMT="`git rev-parse --short HEAD`"
 
        OBJDUMP="${CROSS_COMPILE}objdump"
-       OBJDIFFD="$TMPD/$CMT"
 
        for f in $FILES; do
-               dn="${f%/*}"
+               dir=$(get_output_dir $f)
                bn="${f##*/}"
 
-               [ ! -d "$OBJDIFFD/$dn" ] && mkdir -p "$OBJDIFFD/$dn"
+               [ ! -d "$dir" ] && mkdir -p $dir
 
                # 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"
+               $OBJDUMP -D $f | sed "s/^[[:space:]]\+[0-9a-f]\+//" > $dir/$bn
        done
 }