< prev index next >

make/scripts/compare.sh

Print this page
rev 59102 : imported patch build


  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


 523     $MKDIR -p $THIS_UNZIPDIR
 524     $MKDIR -p $OTHER_UNZIPDIR
 525     if [ "$TYPE" = "jar" -o "$TYPE" = "war" -o "$TYPE" = "zip" ]
 526     then
 527         (cd $THIS_UNZIPDIR && $UNARCHIVE $THIS_ZIP)
 528         (cd $OTHER_UNZIPDIR && $UNARCHIVE $OTHER_ZIP)
 529     elif [ "$TYPE" = "gz" ]
 530     then
 531         (cd $THIS_UNZIPDIR && $GUNZIP -c $THIS_ZIP | $TAR xf -)
 532         (cd $OTHER_UNZIPDIR && $GUNZIP -c $OTHER_ZIP | $TAR xf -)
 533     elif [ "$TYPE" = "jmod" ]
 534     then
 535         (cd $THIS_UNZIPDIR && $JMOD extract $THIS_ZIP)
 536         (cd $OTHER_UNZIPDIR && $JMOD extract $OTHER_ZIP)
 537     else
 538         (cd $THIS_UNZIPDIR && $JIMAGE extract $THIS_ZIP)
 539         (cd $OTHER_UNZIPDIR && $JIMAGE extract $OTHER_ZIP)
 540     fi
 541 
 542     CONTENTS_DIFF_FILE=$WORK_DIR/$ZIP_FILE.diff
 543     # On solaris, there is no -q option.
 544     if [ "$OPENJDK_TARGET_OS" = "solaris" ]; then
 545         $DIFF -r $OTHER_UNZIPDIR $THIS_UNZIPDIR \
 546             | $GREP -v -e "^<" -e "^>" -e "^Common subdirectories:" \
 547             > $CONTENTS_DIFF_FILE
 548     else
 549         $DIFF -rq $OTHER_UNZIPDIR $THIS_UNZIPDIR > $CONTENTS_DIFF_FILE
 550     fi
 551 
 552     ONLY_OTHER=$($GREP "^Only in $OTHER_UNZIPDIR" $CONTENTS_DIFF_FILE)
 553     ONLY_THIS=$($GREP "^Only in $THIS_UNZIPDIR" $CONTENTS_DIFF_FILE)
 554 
 555     return_value=0
 556 
 557     if [ -n "$ONLY_OTHER" ]; then
 558         echo "        Only OTHER $ZIP_FILE contains:"
 559         echo "$ONLY_OTHER" | sed "s|Only in $OTHER_UNZIPDIR|            |"g | sed 's|: |/|g'
 560         return_value=1
 561     fi
 562 
 563     if [ -n "$ONLY_THIS" ]; then
 564         echo "        Only THIS $ZIP_FILE contains:"
 565         echo "$ONLY_THIS" | sed "s|Only in $THIS_UNZIPDIR|            |"g | sed 's|: |/|g'
 566         return_value=1
 567     fi
 568 
 569     if [ "$CMP_ZIPS_CONTENTS" = "true" ]; then
 570         if [ "$OPENJDK_TARGET_OS" = "solaris" ]; then
 571             DIFFING_FILES=$($GREP -e 'differ$' -e '^diff ' $CONTENTS_DIFF_FILE \
 572                 | $SED -e 's/^Files //g' -e 's/diff -r //g' | $CUT -f 1 -d ' ' \
 573                 | $SED "s|$OTHER_UNZIPDIR/||g")
 574         else
 575             DIFFING_FILES=$($GREP -e "differ$" $CONTENTS_DIFF_FILE \
 576                 | $CUT -f 2 -d ' ' | $SED "s|$OTHER_UNZIPDIR/||g")
 577         fi
 578 
 579         # Separate executable/library files from other files in zip.
 580         DIFFING_TEXT_FILES=
 581         DIFFING_EXEC_FILES=
 582         for file in $DIFFING_FILES; do
 583             SUFFIX="${file##*.}"
 584             if [ "$SUFFIX" = "exe" -o "$SUFFIX" = "dll" -o "$SUFFIX" = "so" \
 585                  -o "$SUFFIX" = "dylib" ]; then
 586                 DIFFING_EXEC_FILES="$DIFFING_EXEC_FILES $file"
 587             else
 588                 DIFFING_TEXT_FILES="$DIFFING_TEXT_FILES $file"
 589             fi
 590         done
 591 
 592         $RM -f $WORK_DIR/$ZIP_FILE.diffs
 593         for file in $DIFFING_TEXT_FILES; do
 594             if [[ "$ACCEPTED_JARZIP_CONTENTS $EXCEPTIONS" != *"$file"* ]]; then
 595                 diff_text $OTHER_UNZIPDIR/$file $THIS_UNZIPDIR/$file >> $WORK_DIR/$ZIP_FILE.diffs
 596             fi
 597         done


 894     if [ "$SORT_ALL_SYMBOLS" = "true" ] || [[ "$SORT_SYMBOLS" = *"$BIN_FILE"* ]]; then
 895         SYM_SORT_CMD="sort"
 896     else
 897         SYM_SORT_CMD="cat"
 898     fi
 899 
 900     if [ -n "$SYMBOLS_DIFF_FILTER" ] && [ -z "$NEED_SYMBOLS_DIFF_FILTER" ] \
 901             || [[ "$NEED_SYMBOLS_DIFF_FILTER" = *"$BIN_FILE"* ]]; then
 902         this_SYMBOLS_DIFF_FILTER="$SYMBOLS_DIFF_FILTER"
 903     else
 904         this_SYMBOLS_DIFF_FILTER="$CAT"
 905     fi
 906 
 907     # Check symbols
 908     if [ "$OPENJDK_TARGET_OS" = "windows" ]; then
 909         # The output from dumpbin on windows differs depending on if the debug symbol
 910         # files are still around at the location the binary is pointing too. Need
 911         # to filter out that extra information.
 912         $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
 913         $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
 914     elif [ "$OPENJDK_TARGET_OS" = "solaris" ]; then
 915         # Some symbols get seemingly random 15 character prefixes. Filter them out.
 916         $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
 917         $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
 918     elif [ "$OPENJDK_TARGET_OS" = "aix" ]; then
 919         $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
 920         $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
 921     elif [ "$OPENJDK_TARGET_OS" = "macosx" ]; then
 922         $NM -j $ORIG_OTHER_FILE 2> /dev/null | $SYM_SORT_CMD > $WORK_FILE_BASE.symbols.other
 923         $NM -j $ORIG_THIS_FILE  2> /dev/null | $SYM_SORT_CMD > $WORK_FILE_BASE.symbols.this
 924     else
 925         $NM -a $ORIG_OTHER_FILE 2> /dev/null | $GREP -v $NAME \
 926             | $AWK '{print $2, $3, $4, $5}' \
 927             | eval "$this_SYMBOLS_DIFF_FILTER" \
 928             | $SYM_SORT_CMD \
 929             > $WORK_FILE_BASE.symbols.other
 930         $NM -a $ORIG_THIS_FILE  2> /dev/null | $GREP -v $NAME \
 931             | $AWK '{print $2, $3, $4, $5}' \
 932             | eval "$this_SYMBOLS_DIFF_FILTER" \
 933             | $SYM_SORT_CMD \
 934             > $WORK_FILE_BASE.symbols.this
 935     fi
 936 
 937     $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


 504     $MKDIR -p $THIS_UNZIPDIR
 505     $MKDIR -p $OTHER_UNZIPDIR
 506     if [ "$TYPE" = "jar" -o "$TYPE" = "war" -o "$TYPE" = "zip" ]
 507     then
 508         (cd $THIS_UNZIPDIR && $UNARCHIVE $THIS_ZIP)
 509         (cd $OTHER_UNZIPDIR && $UNARCHIVE $OTHER_ZIP)
 510     elif [ "$TYPE" = "gz" ]
 511     then
 512         (cd $THIS_UNZIPDIR && $GUNZIP -c $THIS_ZIP | $TAR xf -)
 513         (cd $OTHER_UNZIPDIR && $GUNZIP -c $OTHER_ZIP | $TAR xf -)
 514     elif [ "$TYPE" = "jmod" ]
 515     then
 516         (cd $THIS_UNZIPDIR && $JMOD extract $THIS_ZIP)
 517         (cd $OTHER_UNZIPDIR && $JMOD extract $OTHER_ZIP)
 518     else
 519         (cd $THIS_UNZIPDIR && $JIMAGE extract $THIS_ZIP)
 520         (cd $OTHER_UNZIPDIR && $JIMAGE extract $OTHER_ZIP)
 521     fi
 522 
 523     CONTENTS_DIFF_FILE=$WORK_DIR/$ZIP_FILE.diff






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

 525 
 526     ONLY_OTHER=$($GREP "^Only in $OTHER_UNZIPDIR" $CONTENTS_DIFF_FILE)
 527     ONLY_THIS=$($GREP "^Only in $THIS_UNZIPDIR" $CONTENTS_DIFF_FILE)
 528 
 529     return_value=0
 530 
 531     if [ -n "$ONLY_OTHER" ]; then
 532         echo "        Only OTHER $ZIP_FILE contains:"
 533         echo "$ONLY_OTHER" | sed "s|Only in $OTHER_UNZIPDIR|            |"g | sed 's|: |/|g'
 534         return_value=1
 535     fi
 536 
 537     if [ -n "$ONLY_THIS" ]; then
 538         echo "        Only THIS $ZIP_FILE contains:"
 539         echo "$ONLY_THIS" | sed "s|Only in $THIS_UNZIPDIR|            |"g | sed 's|: |/|g'
 540         return_value=1
 541     fi
 542 
 543     if [ "$CMP_ZIPS_CONTENTS" = "true" ]; then





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

 546 
 547         # Separate executable/library files from other files in zip.
 548         DIFFING_TEXT_FILES=
 549         DIFFING_EXEC_FILES=
 550         for file in $DIFFING_FILES; do
 551             SUFFIX="${file##*.}"
 552             if [ "$SUFFIX" = "exe" -o "$SUFFIX" = "dll" -o "$SUFFIX" = "so" \
 553                  -o "$SUFFIX" = "dylib" ]; then
 554                 DIFFING_EXEC_FILES="$DIFFING_EXEC_FILES $file"
 555             else
 556                 DIFFING_TEXT_FILES="$DIFFING_TEXT_FILES $file"
 557             fi
 558         done
 559 
 560         $RM -f $WORK_DIR/$ZIP_FILE.diffs
 561         for file in $DIFFING_TEXT_FILES; do
 562             if [[ "$ACCEPTED_JARZIP_CONTENTS $EXCEPTIONS" != *"$file"* ]]; then
 563                 diff_text $OTHER_UNZIPDIR/$file $THIS_UNZIPDIR/$file >> $WORK_DIR/$ZIP_FILE.diffs
 564             fi
 565         done


 862     if [ "$SORT_ALL_SYMBOLS" = "true" ] || [[ "$SORT_SYMBOLS" = *"$BIN_FILE"* ]]; then
 863         SYM_SORT_CMD="sort"
 864     else
 865         SYM_SORT_CMD="cat"
 866     fi
 867 
 868     if [ -n "$SYMBOLS_DIFF_FILTER" ] && [ -z "$NEED_SYMBOLS_DIFF_FILTER" ] \
 869             || [[ "$NEED_SYMBOLS_DIFF_FILTER" = *"$BIN_FILE"* ]]; then
 870         this_SYMBOLS_DIFF_FILTER="$SYMBOLS_DIFF_FILTER"
 871     else
 872         this_SYMBOLS_DIFF_FILTER="$CAT"
 873     fi
 874 
 875     # Check symbols
 876     if [ "$OPENJDK_TARGET_OS" = "windows" ]; then
 877         # The output from dumpbin on windows differs depending on if the debug symbol
 878         # files are still around at the location the binary is pointing too. Need
 879         # to filter out that extra information.
 880         $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
 881         $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




 882     elif [ "$OPENJDK_TARGET_OS" = "aix" ]; then
 883         $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
 884         $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
 885     elif [ "$OPENJDK_TARGET_OS" = "macosx" ]; then
 886         $NM -j $ORIG_OTHER_FILE 2> /dev/null | $SYM_SORT_CMD > $WORK_FILE_BASE.symbols.other
 887         $NM -j $ORIG_THIS_FILE  2> /dev/null | $SYM_SORT_CMD > $WORK_FILE_BASE.symbols.this
 888     else
 889         $NM -a $ORIG_OTHER_FILE 2> /dev/null | $GREP -v $NAME \
 890             | $AWK '{print $2, $3, $4, $5}' \
 891             | eval "$this_SYMBOLS_DIFF_FILTER" \
 892             | $SYM_SORT_CMD \
 893             > $WORK_FILE_BASE.symbols.other
 894         $NM -a $ORIG_THIS_FILE  2> /dev/null | $GREP -v $NAME \
 895             | $AWK '{print $2, $3, $4, $5}' \
 896             | eval "$this_SYMBOLS_DIFF_FILTER" \
 897             | $SYM_SORT_CMD \
 898             > $WORK_FILE_BASE.symbols.this
 899     fi
 900 
 901     $DIFF $WORK_FILE_BASE.symbols.other $WORK_FILE_BASE.symbols.this > $WORK_FILE_BASE.symbols.diff


< prev index next >