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