1 #!/bin/bash
   2 #
   3 # Copyright (c) 2012, 2016, Oracle and/or its affiliates. All rights reserved.
   4 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   5 #
   6 # This code is free software; you can redistribute it and/or modify it
   7 # under the terms of the GNU General Public License version 2 only, as
   8 # published by the Free Software Foundation.
   9 #
  10 # This code is distributed in the hope that it will be useful, but WITHOUT
  11 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  12 # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  13 # version 2 for more details (a copy is included in the LICENSE file that
  14 # accompanied this code).
  15 #
  16 # You should have received a copy of the GNU General Public License version
  17 # 2 along with this work; if not, write to the Free Software Foundation,
  18 # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  19 #
  20 # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  21 # or visit www.oracle.com if you need additional information or have any
  22 # questions.
  23 #
  24 
  25 # This script is not to be run as stand-alone, it should be included from
  26 # compare.sh.
  27 
  28 ##########################################################################################
  29 # Check that we are run via inclusion from compare.sh and not as stand-alone.
  30 if [ -z "$COMPARE_EXCEPTIONS_INCLUDE" ]; then
  31     echo "Error: This script should not be run as stand-alone. It is included by compare.sh"
  32     exit 1
  33 fi
  34 
  35 ##########################################################################################
  36 # Diff exceptions
  37 
  38 if [ "$OPENJDK_TARGET_OS" = "linux" ]; then
  39 
  40   STRIP_BEFORE_COMPARE="
  41       "
  42 
  43   ACCEPTED_BIN_DIFF="
  44       ./lib/client/libjsig.so
  45       ./lib/client/libjvm.so
  46       ./lib/libattach.so
  47       ./lib/libdt_socket.so
  48       ./lib/libinstrument.so
  49       ./lib/libjsdt.so
  50       ./lib/libjsig.so
  51       ./lib/libmanagement.so
  52       ./lib/libnet.so
  53       ./lib/libnpt.so
  54       ./lib/libverify.so
  55       ./lib/minimal/libjsig.so
  56       ./lib/minimal/libjvm.so
  57       ./lib/server/libjsig.so
  58       ./lib/server/libjvm.so
  59       ./bin/appletviewer
  60       ./bin/idlj
  61       ./bin/jar
  62       ./bin/jarsigner
  63       ./bin/java
  64       ./bin/javac
  65       ./bin/javadoc
  66       ./bin/javah
  67       ./bin/javap
  68       ./bin/jdeps
  69       ./bin/jcmd
  70       ./bin/jconsole
  71       ./bin/jdb
  72       ./bin/jhsdb
  73       ./bin/jimage
  74       ./bin/jinfo
  75       ./bin/jjs
  76       ./bin/jlink
  77       ./bin/jmap
  78       ./bin/jmod
  79       ./bin/jps
  80       ./bin/jrunscript
  81       ./bin/jsadebugd
  82       ./bin/jshell
  83       ./bin/jstack
  84       ./bin/jstat
  85       ./bin/jstatd
  86       ./bin/keytool
  87       ./bin/orbd
  88       ./bin/pack200
  89       ./bin/rmic
  90       ./bin/rmid
  91       ./bin/rmiregistry
  92       ./bin/schemagen
  93       ./bin/serialver
  94       ./bin/servertool
  95       ./bin/tnameserv
  96       ./bin/wsgen
  97       ./bin/wsimport
  98       ./bin/xjc
  99       "
 100 
 101   if [ "$OPENJDK_TARGET_CPU" = "arm" ]; then
 102     # NOTE: When comparing the old and new hotspot builds, the link time
 103     # optimization makes good comparisons impossible. Fulldump compare always
 104     # fails and disassembly can end up with some functions in different order.
 105     # So for now, accept the difference but put a limit on the size. The
 106     # different order of functions shouldn't result in a very big diff.
 107     KNOWN_FULLDUMP_DIFF="
 108         ./lib/minimal/libjvm.so
 109         "
 110 
 111     # Link time optimization adds random numbers to symbol names
 112     NEED_DIS_DIFF_FILTER="
 113         ./lib/minimal/libjvm.so
 114         "
 115     DIS_DIFF_FILTER="$SED -r \
 116         -e 's/\.[0-9]+/.X/g' \
 117         -e 's/\t[0-9a-f]{4} [0-9a-f]{4} /\tXXXX XXXX /' \
 118         -e 's/\t[0-9a-f]{5,} /\t<HEX> /' \
 119         "
 120     KNOWN_DIS_DIFF="
 121         ./lib/minimal/libjvm.so
 122         "
 123     MAX_KNOWN_DIS_DIFF_SIZE="3000"
 124 
 125     NEED_SYMBOLS_DIFF_FILTER="
 126         ./lib/minimal/libjvm.so
 127         "
 128     SYMBOLS_DIFF_FILTER="$SED -r \
 129         -e 's/\.[0-9]+/.X/g'
 130         "
 131   fi
 132 fi
 133 
 134 if [ "$OPENJDK_TARGET_OS" = "solaris" ] && [ "$OPENJDK_TARGET_CPU" = "x86_64" ]; then
 135 
 136   STRIP_BEFORE_COMPARE="
 137       "
 138 
 139   SORT_SYMBOLS="
 140       ./lib/server/libjvm.so
 141       ./lib/libfontmanager.so
 142       ./lib/libjimage.so
 143       ./lib/libsaproc.so
 144       ./lib/libunpack.so
 145       ./bin/unpack200
 146       "
 147 
 148   SKIP_BIN_DIFF="true"
 149 
 150   ACCEPTED_SMALL_SIZE_DIFF="
 151       ./lib/jli/libjli.so
 152       ./lib/jspawnhelper
 153       ./lib/libJdbcOdbc.so
 154       ./lib/libattach.so
 155       ./lib/libawt.so
 156       ./lib/libawt_headless.so
 157       ./lib/libawt_xawt.so
 158       ./lib/libdcpr.so
 159       ./lib/libdt_socket.so
 160       ./lib/libfontmanager.so
 161       ./lib/libinstrument.so
 162       ./lib/libj2gss.so
 163       ./lib/libj2pcsc.so
 164       ./lib/libj2pkcs11.so
 165       ./lib/libj2ucrypto.so
 166       ./lib/libjaas_unix.so
 167       ./lib/libjava.so
 168       ./lib/libjawt.so
 169       ./lib/libjdwp.so
 170       ./lib/libjpeg.so
 171       ./lib/libjsdt.so
 172       ./lib/libjsound.so
 173       ./lib/libkcms.so
 174       ./lib/liblcms.so
 175       ./lib/libmanagement.so
 176       ./lib/libmlib_image.so
 177       ./lib/libnet.so
 178       ./lib/libnio.so
 179       ./lib/libnpt.so
 180       ./lib/libsctp.so
 181       ./lib/libsplashscreen.so
 182       ./lib/libsunec.so
 183       ./lib/libsunwjdga.so
 184       ./lib/libt2k.so
 185       ./lib/libunpack.so
 186       ./lib/libverify.so
 187       ./lib/libzip.so
 188       ./lib/server/64/libjvm_db.so
 189       ./lib/server/64/libjvm_dtrace.so
 190       ./lib/server/libjvm.so
 191       ./lib/server/libjvm_db.so
 192       ./lib/server/libjvm_dtrace.so
 193       ./bin/appletviewer
 194       ./bin/idlj
 195       ./bin/jar
 196       ./bin/jarsigner
 197       ./bin/java
 198       ./bin/javac
 199       ./bin/javadoc
 200       ./bin/javah
 201       ./bin/javap
 202       ./bin/jdeps
 203       ./bin/jcmd
 204       ./bin/jconsole
 205       ./bin/jdb
 206       ./bin/jimage
 207       ./bin/jinfo
 208       ./bin/jjs
 209       ./bin/jlink
 210       ./bin/jmap
 211       ./bin/jmod
 212       ./bin/jps
 213       ./bin/jrunscript
 214       ./bin/jsadebugd
 215       ./bin/jstack
 216       ./bin/jstat
 217       ./bin/jstatd
 218       ./bin/keytool
 219       ./bin/orbd
 220       ./bin/pack200
 221       ./bin/rmic
 222       ./bin/rmid
 223       ./bin/rmiregistry
 224       ./bin/schemagen
 225       ./bin/serialver
 226       ./bin/servertool
 227       ./bin/tnameserv
 228       ./bin/unpack200
 229       ./bin/wsgen
 230       ./bin/wsimport
 231       ./bin/xjc
 232       "
 233 
 234   SKIP_FULLDUMP_DIFF="true"
 235 
 236   # Random strings looking like this differ: <.XAKoKoPIac2W0OA.
 237   DIS_DIFF_FILTER="$SED \
 238       -e 's/<\.[A-Za-z0-9]\{\15}\./<.SYM./' \
 239       "
 240 
 241 fi
 242 
 243 if [ "$OPENJDK_TARGET_OS" = "solaris" ] && [ "$OPENJDK_TARGET_CPU" = "sparcv9" ]; then
 244 
 245   STRIP_BEFORE_COMPARE="
 246       "
 247 
 248   SORT_SYMBOLS="
 249       ./lib/libjsig.so
 250       ./lib/libfontmanager.so
 251       ./lib/libjimage.so
 252       ./lib/libsaproc.so
 253       ./lib/libunpack.so
 254       ./lib/server/libjvm.so
 255       ./lib/server/libjvm_dtrace.so
 256       ./bin/unpack200
 257       "
 258 
 259   SKIP_BIN_DIFF="true"
 260 
 261   ACCEPTED_SMALL_SIZE_DIFF="
 262       ./lib/client/libjvm.so
 263       ./lib/jli/libjli.so
 264       ./lib/jspawnhelper
 265       ./lib/libJdbcOdbc.so
 266       ./lib/libattach.so
 267       ./lib/libawt.so
 268       ./lib/libawt_headless.so
 269       ./lib/libawt_xawt.so
 270       ./lib/libdcpr.so
 271       ./lib/libdt_socket.so
 272       ./lib/libfontmanager.so
 273       ./lib/libinstrument.so
 274       ./lib/libj2gss.so
 275       ./lib/libj2pcsc.so
 276       ./lib/libj2pkcs11.so
 277       ./lib/libj2ucrypto.so
 278       ./lib/libjaas_unix.so
 279       ./lib/libjava.so
 280       ./lib/libjawt.so
 281       ./lib/libjdwp.so
 282       ./lib/libjpeg.so
 283       ./lib/libjsdt.so
 284       ./lib/libjsound.so
 285       ./lib/libkcms.so
 286       ./lib/liblcms.so
 287       ./lib/libmanagement.so
 288       ./lib/libmlib_image.so
 289       ./lib/libmlib_image_v.so
 290       ./lib/libnet.so
 291       ./lib/libnio.so
 292       ./lib/libnpt.so
 293       ./lib/libsctp.so
 294       ./lib/libsplashscreen.so
 295       ./lib/libsunec.so
 296       ./lib/libsunwjdga.so
 297       ./lib/libt2k.so
 298       ./lib/libunpack.so
 299       ./lib/libverify.so
 300       ./lib/libzip.so
 301       ./lib/server/libjvm.so
 302       ./bin/appletviewer
 303       ./bin/idlj
 304       ./bin/jar
 305       ./bin/jarsigner
 306       ./bin/java
 307       ./bin/javac
 308       ./bin/javadoc
 309       ./bin/javah
 310       ./bin/javap
 311       ./bin/jdeps
 312       ./bin/jcmd
 313       ./bin/jconsole
 314       ./bin/jdb
 315       ./bin/jimage
 316       ./bin/jinfo
 317       ./bin/jjs
 318       ./bin/jlink
 319       ./bin/jmap
 320       ./bin/jmod
 321       ./bin/jps
 322       ./bin/jrunscript
 323       ./bin/jsadebugd
 324       ./bin/jstack
 325       ./bin/jstat
 326       ./bin/jstatd
 327       ./bin/keytool
 328       ./bin/orbd
 329       ./bin/pack200
 330       ./bin/rmic
 331       ./bin/rmid
 332       ./bin/rmiregistry
 333       ./bin/schemagen
 334       ./bin/serialver
 335       ./bin/servertool
 336       ./bin/tnameserv
 337       ./bin/unpack200
 338       ./bin/wsgen
 339       ./bin/wsimport
 340       ./bin/xjc
 341       "
 342 
 343   DIS_DIFF_FILTER="$SED \
 344       -e 's/^[0-9a-f]\{16\}/<ADDR>:/' \
 345       -e 's/^ *[0-9a-f]\{3,8\}:/  <ADDR>:/' \
 346       -e 's/:   [0-9a-f][0-9a-f]\( [0-9a-f][0-9a-f]\)\{2,10\}/: <NUMS>/' \
 347       -e 's/\$[a-zA-Z0-9_\$]\{15\}\./<SYM>./' \
 348       -e 's/, [0-9a-fx\-]\{1,8\}/, <ADDR>/g' \
 349       -e 's/0x[0-9a-f]\{1,8\}/<HEX>/g' \
 350       -e 's/\! [0-9a-f]\{1,8\} /! <ADDR> /' \
 351       -e 's/call  [0-9a-f]\{4,7\}/call  <ADDR>/' \
 352       -e 's/%hi(0),/%hi(<HEX>),/' \
 353       "
 354 
 355   KNOWN_DIS_DIFF="
 356       ./lib/libsaproc.so
 357   "
 358 
 359   MAX_KNOWN_DIS_DIFF_SIZE="3000"
 360 
 361   # On slowdebug the disassembly can differ randomly.
 362   if [ "$DEBUG_LEVEL" = "slowdebug" ]; then
 363     ACCEPTED_DIS_DIFF="
 364         ./lib/libfontmanager.so
 365         ./lib/server/libjvm.so
 366     "
 367   fi
 368 
 369   SKIP_FULLDUMP_DIFF="true"
 370 
 371 fi
 372 
 373 
 374 if [ "$OPENJDK_TARGET_OS" = "windows" ]; then
 375 
 376   ACCEPTED_JARZIP_CONTENTS="
 377       /modules_libs/java.security.jgss/w2k_lsa_auth.diz
 378       /modules_libs/java.security.jgss/w2k_lsa_auth.pdb
 379       /modules_libs/java.security.jgss/w2k_lsa_auth.map
 380       /modules_libs/java.security.jgss/w2k_lsa_auth.dll
 381       "
 382 
 383   # Probably should add all libs here
 384   ACCEPTED_SMALL_SIZE_DIFF="
 385       ./bin/attach.dll
 386       ./bin/jsoundds.dll
 387       ./bin/client/jvm.dll
 388       ./bin/server/jvm.dll
 389       ./bin/appletviewer.exe
 390       ./bin/idlj.exe
 391       ./bin/jar.exe
 392       ./bin/jarsigner.exe
 393       ./bin/java-rmi.exe
 394       ./bin/java.exe
 395       ./bin/javac.exe
 396       ./bin/javadoc.exe
 397       ./bin/javah.exe
 398       ./bin/javap.exe
 399       ./bin/jdeps.exe
 400       ./bin/javaw.exe
 401       ./bin/jcmd.exe
 402       ./bin/jconsole.exe
 403       ./bin/jdb.exe
 404       ./bin/jimage.exe
 405       ./bin/jinfo.exe
 406       ./bin/jjs.exe
 407       ./bin/jlink.exe
 408       ./bin/jmap.exe
 409       ./bin/jmod.exe
 410       ./bin/jps.exe
 411       ./bin/jrunscript.exe
 412       ./bin/jsadebugd.exe
 413       ./bin/jstack.exe
 414       ./bin/jstat.exe
 415       ./bin/jstatd.exe
 416       ./bin/keytool.exe
 417       ./bin/kinit.exe
 418       ./bin/klist.exe
 419       ./bin/ktab.exe
 420       ./bin/orbd.exe
 421       ./bin/pack200.exe
 422       ./bin/rmic.exe
 423       ./bin/rmid.exe
 424       ./bin/rmiregistry.exe
 425       ./bin/schemagen.exe
 426       ./bin/serialver.exe
 427       ./bin/servertool.exe
 428       ./bin/tnameserv.exe
 429       ./bin/unpack200.exe
 430       ./bin/wsgen.exe
 431       ./bin/wsimport.exe
 432       ./bin/xjc.exe
 433       "
 434 
 435   ACCEPTED_DIS_DIFF="
 436       ./bin/jabswitch.exe
 437       "
 438 
 439   if [ "$OPENJDK_TARGET_CPU" = "x86" ]; then
 440     DIS_DIFF_FILTER="$SED -r \
 441         -e 's/^  [0-9A-F]{16}: //' \
 442         -e 's/^  [0-9A-F]{8}: /  <ADDR>: /' \
 443         -e 's/(offset \?\?)_C@_.*/\1<SYM>/' \
 444         -e 's/[@?][A-Za-z0-9_]{1,25}/<SYM>/' \
 445         -e 's/([-,+])[0-9A-F]{2,16}/\1<HEXSTR>/g' \
 446         -e 's/\[[0-9A-F]{4,16}h\]/[<HEXSTR>]/' \
 447         -e 's/: ([a-z]{2}[a-z ]{2})        [0-9A-F]{2,16}h?$/: \1        <HEXSTR>/' \
 448         -e 's/_20[0-9]{2}_[0-1][0-9]_[0-9]{2}/_<DATE>/' \
 449         "
 450   elif [ "$OPENJDK_TARGET_CPU" = "x86_64" ]; then
 451     DIS_DIFF_FILTER="$SED -r \
 452         -e 's/^  [0-9A-F]{16}: //' \
 453         -e 's/\[[0-9A-F]{4,16}h\]/[<HEXSTR>]/' \
 454         -e 's/([,+])[0-9A-F]{2,16}h/\1<HEXSTR>/' \
 455         -e 's/([a-z]{2}[a-z ]{2})        [0-9A-F]{4,16}$/\1        <HEXSTR>/' \
 456         -e 's/\[\?\?_C@_.*/[<SYM>]/' \
 457         "
 458   fi
 459 
 460   SKIP_BIN_DIFF="true"
 461   SKIP_FULLDUMP_DIFF="true"
 462 
 463   # NOTE: When comparing the old and new hotspot builds, the server jvm.dll
 464   # cannot be made equal in disassembly. Some functions just always end up
 465   # in different order. So for now, accept the difference but put a limit
 466   # on the size. The different order of functions shouldn't result in a very
 467   # big diff.
 468   KNOWN_DIS_DIFF="
 469       ./bin/server/jvm.dll
 470       "
 471   MAX_KNOWN_DIS_DIFF_SIZE="2000000"
 472 fi
 473 
 474 
 475 if [ "$OPENJDK_TARGET_OS" = "macosx" ]; then
 476 
 477   ACCEPTED_JARZIP_CONTENTS="
 478       /META-INF/INDEX.LIST
 479       "
 480 
 481   ACCEPTED_BIN_DIFF="
 482       ./bin/appletviewer
 483       ./bin/idlj
 484       ./bin/jar
 485       ./bin/jarsigner
 486       ./bin/java
 487       ./bin/javac
 488       ./bin/javadoc
 489       ./bin/javah
 490       ./bin/javap
 491       ./bin/javaws
 492       ./bin/jdeps
 493       ./bin/jcmd
 494       ./bin/jconsole
 495       ./bin/jdb
 496       ./bin/jimage
 497       ./bin/jinfo
 498       ./bin/jjs
 499       ./bin/jlink
 500       ./bin/jmap
 501       ./bin/jmod
 502       ./bin/jps
 503       ./bin/jrunscript
 504       ./bin/jsadebugd
 505       ./bin/jstack
 506       ./bin/jstat
 507       ./bin/jstatd
 508       ./bin/keytool
 509       ./bin/orbd
 510       ./bin/pack200
 511       ./bin/rmic
 512       ./bin/rmid
 513       ./bin/rmiregistry
 514       ./bin/schemagen
 515       ./bin/serialver
 516       ./bin/servertool
 517       ./bin/tnameserv
 518       ./bin/wsgen
 519       ./bin/wsimport
 520       ./bin/xjc
 521       ./Contents/Home/bin/_javaws
 522       ./Contents/Home/bin/javaws
 523       ./Contents/Home/bin/idlj
 524       ./Contents/Home/bin/servertool
 525       ./Contents/Home/lib/shortcuts/JavaWSApplicationStub
 526       ./Contents/Home/lib/jli/libjli.dylib
 527       ./Contents/Home/lib/jspawnhelper
 528       ./Contents/Home/lib/libAppleScriptEngine.dylib
 529       ./Contents/Home/lib/libattach.dylib
 530       ./Contents/Home/lib/libawt_lwawt.dylib
 531       ./Contents/Home/lib/libdeploy.dylib
 532       ./Contents/Home/lib/libdt_socket.dylib
 533       ./Contents/Home/lib/libinstrument.dylib
 534       ./Contents/Home/lib/libjdwp.dylib
 535       ./Contents/Home/lib/libjsdt.dylib
 536       ./Contents/Home/lib/libjsig.dylib
 537       ./Contents/Home/lib/libmanagement.dylib
 538       ./Contents/Home/lib/libnpjp2.dylib
 539       ./Contents/Home/lib/libosx.dylib
 540       ./Contents/Home/lib/libosxapp.dylib
 541       ./Contents/Home/lib/libosxui.dylib
 542       ./Contents/Home/lib/libverify.dylib
 543       ./Contents/Home/lib/libsaproc.dylib
 544       ./Contents/Home/lib/libsplashscreen.dylib
 545       ./Contents/Home/lib/server/libjsig.dylib
 546       ./Contents/Home/lib/server/libjvm.dylib
 547       ./Contents/Home/lib/deploy/JavaControlPanel.prefPane/Contents/MacOS/JavaControlPanel
 548       ./Contents/Resources/JavaControlPanelHelper
 549       ./Contents/Resources/JavaUpdater.app/Contents/MacOS/JavaUpdater
 550       ./Contents/Resources/JavawsLauncher.app/Contents/MacOS/JavawsLauncher
 551       ./lib/shortcuts/JavaWSApplicationStub
 552       ./lib/jli/libjli.dylib
 553       ./lib/jspawnhelper
 554       ./lib/libAppleScriptEngine.dylib
 555       ./lib/libattach.dylib
 556       ./lib/libawt_lwawt.dylib
 557       ./lib/libdeploy.dylib
 558       ./lib/libdt_socket.dylib
 559       ./lib/libinstrument.dylib
 560       ./lib/libjdwp.dylib
 561       ./lib/libjsdt.dylib
 562       ./lib/libjsig.dylib
 563       ./lib/libmanagement.dylib
 564       ./lib/libnpjp2.dylib
 565       ./lib/libosx.dylib
 566       ./lib/libosxapp.dylib
 567       ./lib/libosxui.dylib
 568       ./lib/libverify.dylib
 569       ./lib/libsaproc.dylib
 570       ./lib/libsplashscreen.dylib
 571       ./lib/server/libjsig.dylib
 572       ./lib/server/libjvm.dylib
 573       ./lib/deploy/JavaControlPanel.prefPane/Contents/MacOS/JavaControlPanel
 574       ./Versions/A/Resources/finish_installation.app/Contents/MacOS/finish_installation
 575       ./Versions/A/Sparkle
 576       "
 577 
 578   SORT_SYMBOLS="
 579       ./Contents/Home/lib/libsaproc.dylib
 580       ./lib/libsaproc.dylib
 581       ./lib/libjsig.dylib
 582       "
 583 
 584   ACCEPTED_SMALL_SIZE_DIFF="$ACCEPTED_BIN_DIFF"
 585 
 586   DIS_DIFF_FILTER="LANG=C $SED \
 587       -e 's/0x[0-9a-f]\{3,16\}/<HEXSTR>/g' -e 's/^[0-9a-f]\{12,20\}/<ADDR>/' \
 588       -e 's/-20[0-9][0-9]-[0-1][0-9]-[0-3][0-9]-[0-2][0-9]\{5\}/<DATE>/g' \
 589       -e 's/), built on .*/), <DATE>/' \
 590       "
 591 
 592 fi