< prev index next >

make/scripts/compare.sh

Print this page
rev 59383 : [mq]: final


  55 else
  56     FULLDUMP_CMD="$READELF -a"
  57     LDD_CMD="$LDD"
  58     DIS_CMD="$OBJDUMP -d"
  59     STAT_PRINT_SIZE="-c %s"
  60 fi
  61 
  62 COMPARE_EXCEPTIONS_INCLUDE="$TOPDIR/make/scripts/compare_exceptions.sh.incl"
  63 if [ ! -e "$COMPARE_EXCEPTIONS_INCLUDE" ]; then
  64     echo "Error: Cannot locate the exceptions file, it should have been here: $COMPARE_EXCEPTIONS_INCLUDE"
  65     exit 1
  66 fi
  67 # Include exception definitions
  68 . "$COMPARE_EXCEPTIONS_INCLUDE"
  69 
  70 ################################################################################
  71 #
  72 # Disassembly diff filters. These filters try to filter out ephemeral parts of the
  73 # disassembly, such as hard-coded addresses, to be able to catch "actual" differences.
  74 
  75 if [ "$OPENJDK_TARGET_OS" = "solaris" ]; then
  76   if [ "$OPENJDK_TARGET_CPU" = "sparcv9" ]; then
  77     DIS_DIFF_FILTER="$SED \
  78         -e 's/^[0-9a-f]\{16\}/<ADDR>:/' \
  79         -e 's/^ *[0-9a-f]\{3,12\}:/  <ADDR>:/' \
  80         -e 's/: [0-9a-f][0-9a-f]\( [0-9a-f][0-9a-f]\)\{2,10\}/: <NUMS>/' \
  81         -e 's/\$[a-zA-Z0-9_\$]\{15\}\./<SYM>./' \
  82         -e 's/, [0-9a-fx\-]\{1,8\}/, <ADDR>/g' \
  83         -e 's/0x[0-9a-f]\{1,8\}/<HEX>/g' \
  84         -e 's/\! [0-9a-f]\{1,8\} /! <ADDR> /' \
  85         -e 's/call  [0-9a-f]\{4,7\}/call  <ADDR>/' \
  86         -e 's/%hi(0),/%hi(<HEX>),/' \
  87         "
  88   elif [ "$OPENJDK_TARGET_CPU" = "x86_64" ]; then
  89     # Random strings looking like this differ: <.XAKoKoPIac2W0OA.
  90     DIS_DIFF_FILTER="$SED \
  91         -e 's/<\.[A-Za-z0-9]\{\15}\./<.SYM./' \
  92         "
  93   fi
  94 elif [ "$OPENJDK_TARGET_OS" = "windows" ]; then
  95   if [ "$OPENJDK_TARGET_CPU" = "x86" ]; then
  96     DIS_DIFF_FILTER="$SED -r \
  97         -e 's/^  [0-9A-F]{16}: //' \
  98         -e 's/^  [0-9A-F]{8}: /  <ADDR>: /' \
  99         -e 's/(offset \?\?)_C@_.*/\1<SYM>/' \
 100         -e 's/[@?][A-Za-z0-9_]{1,25}/<SYM>/' \
 101         -e 's/([-,+])[0-9A-F]{2,16}/\1<HEXSTR>/g' \
 102         -e 's/\[[0-9A-F]{4,16}h\]/[<HEXSTR>]/' \
 103         -e 's/: ([a-z]{2}[a-z ]{2})        [0-9A-F]{2,16}h?$/: \1        <HEXSTR>/' \
 104         -e 's/_20[0-9]{2}_[0-1][0-9]_[0-9]{2}/_<DATE>/' \
 105         "
 106   elif [ "$OPENJDK_TARGET_CPU" = "x86_64" ]; then
 107     DIS_DIFF_FILTER="$SED -r \
 108         -e 's/^  [0-9A-F]{16}: //' \
 109         -e 's/\[[0-9A-F]{4,16}h\]/[<HEXSTR>]/' \
 110         -e 's/([,+])[0-9A-F]{2,16}h/\1<HEXSTR>/' \
 111         -e 's/([a-z]{2}[a-z ]{2})        [0-9A-F]{4,16}$/\1        <HEXSTR>/' \
 112         -e 's/\[\?\?_C@_.*/[<SYM>]/' \
 113         "
 114   fi


 441     $MKDIR -p $THIS_UNZIPDIR
 442     $MKDIR -p $OTHER_UNZIPDIR
 443     if [ "$TYPE" = "jar" -o "$TYPE" = "war" -o "$TYPE" = "zip" ]
 444     then
 445         (cd $THIS_UNZIPDIR && $UNARCHIVE $THIS_ZIP)
 446         (cd $OTHER_UNZIPDIR && $UNARCHIVE $OTHER_ZIP)
 447     elif [ "$TYPE" = "gz" ]
 448     then
 449         (cd $THIS_UNZIPDIR && $GUNZIP -c $THIS_ZIP | $TAR xf -)
 450         (cd $OTHER_UNZIPDIR && $GUNZIP -c $OTHER_ZIP | $TAR xf -)
 451     elif [ "$TYPE" = "jmod" ]
 452     then
 453         (cd $THIS_UNZIPDIR && $JMOD extract $THIS_ZIP)
 454         (cd $OTHER_UNZIPDIR && $JMOD extract $OTHER_ZIP)
 455     else
 456         (cd $THIS_UNZIPDIR && $JIMAGE extract $THIS_ZIP)
 457         (cd $OTHER_UNZIPDIR && $JIMAGE extract $OTHER_ZIP)
 458     fi
 459 
 460     CONTENTS_DIFF_FILE=$WORK_DIR/$ZIP_FILE.diff
 461     # On solaris, there is no -q option.
 462     if [ "$OPENJDK_TARGET_OS" = "solaris" ]; then
 463         $DIFF -r $OTHER_UNZIPDIR $THIS_UNZIPDIR \
 464             | $GREP -v -e "^<" -e "^>" -e "^Common subdirectories:" \
 465             > $CONTENTS_DIFF_FILE
 466     else
 467         $DIFF -rq $OTHER_UNZIPDIR $THIS_UNZIPDIR > $CONTENTS_DIFF_FILE
 468     fi
 469 
 470     ONLY_OTHER=$($GREP "^Only in $OTHER_UNZIPDIR" $CONTENTS_DIFF_FILE)
 471     ONLY_THIS=$($GREP "^Only in $THIS_UNZIPDIR" $CONTENTS_DIFF_FILE)
 472 
 473     return_value=0
 474 
 475     if [ -n "$ONLY_OTHER" ]; then
 476         echo "        Only OTHER $ZIP_FILE contains:"
 477         echo "$ONLY_OTHER" | sed "s|Only in $OTHER_UNZIPDIR|            |"g | sed 's|: |/|g'
 478         return_value=1
 479     fi
 480 
 481     if [ -n "$ONLY_THIS" ]; then
 482         echo "        Only THIS $ZIP_FILE contains:"
 483         echo "$ONLY_THIS" | sed "s|Only in $THIS_UNZIPDIR|            |"g | sed 's|: |/|g'
 484         return_value=1
 485     fi
 486 
 487     if [ "$CMP_ZIPS_CONTENTS" = "true" ]; then
 488         if [ "$OPENJDK_TARGET_OS" = "solaris" ]; then
 489             DIFFING_FILES=$($GREP -e 'differ$' -e '^diff ' $CONTENTS_DIFF_FILE \
 490                 | $SED -e 's/^Files //g' -e 's/diff -r //g' | $CUT -f 1 -d ' ' \
 491                 | $SED "s|$OTHER_UNZIPDIR/||g")
 492         else
 493             DIFFING_FILES=$($GREP -e "differ$" $CONTENTS_DIFF_FILE \
 494                 | $CUT -f 2 -d ' ' | $SED "s|$OTHER_UNZIPDIR/||g")
 495         fi
 496 
 497         # Separate executable/library files from other files in zip.
 498         DIFFING_TEXT_FILES=
 499         DIFFING_EXEC_FILES=
 500         for file in $DIFFING_FILES; do
 501             SUFFIX="${file##*.}"
 502             if [ "$SUFFIX" = "exe" -o "$SUFFIX" = "dll" -o "$SUFFIX" = "so" \
 503                  -o "$SUFFIX" = "dylib" ]; then
 504                 DIFFING_EXEC_FILES="$DIFFING_EXEC_FILES $file"
 505             else
 506                 DIFFING_TEXT_FILES="$DIFFING_TEXT_FILES $file"
 507             fi
 508         done
 509 
 510         $RM -f $WORK_DIR/$ZIP_FILE.diffs
 511         for file in $DIFFING_TEXT_FILES; do
 512             if [[ "$ACCEPTED_JARZIP_CONTENTS $EXCEPTIONS" != *"$file"* ]]; then
 513                 diff_text $OTHER_UNZIPDIR/$file $THIS_UNZIPDIR/$file >> $WORK_DIR/$ZIP_FILE.diffs
 514             fi
 515         done


 812     if [ "$SORT_ALL_SYMBOLS" = "true" ] || [[ "$SORT_SYMBOLS" = *"$BIN_FILE"* ]]; then
 813         SYM_SORT_CMD="sort"
 814     else
 815         SYM_SORT_CMD="cat"
 816     fi
 817 
 818     if [ -n "$SYMBOLS_DIFF_FILTER" ] && [ -z "$NEED_SYMBOLS_DIFF_FILTER" ] \
 819             || [[ "$NEED_SYMBOLS_DIFF_FILTER" = *"$BIN_FILE"* ]]; then
 820         this_SYMBOLS_DIFF_FILTER="$SYMBOLS_DIFF_FILTER"
 821     else
 822         this_SYMBOLS_DIFF_FILTER="$CAT"
 823     fi
 824 
 825     # Check symbols
 826     if [ "$OPENJDK_TARGET_OS" = "windows" ]; then
 827         # The output from dumpbin on windows differs depending on if the debug symbol
 828         # files are still around at the location the binary is pointing too. Need
 829         # to filter out that extra information.
 830         $DUMPBIN -exports $OTHER_FILE | $GREP  -E '^ +[0-9A-F]+ +[0-9A-F]+ [0-9A-F]+' | sed 's/ = .*//g' | cut -c27- | $SYM_SORT_CMD > $WORK_FILE_BASE.symbols.other
 831         $DUMPBIN -exports $THIS_FILE  | $GREP  -E '^ +[0-9A-F]+ +[0-9A-F]+ [0-9A-F]+' | sed 's/ = .*//g' | cut -c27- | $SYM_SORT_CMD > $WORK_FILE_BASE.symbols.this
 832     elif [ "$OPENJDK_TARGET_OS" = "solaris" ]; then
 833         # Some symbols get seemingly random 15 character prefixes. Filter them out.
 834         $NM -a $ORIG_OTHER_FILE 2> /dev/null | $GREP -v $NAME | $AWK '{print $2, $3, $4, $5}' | $SED 's/^\([a-zA-Z] [\.\$]\)[a-zA-Z0-9_\$]\{15,15\}\./\1./g' | $SYM_SORT_CMD > $WORK_FILE_BASE.symbols.other
 835         $NM -a $ORIG_THIS_FILE  2> /dev/null | $GREP -v $NAME | $AWK '{print $2, $3, $4, $5}' | $SED 's/^\([a-zA-Z] [\.\$]\)[a-zA-Z0-9_\$]\{15,15\}\./\1./g' | $SYM_SORT_CMD > $WORK_FILE_BASE.symbols.this
 836     elif [ "$OPENJDK_TARGET_OS" = "aix" ]; then
 837         $OBJDUMP -T $ORIG_OTHER_FILE 2> /dev/null | $GREP -v $NAME | $AWK '{print $2, $3, $4, $5}' | $SYM_SORT_CMD > $WORK_FILE_BASE.symbols.other
 838         $OBJDUMP -T $ORIG_THIS_FILE  2> /dev/null | $GREP -v $NAME | $AWK '{print $2, $3, $4, $5}' | $SYM_SORT_CMD > $WORK_FILE_BASE.symbols.this
 839     elif [ "$OPENJDK_TARGET_OS" = "macosx" ]; then
 840         $NM -j $ORIG_OTHER_FILE 2> /dev/null | $SYM_SORT_CMD > $WORK_FILE_BASE.symbols.other
 841         $NM -j $ORIG_THIS_FILE  2> /dev/null | $SYM_SORT_CMD > $WORK_FILE_BASE.symbols.this
 842     else
 843         $NM -a $ORIG_OTHER_FILE 2> /dev/null | $GREP -v $NAME \
 844             | $AWK '{print $2, $3, $4, $5}' \
 845             | eval "$this_SYMBOLS_DIFF_FILTER" \
 846             | $SYM_SORT_CMD \
 847             > $WORK_FILE_BASE.symbols.other
 848         $NM -a $ORIG_THIS_FILE  2> /dev/null | $GREP -v $NAME \
 849             | $AWK '{print $2, $3, $4, $5}' \
 850             | eval "$this_SYMBOLS_DIFF_FILTER" \
 851             | $SYM_SORT_CMD \
 852             > $WORK_FILE_BASE.symbols.this
 853     fi
 854 
 855     $DIFF $WORK_FILE_BASE.symbols.other $WORK_FILE_BASE.symbols.this > $WORK_FILE_BASE.symbols.diff




  55 else
  56     FULLDUMP_CMD="$READELF -a"
  57     LDD_CMD="$LDD"
  58     DIS_CMD="$OBJDUMP -d"
  59     STAT_PRINT_SIZE="-c %s"
  60 fi
  61 
  62 COMPARE_EXCEPTIONS_INCLUDE="$TOPDIR/make/scripts/compare_exceptions.sh.incl"
  63 if [ ! -e "$COMPARE_EXCEPTIONS_INCLUDE" ]; then
  64     echo "Error: Cannot locate the exceptions file, it should have been here: $COMPARE_EXCEPTIONS_INCLUDE"
  65     exit 1
  66 fi
  67 # Include exception definitions
  68 . "$COMPARE_EXCEPTIONS_INCLUDE"
  69 
  70 ################################################################################
  71 #
  72 # Disassembly diff filters. These filters try to filter out ephemeral parts of the
  73 # disassembly, such as hard-coded addresses, to be able to catch "actual" differences.
  74 
  75 if [ "$OPENJDK_TARGET_OS" = "windows" ]; then



















  76   if [ "$OPENJDK_TARGET_CPU" = "x86" ]; then
  77     DIS_DIFF_FILTER="$SED -r \
  78         -e 's/^  [0-9A-F]{16}: //' \
  79         -e 's/^  [0-9A-F]{8}: /  <ADDR>: /' \
  80         -e 's/(offset \?\?)_C@_.*/\1<SYM>/' \
  81         -e 's/[@?][A-Za-z0-9_]{1,25}/<SYM>/' \
  82         -e 's/([-,+])[0-9A-F]{2,16}/\1<HEXSTR>/g' \
  83         -e 's/\[[0-9A-F]{4,16}h\]/[<HEXSTR>]/' \
  84         -e 's/: ([a-z]{2}[a-z ]{2})        [0-9A-F]{2,16}h?$/: \1        <HEXSTR>/' \
  85         -e 's/_20[0-9]{2}_[0-1][0-9]_[0-9]{2}/_<DATE>/' \
  86         "
  87   elif [ "$OPENJDK_TARGET_CPU" = "x86_64" ]; then
  88     DIS_DIFF_FILTER="$SED -r \
  89         -e 's/^  [0-9A-F]{16}: //' \
  90         -e 's/\[[0-9A-F]{4,16}h\]/[<HEXSTR>]/' \
  91         -e 's/([,+])[0-9A-F]{2,16}h/\1<HEXSTR>/' \
  92         -e 's/([a-z]{2}[a-z ]{2})        [0-9A-F]{4,16}$/\1        <HEXSTR>/' \
  93         -e 's/\[\?\?_C@_.*/[<SYM>]/' \
  94         "
  95   fi


 422     $MKDIR -p $THIS_UNZIPDIR
 423     $MKDIR -p $OTHER_UNZIPDIR
 424     if [ "$TYPE" = "jar" -o "$TYPE" = "war" -o "$TYPE" = "zip" ]
 425     then
 426         (cd $THIS_UNZIPDIR && $UNARCHIVE $THIS_ZIP)
 427         (cd $OTHER_UNZIPDIR && $UNARCHIVE $OTHER_ZIP)
 428     elif [ "$TYPE" = "gz" ]
 429     then
 430         (cd $THIS_UNZIPDIR && $GUNZIP -c $THIS_ZIP | $TAR xf -)
 431         (cd $OTHER_UNZIPDIR && $GUNZIP -c $OTHER_ZIP | $TAR xf -)
 432     elif [ "$TYPE" = "jmod" ]
 433     then
 434         (cd $THIS_UNZIPDIR && $JMOD extract $THIS_ZIP)
 435         (cd $OTHER_UNZIPDIR && $JMOD extract $OTHER_ZIP)
 436     else
 437         (cd $THIS_UNZIPDIR && $JIMAGE extract $THIS_ZIP)
 438         (cd $OTHER_UNZIPDIR && $JIMAGE extract $OTHER_ZIP)
 439     fi
 440 
 441     CONTENTS_DIFF_FILE=$WORK_DIR/$ZIP_FILE.diff






 442     $DIFF -rq $OTHER_UNZIPDIR $THIS_UNZIPDIR > $CONTENTS_DIFF_FILE

 443 
 444     ONLY_OTHER=$($GREP "^Only in $OTHER_UNZIPDIR" $CONTENTS_DIFF_FILE)
 445     ONLY_THIS=$($GREP "^Only in $THIS_UNZIPDIR" $CONTENTS_DIFF_FILE)
 446 
 447     return_value=0
 448 
 449     if [ -n "$ONLY_OTHER" ]; then
 450         echo "        Only OTHER $ZIP_FILE contains:"
 451         echo "$ONLY_OTHER" | sed "s|Only in $OTHER_UNZIPDIR|            |"g | sed 's|: |/|g'
 452         return_value=1
 453     fi
 454 
 455     if [ -n "$ONLY_THIS" ]; then
 456         echo "        Only THIS $ZIP_FILE contains:"
 457         echo "$ONLY_THIS" | sed "s|Only in $THIS_UNZIPDIR|            |"g | sed 's|: |/|g'
 458         return_value=1
 459     fi
 460 
 461     if [ "$CMP_ZIPS_CONTENTS" = "true" ]; then





 462         DIFFING_FILES=$($GREP -e "differ$" $CONTENTS_DIFF_FILE \
 463             | $CUT -f 2 -d ' ' | $SED "s|$OTHER_UNZIPDIR/||g")

 464 
 465         # Separate executable/library files from other files in zip.
 466         DIFFING_TEXT_FILES=
 467         DIFFING_EXEC_FILES=
 468         for file in $DIFFING_FILES; do
 469             SUFFIX="${file##*.}"
 470             if [ "$SUFFIX" = "exe" -o "$SUFFIX" = "dll" -o "$SUFFIX" = "so" \
 471                  -o "$SUFFIX" = "dylib" ]; then
 472                 DIFFING_EXEC_FILES="$DIFFING_EXEC_FILES $file"
 473             else
 474                 DIFFING_TEXT_FILES="$DIFFING_TEXT_FILES $file"
 475             fi
 476         done
 477 
 478         $RM -f $WORK_DIR/$ZIP_FILE.diffs
 479         for file in $DIFFING_TEXT_FILES; do
 480             if [[ "$ACCEPTED_JARZIP_CONTENTS $EXCEPTIONS" != *"$file"* ]]; then
 481                 diff_text $OTHER_UNZIPDIR/$file $THIS_UNZIPDIR/$file >> $WORK_DIR/$ZIP_FILE.diffs
 482             fi
 483         done


 780     if [ "$SORT_ALL_SYMBOLS" = "true" ] || [[ "$SORT_SYMBOLS" = *"$BIN_FILE"* ]]; then
 781         SYM_SORT_CMD="sort"
 782     else
 783         SYM_SORT_CMD="cat"
 784     fi
 785 
 786     if [ -n "$SYMBOLS_DIFF_FILTER" ] && [ -z "$NEED_SYMBOLS_DIFF_FILTER" ] \
 787             || [[ "$NEED_SYMBOLS_DIFF_FILTER" = *"$BIN_FILE"* ]]; then
 788         this_SYMBOLS_DIFF_FILTER="$SYMBOLS_DIFF_FILTER"
 789     else
 790         this_SYMBOLS_DIFF_FILTER="$CAT"
 791     fi
 792 
 793     # Check symbols
 794     if [ "$OPENJDK_TARGET_OS" = "windows" ]; then
 795         # The output from dumpbin on windows differs depending on if the debug symbol
 796         # files are still around at the location the binary is pointing too. Need
 797         # to filter out that extra information.
 798         $DUMPBIN -exports $OTHER_FILE | $GREP  -E '^ +[0-9A-F]+ +[0-9A-F]+ [0-9A-F]+' | sed 's/ = .*//g' | cut -c27- | $SYM_SORT_CMD > $WORK_FILE_BASE.symbols.other
 799         $DUMPBIN -exports $THIS_FILE  | $GREP  -E '^ +[0-9A-F]+ +[0-9A-F]+ [0-9A-F]+' | sed 's/ = .*//g' | cut -c27- | $SYM_SORT_CMD > $WORK_FILE_BASE.symbols.this




 800     elif [ "$OPENJDK_TARGET_OS" = "aix" ]; then
 801         $OBJDUMP -T $ORIG_OTHER_FILE 2> /dev/null | $GREP -v $NAME | $AWK '{print $2, $3, $4, $5}' | $SYM_SORT_CMD > $WORK_FILE_BASE.symbols.other
 802         $OBJDUMP -T $ORIG_THIS_FILE  2> /dev/null | $GREP -v $NAME | $AWK '{print $2, $3, $4, $5}' | $SYM_SORT_CMD > $WORK_FILE_BASE.symbols.this
 803     elif [ "$OPENJDK_TARGET_OS" = "macosx" ]; then
 804         $NM -j $ORIG_OTHER_FILE 2> /dev/null | $SYM_SORT_CMD > $WORK_FILE_BASE.symbols.other
 805         $NM -j $ORIG_THIS_FILE  2> /dev/null | $SYM_SORT_CMD > $WORK_FILE_BASE.symbols.this
 806     else
 807         $NM -a $ORIG_OTHER_FILE 2> /dev/null | $GREP -v $NAME \
 808             | $AWK '{print $2, $3, $4, $5}' \
 809             | eval "$this_SYMBOLS_DIFF_FILTER" \
 810             | $SYM_SORT_CMD \
 811             > $WORK_FILE_BASE.symbols.other
 812         $NM -a $ORIG_THIS_FILE  2> /dev/null | $GREP -v $NAME \
 813             | $AWK '{print $2, $3, $4, $5}' \
 814             | eval "$this_SYMBOLS_DIFF_FILTER" \
 815             | $SYM_SORT_CMD \
 816             > $WORK_FILE_BASE.symbols.this
 817     fi
 818 
 819     $DIFF $WORK_FILE_BASE.symbols.other $WORK_FILE_BASE.symbols.this > $WORK_FILE_BASE.symbols.diff


< prev index next >