--- old/common/bin/compare-objects.sh 2014-11-04 11:33:30.309435939 +0100 +++ /dev/null 2014-10-31 08:56:53.031792005 +0100 @@ -1,235 +0,0 @@ -#!/bin/bash -# -# Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# MANUAL -# -# ./common/bin/compare-objects.sh old_jdk_build_dir new_jdk_build_dir -# -# Compares object files -# - -if [ "x$1" = "x-h" ] || [ "x$1" = "x--help" ] || [ "x$1" == "x" ]; then - echo "bash ./common/bin/compare-objects.sh old_jdk_build_dir new_jdk_build_dir " - echo "" - echo "Compare object files" - echo "" - exit 10 -fi - -####### -# -# List of files (grep patterns) that are ignored -# -# 1) hotspot object files -IGNORE="-e hotspot" - -# 2) various build artifacts: sizer.32.o sizer.64.o dummyodbc.o -# these are produced during build and then e.g run to produce other data -# i.e not directly put into build => safe to ignore -IGNORE="${IGNORE} -e sizer.32.o -e sizer.64.o" -IGNORE="${IGNORE} -e dummyodbc.o" -IGNORE="${IGNORE} -e genSolarisConstants.o" -IGNORE="${IGNORE} -e genUnixConstants.o" - -OLD="$1" -NEW="$2" -shift; shift -PATTERN="$*" - -if [ -f $NEW/spec.sh ]; then - . $NEW/spec.sh -elif [ -f $NEW/../../spec.sh ]; then - . $NEW/../../spec.sh -elif [ -f $OLD/spec.sh ]; then - . $OLD/spec.sh -elif [ -f $OLD/../../spec.sh ]; then - . $OLD/../../spec.sh -else - echo "Unable to find spec.sh" - echo "Giving up" - exit 1 -fi - -export COMPARE_ROOT=/tmp/cimages.$USER/objects -mkdir -p $COMPARE_ROOT - -(${CD} $OLD && ${FIND} . -name '*.o') > $COMPARE_ROOT/list.old -(${CD} $NEW && ${FIND} . -name '*.o') > $COMPARE_ROOT/list.new - -# On macosx JobjC is build in both i386 and x86_64 variant (universial binary) -# but new build only builds the x86_64 -# Remove the 386 variants from comparison...to avoid "false" positives -${GREP} -v 'JObjC.dst/Objects-normal/i386' $COMPARE_ROOT/list.old > $COMPARE_ROOT/list.old.new -${CP} $COMPARE_ROOT/list.old $COMPARE_ROOT/list.old.full -${CP} $COMPARE_ROOT/list.old.new $COMPARE_ROOT/list.old - -findnew() { - arg_1=$1 - arg_2=$2 - - # special case 1 unpack-cmd => unpackexe - arg_1=`${ECHO} $arg_1 | ${SED} 's!unpack-cmd!unpackexe!g'` - arg_2=`${ECHO} $arg_2 | ${SED} 's!unpack-cmd!unpackexe!g'` - - # special case 2 /JObjC.dst/ => /libjobjc/ - arg_1=`${ECHO} $arg_1 | ${SED} 's!/JObjC.dst/!/libjobjc/!g'` - arg_2=`${ECHO} $arg_2 | ${SED} 's!/JObjC.dst/!/libjobjc/!g'` - - full=`${ECHO} $arg_1 | ${SED} 's!\.!\\\.!g'` - medium=`${ECHO} $arg_1 | ${SED} 's!.*/\([^/]*/[^/]*\)!\1!'` - short=`${ECHO} $arg_2 | ${SED} 's!\.!\\\.!g'` - if [ "`${GREP} -c "/$full" $COMPARE_ROOT/list.new`" -eq 1 ] - then - ${ECHO} $NEW/$arg_1 - return - fi - - if [ "`${GREP} -c "$medium" $COMPARE_ROOT/list.new`" -eq 1 ] - then - ${GREP} "$medium" $COMPARE_ROOT/list.new - return - fi - - if [ "`${GREP} -c "/$short" $COMPARE_ROOT/list.new`" -eq 1 ] - then - ${GREP} "/$short" $COMPARE_ROOT/list.new - return - fi - - # old style has "dir" before obj{64} - dir=`${ECHO} $arg_1 | ${SED} 's!.*/\([^/]*\)/obj[64]*.*!\1!g'` - if [ -n "$dir" -a "$dir" != "$arg_1" ] - then - if [ "`${GREP} $dir $COMPARE_ROOT/list.new | ${GREP} -c "/$short"`" -eq 1 ] - then - ${GREP} $dir $COMPARE_ROOT/list.new | ${GREP} "/$short" - return - fi - - # Try with lib$dir/ - if [ "`${GREP} "lib$dir/" $COMPARE_ROOT/list.new | ${GREP} -c "/$short"`" -eq 1 ] - then - ${GREP} "lib$dir/" $COMPARE_ROOT/list.new | ${GREP} "/$short" - return - fi - - # Try with $dir_objs - if [ "`${GREP} "${dir}_objs" $COMPARE_ROOT/list.new | ${GREP} -c "/$short"`" -eq 1 ] - then - ${GREP} "${dir}_objs" $COMPARE_ROOT/list.new | ${GREP} "/$short" - return - fi - fi - - # check for some specifics... - for i in demo hotspot jobjc - do - if [ "`${ECHO} $full | ${GREP} -c $i`" -gt 0 ] - then - if [ "`${GREP} $i $COMPARE_ROOT/list.new | ${GREP} -c "/$short"`" -eq 1 ] - then - ${GREP} $i $COMPARE_ROOT/list.new | ${GREP} "/$short" - return - fi - fi - done - - # check for specific demo - demo=`${ECHO} $arg_1 | ${SED} 's!.*/demo/jvmti/\([^/]*\)/.*!\1!g'` - if [ -n "$demo" -a "$dir" != "$demo" ] - then - if [ "`${GREP} $demo $COMPARE_ROOT/list.new | ${GREP} -c "/$short"`" -eq 1 ] - then - ${GREP} $demo $COMPARE_ROOT/list.new | ${GREP} "/$short" - return - fi - fi - - return -} - -compare() { - old=$1 - new=$2 - ${DIFF} $old $new > /dev/null - res=$? - if [ $res -eq 0 ] - then - ${ECHO} 0 - return - fi - - # check if stripped objects gives equality - ${CP} $old $COMPARE_ROOT/`basename $old`.old - ${CP} $new $COMPARE_ROOT/`basename $old`.new - ${POST_STRIP_CMD} $COMPARE_ROOT/`basename $old`.old $COMPARE_ROOT/`basename $old`.new > /dev/null 2>&1 - ${DIFF} $COMPARE_ROOT/`basename $old`.old $COMPARE_ROOT/`basename $old`.new > /dev/null - res=$? - ${RM} $COMPARE_ROOT/`basename $old`.old $COMPARE_ROOT/`basename $old`.new - if [ $res -eq 0 ] - then - ${ECHO} S - return - fi - - name=`basename $1 | ${SED} 's!\.o!!'` - cntold=`strings $old | ${GREP} -c $name` - cntnew=`strings $new | ${GREP} -c $name` - - if [ $cntold -gt 0 -a $cntnew -gt 0 ] - then - ${ECHO} F - return - fi - - ${ECHO} 1 -} - -for F in `${CAT} $COMPARE_ROOT/list.old` -do - if [ "${IGNORE}" ] && [ "`${ECHO} $F | ${GREP} ${IGNORE}`" ] - then - # - # skip ignored files - # - continue; - fi - - if [ "$PATTERN" ] && [ `${ECHO} $F | ${GREP} -c $PATTERN` -eq 0 ] - then - continue; - fi - - f=`basename $F` - o=$OLD/$F - n=`findnew $F $f` - - if [ "$n" ] - then - n="$NEW/$n" - ${ECHO} `compare $o $n` : $f : $o : $n - else - ${ECHO} "- : $f : $o " - fi -done