view agent/make/jdbcore64.sh @ 11825:463f51256c86

AMD64HotSpot: emit jump to IC miss handler directly instead of emitting it inside verfied_entry for empty methods we emitted something like this if a inline cache is needed: prefix: 00: < IC check > ... 0b: jne <ic_miss_call> 11: nop ... verified_entry: 20: ret ic_miss_call: 21: jmp <entry of runtime function> when a method is deoptimized, HotSpot patches the verified_entry (0x20) with a jump to a stub that handles call-sites that has been made non-entrant. since this jump is 5 bytes long, it will overwrite ic_miss_call and blow up every caller that calls this method via the unverified entry (prefix). the fix is to emit the jump to the runtime function inside the unverfied entry: prefix: 00: < IC check > ... 0b: je <verified_entry> 11: jeq <entry of runtime function> 16: nop ... verified_entry: 20: ret
author Bernhard Urban <bernhard.urban@jku.at>
date Mon, 30 Sep 2013 09:32:18 +0200
parents c18cbe5936b8
children
line wrap: on
line source

#!/bin/sh
#
# Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation.
#
# This code is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
# or visit www.oracle.com if you need additional information or have any
# questions.
#  
#

usage()
{
  echo "usage:   $0 <java executable> <core file>"
  exit 1
}
#
if [ $# -lt 2 ]; then
    usage
else
    EXEC_FILE="${1}"
    CORE_FILE="${2}"
    echo "$0 attaching to core=${CORE_FILE}"
fi
#

. `dirname $0`/saenv64.sh

$JAVA_HOME/bin/jdb -J-d64 -J-Xbootclasspath/a:$SA_CLASSPATH:$JAVA_HOME/lib/tools.jar \
 -J-Dsun.boot.library.path=$JAVA_HOME/jre/lib/$CPU:$SA_LIBPATH \
 -connect sun.jvm.hotspot.jdi.SACoreAttachingConnector:core=${CORE_FILE},javaExecutable=${EXEC_FILE}