Quellcodebibliothek Statistik Leitseite products/sources/formale Sprachen/C/Linux/scripts/   (Open Source Betriebssystem Version 6.17.9©)  Datei vom 24.10.2025 mit Größe 2 kB image not shown  

Quelle  objdiff   Sprache: Shell

 
#!/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 <jason@lakedaemon.net>
#

# usage example:
#
# $ git checkout COMMIT_A
# $ <your fancy build command here>
# $ ./scripts/objdiff record path/to/*.o
#
# $ git checkout COMMIT_B
# $ <your fancy build command here>
# $ ./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 <command> <args>"
 echo >&2 "  record    <list of object files or directories>"
 echo >&2 "  diff      <commitA> <commitB>"
 echo >&2 "  clean     all | <commit>"
 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

¤ Dauer der Verarbeitung: 0.18 Sekunden  (vorverarbeitet)  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung ist noch experimentell.