#!/bin/bash # SPDX-License-Identifier: GPL-2.0-only # objdiff - a small script for validating that a commit or series of commits # didn't change object code. # # Copyright 2014, Jason Cooper # # usage example: # # $ git checkout COMMIT_A # $ # $ ./scripts/objdiff record path/to/*.o # # $ git checkout COMMIT_B # $ # $ ./scripts/objdiff record path/to/*.o # # $ ./scripts/objdiff diff COMMIT_A COMMIT_B # $ # And to clean up (everything is in .objdiff/*) # $ ./scripts/objdiff clean all # # Note: 'make mrproper' will also remove .objdiff SRCTREE=$(cd $(git rev-parse --show-toplevel 2>/dev/null); pwd) if [ -z "$SRCTREE" ]; then echo >&2 "ERROR: Not a git repository." exit 1 fi TMPD=$SRCTREE/.objdiff usage() { 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##*/} stripped=$dir/${base%.o}.stripped 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 $STRIP -g $1 -R __bug_table -R .note -R .comment -o $stripped $OBJDUMP -D $stripped | sed -e "s/^[[:space:]]\+[0-9a-f]\+//" -e "s:^$stripped:$1:" > $dis } dorecord() { [ $# -eq 0 ] && usage FILES="$*" CMT="`git rev-parse --short HEAD`" STRIP="${CROSS_COMPILE}strip" OBJDUMP="${CROSS_COMPILE}objdump" 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 } dodiff() { [ $# -ne 2 ] && [ $# -ne 0 ] && usage if [ $# -eq 0 ]; then SRC="`git rev-parse --short HEAD^`" DST="`git rev-parse --short HEAD`" else SRC="`git rev-parse --short $1`" DST="`git rev-parse --short $2`" fi DIFF="`which colordiff`" if [ ${#DIFF} -eq 0 ] || [ ! -x "$DIFF" ]; then DIFF="`which diff`" fi SRCD="$TMPD/$SRC" DSTD="$TMPD/$DST" if [ ! -d "$SRCD" ]; then echo >&2 "ERROR: $SRCD doesn't exist" exit 1 fi if [ ! -d "$DSTD" ]; then echo >&2 "ERROR: $DSTD doesn't exist" exit 1 fi $DIFF -Nurd $SRCD $DSTD } doclean() { [ $# -eq 0 ] && usage [ $# -gt 1 ] && usage if [ "x$1" = "xall" ]; then rm -rf $TMPD/* else CMT="`git rev-parse --short $1`" if [ -d "$TMPD/$CMT" ]; then rm -rf $TMPD/$CMT else echo >&2 "$CMT not found" fi fi } [ $# -eq 0 ] && usage case "$1" in record) shift dorecord $* ;; diff) shift dodiff $* ;; clean) shift doclean $* ;; *) echo >&2 "Unrecognized command '$1'" exit 1 ;; esac y Hosts the 0x221E linux distro kernel.Ubuntu
summaryrefslogtreecommitdiff
AgeCommit message (Expand)Author
2013-12-04perf tools: Add trace-event objectJiri Olsa
2013-10-09perf tools: Remove unused trace-event-* codeJiri Olsa
2013-09-19perf tools: Fix old GCC build error in trace-event-parse.c:parse_proc_kallsyms()Ingo Molnar
2013-07-12perf script: Adopt latency_format variableNamhyung Kim
2013-07-12perf util: Get rid of unused header_page_* variablesNamhyung Kim
2013-03-15perf tools: Remove unused tracing functionsDavid Ahern
2012-09-24perf tools: remove sscanf extension %asIrina Tirdea
2012-09-11perf tools: Use __maybe_used for unused variablesIrina Tirdea
2012-08-14perf script: Fix a NULL pointer dereferenceNamhyung Kim
2012-08-07perf script: Stop using pevent directlyArnaldo Carvalho de Melo
2012-08-07perf evsel: Cache associated event_formatArnaldo Carvalho de Melo
2012-07-18Merge branch 'linus' into perf/coreIngo Molnar
2012-07-02perf script: Fix format regression due to libtraceevent mergeDavid Ahern
2012-06-27perf tools: Stop using a global trace events description listArnaldo Carvalho de Melo
2012-04-25parse-events: Rename struct record to struct pevent_recordSteven Rostedt
2012-04-25perf/events: Add flag to produce nsec outputSteven Rostedt
2012-04-25perf: Have perf use the new libtraceevent.a librarySteven Rostedt
2012-04-25perf: Separate out trace-cmd parse-events from perf filesSteven Rostedt
2012-03-22perf tools: Simplify event_read_id exit pathBorislav Petkov
2012-02-17perf tools: Allow expressions in __print_symbolic() fieldsStefan Hajnoczi
2012-01-30perf tools: Remove unnecessary ctype.h inclusionNamhyung Kim
2012-01-24perf tools: Fix broken build by defining _GNU_SOURCE in MakefileDavid Daney
2011-11-07perf: Fix parsing of __print_flags() in TP_printk()Steven Rostedt
2011-06-14rcu: Use softirq to address performance regressionShaohua Li
2011-05-05rcu: move TREE_RCU from softirq to kthreadPaul E. McKenney
2011-03-14perf script: Move printing of 'common' data from print_event and renameDavid Ahern
2011-03-14perf tracing: Remove print_graph_cpu and print_graph_proc from trace-event-parseDavid Ahern
2011-02-07perf tool: Fix gcc 4.6.0 issuesKyle McMartin
2010-05-18Merge branch 'perf-core-for-linus' of git://git.kernel.org/pub/scm/linux/kern...Linus Torvalds
2010-05-11perf: Fix static strings treated like dynamic onesFrederic Weisbecker
2010-05-01perf: Fix warning while reading ring buffer headersFrederic Weisbecker