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