mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-28 15:24:43 +02:00
Merge
This commit is contained in:
commit
af31d0cf27
16 changed files with 3381 additions and 1495 deletions
File diff suppressed because it is too large
Load diff
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2003, 2011 Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2003, 2011, 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
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
Copyright (c) 2007 Oracle and/or its affiliates. All rights reserved.
|
||||
Copyright (c) 2007, 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
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
#
|
||||
# Copyright (c) 2007, 2010 Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2007, 2010, 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
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 1997, 2011, Oracle and/or its affiliates. All Rights Reserved.
|
||||
* Copyright (c) 1997, 2011, 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
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 1997, 2010, Oracle and/or its affiliates. All Rights Reserved.
|
||||
* Copyright (c) 1997, 2010, 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
|
||||
|
|
|
@ -3252,7 +3252,6 @@ bool os::unguard_memory(char* addr, size_t bytes) {
|
|||
// supported Solaris versions, this combination
|
||||
// is equivalent to +UseISM -UseMPSS.
|
||||
|
||||
typedef int (*getpagesizes_func_type) (size_t[], int);
|
||||
static size_t _large_page_size = 0;
|
||||
|
||||
bool os::Solaris::ism_sanity_check(bool warn, size_t * page_size) {
|
||||
|
@ -3284,23 +3283,29 @@ static void insertion_sort_descending(size_t* array, int len) {
|
|||
}
|
||||
|
||||
bool os::Solaris::mpss_sanity_check(bool warn, size_t * page_size) {
|
||||
getpagesizes_func_type getpagesizes_func =
|
||||
CAST_TO_FN_PTR(getpagesizes_func_type, dlsym(RTLD_DEFAULT, "getpagesizes"));
|
||||
if (getpagesizes_func == NULL) {
|
||||
if (warn) {
|
||||
warning("MPSS is not supported by the operating system.");
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
const unsigned int usable_count = VM_Version::page_size_count();
|
||||
if (usable_count == 1) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Find the right getpagesizes interface. When solaris 11 is the minimum
|
||||
// build platform, getpagesizes() (without the '2') can be called directly.
|
||||
typedef int (*gps_t)(size_t[], int);
|
||||
gps_t gps_func = CAST_TO_FN_PTR(gps_t, dlsym(RTLD_DEFAULT, "getpagesizes2"));
|
||||
if (gps_func == NULL) {
|
||||
gps_func = CAST_TO_FN_PTR(gps_t, dlsym(RTLD_DEFAULT, "getpagesizes"));
|
||||
if (gps_func == NULL) {
|
||||
if (warn) {
|
||||
warning("MPSS is not supported by the operating system.");
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// Fill the array of page sizes.
|
||||
int n = getpagesizes_func(_page_sizes, page_sizes_max);
|
||||
int n = (*gps_func)(_page_sizes, page_sizes_max);
|
||||
assert(n > 0, "Solaris bug?");
|
||||
|
||||
if (n == page_sizes_max) {
|
||||
// Add a sentinel value (necessary only if the array was completely filled
|
||||
// since it is static (zeroed at initialization)).
|
||||
|
@ -3308,6 +3313,7 @@ bool os::Solaris::mpss_sanity_check(bool warn, size_t * page_size) {
|
|||
DEBUG_ONLY(warning("increase the size of the os::_page_sizes array.");)
|
||||
}
|
||||
assert(_page_sizes[n] == 0, "missing sentinel");
|
||||
trace_page_sizes("available page sizes", _page_sizes, n);
|
||||
|
||||
if (n == 1) return false; // Only one page size available.
|
||||
|
||||
|
@ -3337,6 +3343,7 @@ bool os::Solaris::mpss_sanity_check(bool warn, size_t * page_size) {
|
|||
}
|
||||
*page_size = _page_sizes[0];
|
||||
|
||||
trace_page_sizes("usable page sizes", _page_sizes, end + 1);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
!!
|
||||
!! Copyright (c) 2005, 2008 Oracle and/or its affiliates. All rights reserved.
|
||||
!! Copyright (c) 2005, 2008, 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
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
Copyright (c) 2008 Oracle and/or its affiliates. All rights reserved.
|
||||
Copyright (c) 2008, 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
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2011, 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
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2007, 2011 Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2007, 2011, 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
|
||||
|
|
|
@ -963,10 +963,21 @@ void GenerateOopMap::init_basic_blocks() {
|
|||
// initialize the CellTypeState-related information.
|
||||
init_state();
|
||||
|
||||
// We allocate space for all state-vectors for all basicblocks in one huge chuck.
|
||||
// Then in the next part of the code, we set a pointer in each _basic_block that
|
||||
// points to each piece.
|
||||
CellTypeState *basicBlockState = NEW_RESOURCE_ARRAY(CellTypeState, bbNo * _state_len);
|
||||
// We allocate space for all state-vectors for all basicblocks in one huge
|
||||
// chunk. Then in the next part of the code, we set a pointer in each
|
||||
// _basic_block that points to each piece.
|
||||
|
||||
// The product of bbNo and _state_len can get large if there are lots of
|
||||
// basic blocks and stack/locals/monitors. Need to check to make sure
|
||||
// we don't overflow the capacity of a pointer.
|
||||
if ((unsigned)bbNo > UINTPTR_MAX / sizeof(CellTypeState) / _state_len) {
|
||||
report_error("The amount of memory required to analyze this method "
|
||||
"exceeds addressable range");
|
||||
return;
|
||||
}
|
||||
|
||||
CellTypeState *basicBlockState =
|
||||
NEW_RESOURCE_ARRAY(CellTypeState, bbNo * _state_len);
|
||||
memset(basicBlockState, 0, bbNo * _state_len * sizeof(CellTypeState));
|
||||
|
||||
// Make a pass over the basicblocks and assign their state vectors.
|
||||
|
|
|
@ -1232,6 +1232,17 @@ size_t os::page_size_for_region(size_t region_min_size, size_t region_max_size,
|
|||
}
|
||||
|
||||
#ifndef PRODUCT
|
||||
void os::trace_page_sizes(const char* str, const size_t* page_sizes, int count)
|
||||
{
|
||||
if (TracePageSizes) {
|
||||
tty->print("%s: ", str);
|
||||
for (int i = 0; i < count; ++i) {
|
||||
tty->print(" " SIZE_FORMAT, page_sizes[i]);
|
||||
}
|
||||
tty->cr();
|
||||
}
|
||||
}
|
||||
|
||||
void os::trace_page_sizes(const char* str, const size_t region_min_size,
|
||||
const size_t region_max_size, const size_t page_size,
|
||||
const char* base, const size_t size)
|
||||
|
|
|
@ -208,11 +208,13 @@ class os: AllStatic {
|
|||
size_t region_max_size,
|
||||
uint min_pages);
|
||||
|
||||
// Method for tracing page sizes returned by the above method; enabled by
|
||||
// Methods for tracing page sizes returned by the above method; enabled by
|
||||
// TracePageSizes. The region_{min,max}_size parameters should be the values
|
||||
// passed to page_size_for_region() and page_size should be the result of that
|
||||
// call. The (optional) base and size parameters should come from the
|
||||
// ReservedSpace base() and size() methods.
|
||||
static void trace_page_sizes(const char* str, const size_t* page_sizes,
|
||||
int count) PRODUCT_RETURN;
|
||||
static void trace_page_sizes(const char* str, const size_t region_min_size,
|
||||
const size_t region_max_size,
|
||||
const size_t page_size,
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2005, 2010 Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2005, 2010, 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
|
||||
|
|
86
hotspot/test/runtime/7020373/Test7020373.sh
Normal file
86
hotspot/test/runtime/7020373/Test7020373.sh
Normal file
|
@ -0,0 +1,86 @@
|
|||
#!/bin/sh
|
||||
|
||||
##
|
||||
## @test
|
||||
## @bug 7020373 7055247
|
||||
## @key cte_test
|
||||
## @summary JSR rewriting can overflow memory address size variables
|
||||
## @ignore Ignore it until 7053586 fixed
|
||||
## @run shell Test7020373.sh
|
||||
##
|
||||
|
||||
if [ "${TESTSRC}" = "" ]
|
||||
then TESTSRC=.
|
||||
fi
|
||||
|
||||
if [ "${TESTJAVA}" = "" ]
|
||||
then
|
||||
PARENT=`dirname \`which java\``
|
||||
TESTJAVA=`dirname ${PARENT}`
|
||||
echo "TESTJAVA not set, selecting " ${TESTJAVA}
|
||||
echo "If this is incorrect, try setting the variable manually."
|
||||
fi
|
||||
|
||||
if [ "${TESTCLASSES}" = "" ]
|
||||
then
|
||||
echo "TESTCLASSES not set. Test cannot execute. Failed."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
BIT_FLAG=""
|
||||
|
||||
# set platform-dependent variables
|
||||
OS=`uname -s`
|
||||
case "$OS" in
|
||||
SunOS | Linux )
|
||||
NULL=/dev/null
|
||||
PS=":"
|
||||
FS="/"
|
||||
## for solaris, linux it's HOME
|
||||
FILE_LOCATION=$HOME
|
||||
if [ -f ${FILE_LOCATION}${FS}JDK64BIT -a ${OS} = "SunOS" ]
|
||||
then
|
||||
BIT_FLAG=`cat ${FILE_LOCATION}${FS}JDK64BIT | grep -v '^#'`
|
||||
fi
|
||||
;;
|
||||
Windows_* )
|
||||
NULL=NUL
|
||||
PS=";"
|
||||
FS="\\"
|
||||
;;
|
||||
* )
|
||||
echo "Unrecognized system!"
|
||||
exit 1;
|
||||
;;
|
||||
esac
|
||||
|
||||
JEMMYPATH=${CPAPPEND}
|
||||
CLASSPATH=.${PS}${TESTCLASSES}${PS}${JEMMYPATH} ; export CLASSPATH
|
||||
|
||||
THIS_DIR=`pwd`
|
||||
|
||||
${TESTJAVA}${FS}bin${FS}java ${BIT_FLAG} -version
|
||||
|
||||
${TESTJAVA}${FS}bin${FS}jar xvf ${TESTSRC}${FS}testcase.jar
|
||||
|
||||
${TESTJAVA}${FS}bin${FS}java ${BIT_FLAG} OOMCrashClass4000_1 > test.out 2>&1
|
||||
|
||||
cat test.out
|
||||
|
||||
egrep "SIGSEGV|An unexpected error has been detected" test.out
|
||||
|
||||
if [ $? = 0 ]
|
||||
then
|
||||
echo "Test Failed"
|
||||
exit 1
|
||||
else
|
||||
grep "java.lang.LinkageError" test.out
|
||||
if [ $? = 0 ]
|
||||
then
|
||||
echo "Test Passed"
|
||||
exit 0
|
||||
else
|
||||
echo "Test Failed"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
Loading…
Add table
Add a link
Reference in a new issue