mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-27 14:54:52 +02:00
Merge
This commit is contained in:
commit
706efde6df
47 changed files with 393 additions and 458 deletions
|
@ -3,7 +3,7 @@
|
||||||
#
|
#
|
||||||
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2002, 2011, Oracle and/or its affiliates. All rights reserved.
|
# Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
#
|
#
|
||||||
# This code is free software; you can redistribute it and/or modify it
|
# This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -205,7 +205,6 @@ SUNWprivate_1.1 {
|
||||||
JVM_NewMultiArray;
|
JVM_NewMultiArray;
|
||||||
JVM_OnExit;
|
JVM_OnExit;
|
||||||
JVM_Open;
|
JVM_Open;
|
||||||
JVM_PrintStackTrace;
|
|
||||||
JVM_RaiseSignal;
|
JVM_RaiseSignal;
|
||||||
JVM_RawMonitorCreate;
|
JVM_RawMonitorCreate;
|
||||||
JVM_RawMonitorDestroy;
|
JVM_RawMonitorDestroy;
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
#
|
#
|
||||||
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2002, 2011, Oracle and/or its affiliates. All rights reserved.
|
# Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
#
|
#
|
||||||
# This code is free software; you can redistribute it and/or modify it
|
# This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -205,7 +205,6 @@ SUNWprivate_1.1 {
|
||||||
JVM_NewMultiArray;
|
JVM_NewMultiArray;
|
||||||
JVM_OnExit;
|
JVM_OnExit;
|
||||||
JVM_Open;
|
JVM_Open;
|
||||||
JVM_PrintStackTrace;
|
|
||||||
JVM_RaiseSignal;
|
JVM_RaiseSignal;
|
||||||
JVM_RawMonitorCreate;
|
JVM_RawMonitorCreate;
|
||||||
JVM_RawMonitorDestroy;
|
JVM_RawMonitorDestroy;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#
|
#
|
||||||
# Copyright (c) 2002, 2011, Oracle and/or its affiliates. All rights reserved.
|
# Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
#
|
#
|
||||||
# This code is free software; you can redistribute it and/or modify it
|
# This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -201,7 +201,6 @@ SUNWprivate_1.1 {
|
||||||
JVM_NewMultiArray;
|
JVM_NewMultiArray;
|
||||||
JVM_OnExit;
|
JVM_OnExit;
|
||||||
JVM_Open;
|
JVM_Open;
|
||||||
JVM_PrintStackTrace;
|
|
||||||
JVM_RaiseSignal;
|
JVM_RaiseSignal;
|
||||||
JVM_RawMonitorCreate;
|
JVM_RawMonitorCreate;
|
||||||
JVM_RawMonitorDestroy;
|
JVM_RawMonitorDestroy;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#
|
#
|
||||||
# Copyright (c) 2002, 2011, Oracle and/or its affiliates. All rights reserved.
|
# Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
#
|
#
|
||||||
# This code is free software; you can redistribute it and/or modify it
|
# This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -201,7 +201,6 @@ SUNWprivate_1.1 {
|
||||||
JVM_NewMultiArray;
|
JVM_NewMultiArray;
|
||||||
JVM_OnExit;
|
JVM_OnExit;
|
||||||
JVM_Open;
|
JVM_Open;
|
||||||
JVM_PrintStackTrace;
|
|
||||||
JVM_RaiseSignal;
|
JVM_RaiseSignal;
|
||||||
JVM_RawMonitorCreate;
|
JVM_RawMonitorCreate;
|
||||||
JVM_RawMonitorDestroy;
|
JVM_RawMonitorDestroy;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#
|
#
|
||||||
# Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
|
# Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
#
|
#
|
||||||
# This code is free software; you can redistribute it and/or modify it
|
# This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -201,7 +201,6 @@ SUNWprivate_1.1 {
|
||||||
JVM_NewMultiArray;
|
JVM_NewMultiArray;
|
||||||
JVM_OnExit;
|
JVM_OnExit;
|
||||||
JVM_Open;
|
JVM_Open;
|
||||||
JVM_PrintStackTrace;
|
|
||||||
JVM_RaiseSignal;
|
JVM_RaiseSignal;
|
||||||
JVM_RawMonitorCreate;
|
JVM_RawMonitorCreate;
|
||||||
JVM_RawMonitorDestroy;
|
JVM_RawMonitorDestroy;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -38,14 +38,9 @@
|
||||||
|
|
||||||
#define JNICALL
|
#define JNICALL
|
||||||
typedef int jint;
|
typedef int jint;
|
||||||
#if defined(_LP64) && !defined(__APPLE__)
|
#if defined(_LP64)
|
||||||
typedef long jlong;
|
typedef long jlong;
|
||||||
#else
|
#else
|
||||||
/*
|
|
||||||
* On _LP64 __APPLE__ "long" and "long long" are both 64 bits,
|
|
||||||
* but we use the "long long" typedef to avoid complaints from
|
|
||||||
* the __APPLE__ compiler about fprintf formats.
|
|
||||||
*/
|
|
||||||
typedef long long jlong;
|
typedef long long jlong;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -243,29 +243,32 @@ void os::Bsd::initialize_system_info() {
|
||||||
int mib[2];
|
int mib[2];
|
||||||
size_t len;
|
size_t len;
|
||||||
int cpu_val;
|
int cpu_val;
|
||||||
u_long mem_val;
|
julong mem_val;
|
||||||
|
|
||||||
/* get processors count via hw.ncpus sysctl */
|
/* get processors count via hw.ncpus sysctl */
|
||||||
mib[0] = CTL_HW;
|
mib[0] = CTL_HW;
|
||||||
mib[1] = HW_NCPU;
|
mib[1] = HW_NCPU;
|
||||||
len = sizeof(cpu_val);
|
len = sizeof(cpu_val);
|
||||||
if (sysctl(mib, 2, &cpu_val, &len, NULL, 0) != -1 && cpu_val >= 1) {
|
if (sysctl(mib, 2, &cpu_val, &len, NULL, 0) != -1 && cpu_val >= 1) {
|
||||||
|
assert(len == sizeof(cpu_val), "unexpected data size");
|
||||||
set_processor_count(cpu_val);
|
set_processor_count(cpu_val);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
set_processor_count(1); // fallback
|
set_processor_count(1); // fallback
|
||||||
}
|
}
|
||||||
|
|
||||||
/* get physical memory via hw.usermem sysctl (hw.usermem is used
|
/* get physical memory via hw.memsize sysctl (hw.memsize is used
|
||||||
* instead of hw.physmem because we need size of allocatable memory
|
* since it returns a 64 bit value)
|
||||||
*/
|
*/
|
||||||
mib[0] = CTL_HW;
|
mib[0] = CTL_HW;
|
||||||
mib[1] = HW_USERMEM;
|
mib[1] = HW_MEMSIZE;
|
||||||
len = sizeof(mem_val);
|
len = sizeof(mem_val);
|
||||||
if (sysctl(mib, 2, &mem_val, &len, NULL, 0) != -1)
|
if (sysctl(mib, 2, &mem_val, &len, NULL, 0) != -1) {
|
||||||
|
assert(len == sizeof(mem_val), "unexpected data size");
|
||||||
_physical_memory = mem_val;
|
_physical_memory = mem_val;
|
||||||
else
|
} else {
|
||||||
_physical_memory = 256*1024*1024; // fallback (XXXBSD?)
|
_physical_memory = 256*1024*1024; // fallback (XXXBSD?)
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef __OpenBSD__
|
#ifdef __OpenBSD__
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -59,14 +59,6 @@ inline const char* os::path_separator() {
|
||||||
return ":";
|
return ":";
|
||||||
}
|
}
|
||||||
|
|
||||||
inline const char* os::jlong_format_specifier() {
|
|
||||||
return "%lld";
|
|
||||||
}
|
|
||||||
|
|
||||||
inline const char* os::julong_format_specifier() {
|
|
||||||
return "%llu";
|
|
||||||
}
|
|
||||||
|
|
||||||
// File names are case-sensitive on windows only
|
// File names are case-sensitive on windows only
|
||||||
inline int os::file_name_strcmp(const char* s1, const char* s2) {
|
inline int os::file_name_strcmp(const char* s1, const char* s2) {
|
||||||
return strcmp(s1, s2);
|
return strcmp(s1, s2);
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -68,14 +68,6 @@ inline const char* os::path_separator() {
|
||||||
return ":";
|
return ":";
|
||||||
}
|
}
|
||||||
|
|
||||||
inline const char* os::jlong_format_specifier() {
|
|
||||||
return "%lld";
|
|
||||||
}
|
|
||||||
|
|
||||||
inline const char* os::julong_format_specifier() {
|
|
||||||
return "%llu";
|
|
||||||
}
|
|
||||||
|
|
||||||
// File names are case-sensitive on windows only
|
// File names are case-sensitive on windows only
|
||||||
inline int os::file_name_strcmp(const char* s1, const char* s2) {
|
inline int os::file_name_strcmp(const char* s1, const char* s2) {
|
||||||
return strcmp(s1, s2);
|
return strcmp(s1, s2);
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -1876,11 +1876,6 @@ void SplashFreeLibrary() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *
|
|
||||||
jlong_format_specifier() {
|
|
||||||
return "%lld";
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Block current thread and continue execution in a new thread
|
* Block current thread and continue execution in a new thread
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -64,6 +64,12 @@
|
||||||
#define Counter2Micros(counts) (1)
|
#define Counter2Micros(counts) (1)
|
||||||
#endif /* HAVE_GETHRTIME */
|
#endif /* HAVE_GETHRTIME */
|
||||||
|
|
||||||
|
#ifdef _LP64
|
||||||
|
#define JLONG_FORMAT "%ld"
|
||||||
|
#else
|
||||||
|
#define JLONG_FORMAT "%lld"
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Function prototypes.
|
* Function prototypes.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -50,9 +50,6 @@ inline const char* os::file_separator() { return "/"; }
|
||||||
inline const char* os::line_separator() { return "\n"; }
|
inline const char* os::line_separator() { return "\n"; }
|
||||||
inline const char* os::path_separator() { return ":"; }
|
inline const char* os::path_separator() { return ":"; }
|
||||||
|
|
||||||
inline const char* os::jlong_format_specifier() { return "%lld"; }
|
|
||||||
inline const char* os::julong_format_specifier() { return "%llu"; }
|
|
||||||
|
|
||||||
// File names are case-sensitive on windows only
|
// File names are case-sensitive on windows only
|
||||||
inline int os::file_name_strcmp(const char* s1, const char* s2) {
|
inline int os::file_name_strcmp(const char* s1, const char* s2) {
|
||||||
return strcmp(s1, s2);
|
return strcmp(s1, s2);
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -1323,11 +1323,6 @@ void SplashFreeLibrary() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *
|
|
||||||
jlong_format_specifier() {
|
|
||||||
return "%I64d";
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Block current thread and continue execution in a new thread
|
* Block current thread and continue execution in a new thread
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -69,6 +69,8 @@ extern jlong Counter2Micros(jlong counts);
|
||||||
extern int _main(int argc, char **argv);
|
extern int _main(int argc, char **argv);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define JLONG_FORMAT "%I64d"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Function prototypes.
|
* Function prototypes.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -2946,7 +2946,7 @@ char* os::pd_reserve_memory(size_t bytes, char* addr, size_t alignment_hint) {
|
||||||
}
|
}
|
||||||
if( Verbose && PrintMiscellaneous ) {
|
if( Verbose && PrintMiscellaneous ) {
|
||||||
reserveTimer.stop();
|
reserveTimer.stop();
|
||||||
tty->print_cr("reserve_memory of %Ix bytes took %ld ms (%ld ticks)", bytes,
|
tty->print_cr("reserve_memory of %Ix bytes took " JLONG_FORMAT " ms (" JLONG_FORMAT " ticks)", bytes,
|
||||||
reserveTimer.milliseconds(), reserveTimer.ticks());
|
reserveTimer.milliseconds(), reserveTimer.ticks());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4305,7 +4305,7 @@ char* os::pd_map_memory(int fd, const char* file_name, size_t file_offset,
|
||||||
if (hFile == NULL) {
|
if (hFile == NULL) {
|
||||||
if (PrintMiscellaneous && Verbose) {
|
if (PrintMiscellaneous && Verbose) {
|
||||||
DWORD err = GetLastError();
|
DWORD err = GetLastError();
|
||||||
tty->print_cr("CreateFile() failed: GetLastError->%ld.");
|
tty->print_cr("CreateFile() failed: GetLastError->%ld.", err);
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -4355,7 +4355,7 @@ char* os::pd_map_memory(int fd, const char* file_name, size_t file_offset,
|
||||||
if (hMap == NULL) {
|
if (hMap == NULL) {
|
||||||
if (PrintMiscellaneous && Verbose) {
|
if (PrintMiscellaneous && Verbose) {
|
||||||
DWORD err = GetLastError();
|
DWORD err = GetLastError();
|
||||||
tty->print_cr("CreateFileMapping() failed: GetLastError->%ld.");
|
tty->print_cr("CreateFileMapping() failed: GetLastError->%ld.", err);
|
||||||
}
|
}
|
||||||
CloseHandle(hFile);
|
CloseHandle(hFile);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -38,9 +38,6 @@ inline const char* os::line_separator() { return "\r\n"; }
|
||||||
inline const char* os::path_separator() { return ";"; }
|
inline const char* os::path_separator() { return ";"; }
|
||||||
inline const char* os::dll_file_extension() { return ".dll"; }
|
inline const char* os::dll_file_extension() { return ".dll"; }
|
||||||
|
|
||||||
inline const char* os::jlong_format_specifier() { return "%I64d"; }
|
|
||||||
inline const char* os::julong_format_specifier() { return "%I64u"; }
|
|
||||||
|
|
||||||
inline const int os::default_file_open_flags() { return O_BINARY | O_NOINHERIT;}
|
inline const int os::default_file_open_flags() { return O_BINARY | O_NOINHERIT;}
|
||||||
|
|
||||||
// File names are case-insensitive on windows only
|
// File names are case-insensitive on windows only
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -808,7 +808,7 @@ CheckJvmType(int *pargc, char ***argv, jboolean speculative) {
|
||||||
static int
|
static int
|
||||||
parse_stack_size(const char *s, jlong *result) {
|
parse_stack_size(const char *s, jlong *result) {
|
||||||
jlong n = 0;
|
jlong n = 0;
|
||||||
int args_read = sscanf(s, jlong_format_specifier(), &n);
|
int args_read = sscanf(s, JLONG_FORMAT, &n);
|
||||||
if (args_read != 1) {
|
if (args_read != 1) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -86,7 +86,6 @@ void ReportExceptionDescription(JNIEnv * env);
|
||||||
jboolean RemovableMachineDependentOption(char * option);
|
jboolean RemovableMachineDependentOption(char * option);
|
||||||
void PrintMachineDependentOptions();
|
void PrintMachineDependentOptions();
|
||||||
|
|
||||||
const char *jlong_format_specifier();
|
|
||||||
/*
|
/*
|
||||||
* Block current thread and continue execution in new thread
|
* Block current thread and continue execution in new thread
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -360,7 +360,7 @@ void InstructionPrinter::do_Constant(Constant* x) {
|
||||||
ValueType* t = x->type();
|
ValueType* t = x->type();
|
||||||
switch (t->tag()) {
|
switch (t->tag()) {
|
||||||
case intTag : output()->print("%d" , t->as_IntConstant ()->value()); break;
|
case intTag : output()->print("%d" , t->as_IntConstant ()->value()); break;
|
||||||
case longTag : output()->print(os::jlong_format_specifier(), t->as_LongConstant()->value()); output()->print("L"); break;
|
case longTag : output()->print(JLONG_FORMAT, t->as_LongConstant()->value()); output()->print("L"); break;
|
||||||
case floatTag : output()->print("%g" , t->as_FloatConstant ()->value()); break;
|
case floatTag : output()->print("%g" , t->as_FloatConstant ()->value()); break;
|
||||||
case doubleTag : output()->print("%gD" , t->as_DoubleConstant()->value()); break;
|
case doubleTag : output()->print("%gD" , t->as_DoubleConstant()->value()); break;
|
||||||
case objectTag : print_object(x); break;
|
case objectTag : print_object(x); break;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -1563,7 +1563,7 @@ void LIR_Const::print_value_on(outputStream* out) const {
|
||||||
switch (type()) {
|
switch (type()) {
|
||||||
case T_ADDRESS:out->print("address:%d",as_jint()); break;
|
case T_ADDRESS:out->print("address:%d",as_jint()); break;
|
||||||
case T_INT: out->print("int:%d", as_jint()); break;
|
case T_INT: out->print("int:%d", as_jint()); break;
|
||||||
case T_LONG: out->print("lng:%lld", as_jlong()); break;
|
case T_LONG: out->print("lng:" JLONG_FORMAT, as_jlong()); break;
|
||||||
case T_FLOAT: out->print("flt:%f", as_jfloat()); break;
|
case T_FLOAT: out->print("flt:%f", as_jfloat()); break;
|
||||||
case T_DOUBLE: out->print("dbl:%f", as_jdouble()); break;
|
case T_DOUBLE: out->print("dbl:%f", as_jdouble()); break;
|
||||||
case T_OBJECT: out->print("obj:0x%x", as_jobject()); break;
|
case T_OBJECT: out->print("obj:0x%x", as_jobject()); break;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
|
/* Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -645,7 +645,7 @@ class CompileReplay : public StackObj {
|
||||||
java_mirror->bool_field_put(fd.offset(), value);
|
java_mirror->bool_field_put(fd.offset(), value);
|
||||||
} else if (strcmp(field_signature, "J") == 0) {
|
} else if (strcmp(field_signature, "J") == 0) {
|
||||||
jlong value;
|
jlong value;
|
||||||
if (sscanf(string_value, INT64_FORMAT, &value) != 1) {
|
if (sscanf(string_value, JLONG_FORMAT, &value) != 1) {
|
||||||
fprintf(stderr, "Error parsing long: %s\n", string_value);
|
fprintf(stderr, "Error parsing long: %s\n", string_value);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -1145,179 +1145,43 @@ void java_lang_Throwable::print(Handle throwable, outputStream* st) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Print stack trace element to resource allocated buffer
|
// After this many redefines, the stack trace is unreliable.
|
||||||
char* java_lang_Throwable::print_stack_element_to_buffer(Method* method, int bci) {
|
const int MAX_VERSION = USHRT_MAX;
|
||||||
// Get strings and string lengths
|
|
||||||
InstanceKlass* klass = method->method_holder();
|
// Helper backtrace functions to store bci|version together.
|
||||||
const char* klass_name = klass->external_name();
|
static inline int merge_bci_and_version(int bci, int version) {
|
||||||
int buf_len = (int)strlen(klass_name);
|
// only store u2 for version, checking for overflow.
|
||||||
char* source_file_name;
|
if (version > USHRT_MAX || version < 0) version = MAX_VERSION;
|
||||||
if (klass->source_file_name() == NULL) {
|
assert((jushort)bci == bci, "bci should be short");
|
||||||
source_file_name = NULL;
|
return build_int_from_shorts(version, bci);
|
||||||
} else {
|
|
||||||
source_file_name = klass->source_file_name()->as_C_string();
|
|
||||||
buf_len += (int)strlen(source_file_name);
|
|
||||||
}
|
}
|
||||||
char* method_name = method->name()->as_C_string();
|
|
||||||
buf_len += (int)strlen(method_name);
|
|
||||||
|
|
||||||
// Allocate temporary buffer with extra space for formatting and line number
|
static inline int bci_at(unsigned int merged) {
|
||||||
char* buf = NEW_RESOURCE_ARRAY(char, buf_len + 64);
|
return extract_high_short_from_int(merged);
|
||||||
|
}
|
||||||
|
static inline int version_at(unsigned int merged) {
|
||||||
|
return extract_low_short_from_int(merged);
|
||||||
|
}
|
||||||
|
|
||||||
// Print stack trace line in buffer
|
static inline bool version_matches(Method* method, int version) {
|
||||||
sprintf(buf, "\tat %s.%s", klass_name, method_name);
|
return (method->constants()->version() == version && version < MAX_VERSION);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline int get_line_number(Method* method, int bci) {
|
||||||
|
int line_number = 0;
|
||||||
if (method->is_native()) {
|
if (method->is_native()) {
|
||||||
strcat(buf, "(Native Method)");
|
// Negative value different from -1 below, enabling Java code in
|
||||||
|
// class java.lang.StackTraceElement to distinguish "native" from
|
||||||
|
// "no LineNumberTable". JDK tests for -2.
|
||||||
|
line_number = -2;
|
||||||
} else {
|
} else {
|
||||||
int line_number = method->line_number_from_bci(bci);
|
// Returns -1 if no LineNumberTable, and otherwise actual line number
|
||||||
if (source_file_name != NULL && (line_number != -1)) {
|
line_number = method->line_number_from_bci(bci);
|
||||||
// Sourcename and linenumber
|
if (line_number == -1 && ShowHiddenFrames) {
|
||||||
sprintf(buf + (int)strlen(buf), "(%s:%d)", source_file_name, line_number);
|
line_number = bci + 1000000;
|
||||||
} else if (source_file_name != NULL) {
|
|
||||||
// Just sourcename
|
|
||||||
sprintf(buf + (int)strlen(buf), "(%s)", source_file_name);
|
|
||||||
} else {
|
|
||||||
// Neither soucename and linenumber
|
|
||||||
sprintf(buf + (int)strlen(buf), "(Unknown Source)");
|
|
||||||
}
|
|
||||||
nmethod* nm = method->code();
|
|
||||||
if (WizardMode && nm != NULL) {
|
|
||||||
sprintf(buf + (int)strlen(buf), "(nmethod " INTPTR_FORMAT ")", (intptr_t)nm);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return line_number;
|
||||||
return buf;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void java_lang_Throwable::print_stack_element(Handle stream, Method* method, int bci) {
|
|
||||||
ResourceMark rm;
|
|
||||||
char* buf = print_stack_element_to_buffer(method, bci);
|
|
||||||
print_to_stream(stream, buf);
|
|
||||||
}
|
|
||||||
|
|
||||||
void java_lang_Throwable::print_stack_element(outputStream *st, Method* method, int bci) {
|
|
||||||
ResourceMark rm;
|
|
||||||
char* buf = print_stack_element_to_buffer(method, bci);
|
|
||||||
st->print_cr("%s", buf);
|
|
||||||
}
|
|
||||||
|
|
||||||
void java_lang_Throwable::print_to_stream(Handle stream, const char* str) {
|
|
||||||
if (stream.is_null()) {
|
|
||||||
tty->print_cr("%s", str);
|
|
||||||
} else {
|
|
||||||
EXCEPTION_MARK;
|
|
||||||
JavaValue result(T_VOID);
|
|
||||||
Handle arg (THREAD, oopFactory::new_charArray(str, THREAD));
|
|
||||||
if (!HAS_PENDING_EXCEPTION) {
|
|
||||||
JavaCalls::call_virtual(&result,
|
|
||||||
stream,
|
|
||||||
KlassHandle(THREAD, stream->klass()),
|
|
||||||
vmSymbols::println_name(),
|
|
||||||
vmSymbols::char_array_void_signature(),
|
|
||||||
arg,
|
|
||||||
THREAD);
|
|
||||||
}
|
|
||||||
// Ignore any exceptions. we are in the middle of exception handling. Same as classic VM.
|
|
||||||
if (HAS_PENDING_EXCEPTION) CLEAR_PENDING_EXCEPTION;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
const char* java_lang_Throwable::no_stack_trace_message() {
|
|
||||||
return "\t<<no stack trace available>>";
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Currently used only for exceptions occurring during startup
|
|
||||||
void java_lang_Throwable::print_stack_trace(oop throwable, outputStream* st) {
|
|
||||||
Thread *THREAD = Thread::current();
|
|
||||||
Handle h_throwable(THREAD, throwable);
|
|
||||||
while (h_throwable.not_null()) {
|
|
||||||
objArrayHandle result (THREAD, objArrayOop(backtrace(h_throwable())));
|
|
||||||
if (result.is_null()) {
|
|
||||||
st->print_cr(no_stack_trace_message());
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
while (result.not_null()) {
|
|
||||||
typeArrayHandle methods (THREAD,
|
|
||||||
typeArrayOop(result->obj_at(trace_methods_offset)));
|
|
||||||
typeArrayHandle bcis (THREAD,
|
|
||||||
typeArrayOop(result->obj_at(trace_bcis_offset)));
|
|
||||||
|
|
||||||
if (methods.is_null() || bcis.is_null()) {
|
|
||||||
st->print_cr(no_stack_trace_message());
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
int length = methods()->length();
|
|
||||||
for (int index = 0; index < length; index++) {
|
|
||||||
Method* method = ((Method*)methods()->metadata_at(index));
|
|
||||||
if (method == NULL) goto handle_cause;
|
|
||||||
int bci = bcis->ushort_at(index);
|
|
||||||
print_stack_element(st, method, bci);
|
|
||||||
}
|
|
||||||
result = objArrayHandle(THREAD, objArrayOop(result->obj_at(trace_next_offset)));
|
|
||||||
}
|
|
||||||
handle_cause:
|
|
||||||
{
|
|
||||||
EXCEPTION_MARK;
|
|
||||||
JavaValue result(T_OBJECT);
|
|
||||||
JavaCalls::call_virtual(&result,
|
|
||||||
h_throwable,
|
|
||||||
KlassHandle(THREAD, h_throwable->klass()),
|
|
||||||
vmSymbols::getCause_name(),
|
|
||||||
vmSymbols::void_throwable_signature(),
|
|
||||||
THREAD);
|
|
||||||
// Ignore any exceptions. we are in the middle of exception handling. Same as classic VM.
|
|
||||||
if (HAS_PENDING_EXCEPTION) {
|
|
||||||
CLEAR_PENDING_EXCEPTION;
|
|
||||||
h_throwable = Handle();
|
|
||||||
} else {
|
|
||||||
h_throwable = Handle(THREAD, (oop) result.get_jobject());
|
|
||||||
if (h_throwable.not_null()) {
|
|
||||||
st->print("Caused by: ");
|
|
||||||
print(h_throwable, st);
|
|
||||||
st->cr();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void java_lang_Throwable::print_stack_trace(oop throwable, oop print_stream) {
|
|
||||||
// Note: this is no longer used in Merlin, but we support it for compatibility.
|
|
||||||
Thread *thread = Thread::current();
|
|
||||||
Handle stream(thread, print_stream);
|
|
||||||
objArrayHandle result (thread, objArrayOop(backtrace(throwable)));
|
|
||||||
if (result.is_null()) {
|
|
||||||
print_to_stream(stream, no_stack_trace_message());
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
while (result.not_null()) {
|
|
||||||
typeArrayHandle methods(thread,
|
|
||||||
typeArrayOop(result->obj_at(trace_methods_offset)));
|
|
||||||
typeArrayHandle bcis (thread,
|
|
||||||
typeArrayOop(result->obj_at(trace_bcis_offset)));
|
|
||||||
|
|
||||||
if (methods.is_null() || bcis.is_null()) {
|
|
||||||
print_to_stream(stream, no_stack_trace_message());
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
int length = methods()->length();
|
|
||||||
for (int index = 0; index < length; index++) {
|
|
||||||
Method* method = ((Method*)methods()->metadata_at(index));
|
|
||||||
if (method == NULL) return;
|
|
||||||
int bci = bcis->ushort_at(index);
|
|
||||||
print_stack_element(stream, method, bci);
|
|
||||||
}
|
|
||||||
result = objArrayHandle(thread, objArrayOop(result->obj_at(trace_next_offset)));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// This class provides a simple wrapper over the internal structure of
|
// This class provides a simple wrapper over the internal structure of
|
||||||
|
@ -1344,6 +1208,23 @@ class BacktraceBuilder: public StackObj {
|
||||||
trace_chunk_size = java_lang_Throwable::trace_chunk_size
|
trace_chunk_size = java_lang_Throwable::trace_chunk_size
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// get info out of chunks
|
||||||
|
static typeArrayOop get_methods(objArrayHandle chunk) {
|
||||||
|
typeArrayOop methods = typeArrayOop(chunk->obj_at(trace_methods_offset));
|
||||||
|
assert(methods != NULL, "method array should be initialized in backtrace");
|
||||||
|
return methods;
|
||||||
|
}
|
||||||
|
static typeArrayOop get_bcis(objArrayHandle chunk) {
|
||||||
|
typeArrayOop bcis = typeArrayOop(chunk->obj_at(trace_bcis_offset));
|
||||||
|
assert(bcis != NULL, "bci array should be initialized in backtrace");
|
||||||
|
return bcis;
|
||||||
|
}
|
||||||
|
static objArrayOop get_mirrors(objArrayHandle chunk) {
|
||||||
|
objArrayOop mirrors = objArrayOop(chunk->obj_at(trace_mirrors_offset));
|
||||||
|
assert(mirrors != NULL, "mirror array should be initialized in backtrace");
|
||||||
|
return mirrors;
|
||||||
|
}
|
||||||
|
|
||||||
// constructor for new backtrace
|
// constructor for new backtrace
|
||||||
BacktraceBuilder(TRAPS): _methods(NULL), _bcis(NULL), _head(NULL), _mirrors(NULL) {
|
BacktraceBuilder(TRAPS): _methods(NULL), _bcis(NULL), _head(NULL), _mirrors(NULL) {
|
||||||
expand(CHECK);
|
expand(CHECK);
|
||||||
|
@ -1351,6 +1232,19 @@ class BacktraceBuilder: public StackObj {
|
||||||
_index = 0;
|
_index = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BacktraceBuilder(objArrayHandle backtrace) {
|
||||||
|
_methods = get_methods(backtrace);
|
||||||
|
_bcis = get_bcis(backtrace);
|
||||||
|
_mirrors = get_mirrors(backtrace);
|
||||||
|
assert(_methods->length() == _bcis->length() &&
|
||||||
|
_methods->length() == _mirrors->length(),
|
||||||
|
"method and source information arrays should match");
|
||||||
|
|
||||||
|
// head is the preallocated backtrace
|
||||||
|
_backtrace = _head = backtrace();
|
||||||
|
_index = 0;
|
||||||
|
}
|
||||||
|
|
||||||
void expand(TRAPS) {
|
void expand(TRAPS) {
|
||||||
objArrayHandle old_head(THREAD, _head);
|
objArrayHandle old_head(THREAD, _head);
|
||||||
Pause_No_Safepoint_Verifier pnsv(&_nsv);
|
Pause_No_Safepoint_Verifier pnsv(&_nsv);
|
||||||
|
@ -1358,10 +1252,10 @@ class BacktraceBuilder: public StackObj {
|
||||||
objArrayOop head = oopFactory::new_objectArray(trace_size, CHECK);
|
objArrayOop head = oopFactory::new_objectArray(trace_size, CHECK);
|
||||||
objArrayHandle new_head(THREAD, head);
|
objArrayHandle new_head(THREAD, head);
|
||||||
|
|
||||||
typeArrayOop methods = oopFactory::new_metaDataArray(trace_chunk_size, CHECK);
|
typeArrayOop methods = oopFactory::new_shortArray(trace_chunk_size, CHECK);
|
||||||
typeArrayHandle new_methods(THREAD, methods);
|
typeArrayHandle new_methods(THREAD, methods);
|
||||||
|
|
||||||
typeArrayOop bcis = oopFactory::new_shortArray(trace_chunk_size, CHECK);
|
typeArrayOop bcis = oopFactory::new_intArray(trace_chunk_size, CHECK);
|
||||||
typeArrayHandle new_bcis(THREAD, bcis);
|
typeArrayHandle new_bcis(THREAD, bcis);
|
||||||
|
|
||||||
objArrayOop mirrors = oopFactory::new_objectArray(trace_chunk_size, CHECK);
|
objArrayOop mirrors = oopFactory::new_objectArray(trace_chunk_size, CHECK);
|
||||||
|
@ -1390,7 +1284,6 @@ class BacktraceBuilder: public StackObj {
|
||||||
// shorts. The later line number lookup would just smear the -1
|
// shorts. The later line number lookup would just smear the -1
|
||||||
// to a 0 even if it could be recorded.
|
// to a 0 even if it could be recorded.
|
||||||
if (bci == SynchronizationEntryBCI) bci = 0;
|
if (bci == SynchronizationEntryBCI) bci = 0;
|
||||||
assert(bci == (jushort)bci, "doesn't fit");
|
|
||||||
|
|
||||||
if (_index >= trace_chunk_size) {
|
if (_index >= trace_chunk_size) {
|
||||||
methodHandle mhandle(THREAD, method);
|
methodHandle mhandle(THREAD, method);
|
||||||
|
@ -1398,26 +1291,148 @@ class BacktraceBuilder: public StackObj {
|
||||||
method = mhandle();
|
method = mhandle();
|
||||||
}
|
}
|
||||||
|
|
||||||
_methods->metadata_at_put(_index, method);
|
_methods->short_at_put(_index, method->method_idnum());
|
||||||
_bcis->ushort_at_put(_index, bci);
|
_bcis->int_at_put(_index, merge_bci_and_version(bci, method->constants()->version()));
|
||||||
// we need to save the mirrors in the backtrace to keep the methods from
|
|
||||||
// being unloaded if their class loader is unloaded while we still have
|
// We need to save the mirrors in the backtrace to keep the class
|
||||||
// this stack trace.
|
// from being unloaded while we still have this stack trace.
|
||||||
|
assert(method->method_holder()->java_mirror() != NULL, "never push null for mirror");
|
||||||
_mirrors->obj_at_put(_index, method->method_holder()->java_mirror());
|
_mirrors->obj_at_put(_index, method->method_holder()->java_mirror());
|
||||||
_index++;
|
_index++;
|
||||||
}
|
}
|
||||||
|
|
||||||
Method* current_method() {
|
|
||||||
assert(_index >= 0 && _index < trace_chunk_size, "out of range");
|
|
||||||
return ((Method*)_methods->metadata_at(_index));
|
|
||||||
}
|
|
||||||
|
|
||||||
jushort current_bci() {
|
|
||||||
assert(_index >= 0 && _index < trace_chunk_size, "out of range");
|
|
||||||
return _bcis->ushort_at(_index);
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Print stack trace element to resource allocated buffer
|
||||||
|
char* java_lang_Throwable::print_stack_element_to_buffer(Handle mirror,
|
||||||
|
int method_id, int version, int bci) {
|
||||||
|
|
||||||
|
// Get strings and string lengths
|
||||||
|
InstanceKlass* holder = InstanceKlass::cast(java_lang_Class::as_Klass(mirror()));
|
||||||
|
const char* klass_name = holder->external_name();
|
||||||
|
int buf_len = (int)strlen(klass_name);
|
||||||
|
|
||||||
|
// pushing to the stack trace added one.
|
||||||
|
Method* method = holder->method_with_idnum(method_id);
|
||||||
|
char* method_name = method->name()->as_C_string();
|
||||||
|
buf_len += (int)strlen(method_name);
|
||||||
|
|
||||||
|
char* source_file_name = NULL;
|
||||||
|
if (version_matches(method, version)) {
|
||||||
|
Symbol* source = holder->source_file_name();
|
||||||
|
if (source != NULL) {
|
||||||
|
source_file_name = source->as_C_string();
|
||||||
|
buf_len += (int)strlen(source_file_name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Allocate temporary buffer with extra space for formatting and line number
|
||||||
|
char* buf = NEW_RESOURCE_ARRAY(char, buf_len + 64);
|
||||||
|
|
||||||
|
// Print stack trace line in buffer
|
||||||
|
sprintf(buf, "\tat %s.%s", klass_name, method_name);
|
||||||
|
|
||||||
|
if (!version_matches(method, version)) {
|
||||||
|
strcat(buf, "(Redefined)");
|
||||||
|
} else {
|
||||||
|
int line_number = get_line_number(method, bci);
|
||||||
|
if (line_number == -2) {
|
||||||
|
strcat(buf, "(Native Method)");
|
||||||
|
} else {
|
||||||
|
if (source_file_name != NULL && (line_number != -1)) {
|
||||||
|
// Sourcename and linenumber
|
||||||
|
sprintf(buf + (int)strlen(buf), "(%s:%d)", source_file_name, line_number);
|
||||||
|
} else if (source_file_name != NULL) {
|
||||||
|
// Just sourcename
|
||||||
|
sprintf(buf + (int)strlen(buf), "(%s)", source_file_name);
|
||||||
|
} else {
|
||||||
|
// Neither sourcename nor linenumber
|
||||||
|
sprintf(buf + (int)strlen(buf), "(Unknown Source)");
|
||||||
|
}
|
||||||
|
nmethod* nm = method->code();
|
||||||
|
if (WizardMode && nm != NULL) {
|
||||||
|
sprintf(buf + (int)strlen(buf), "(nmethod " INTPTR_FORMAT ")", (intptr_t)nm);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return buf;
|
||||||
|
}
|
||||||
|
|
||||||
|
void java_lang_Throwable::print_stack_element(outputStream *st, Handle mirror,
|
||||||
|
int method_id, int version, int bci) {
|
||||||
|
ResourceMark rm;
|
||||||
|
char* buf = print_stack_element_to_buffer(mirror, method_id, version, bci);
|
||||||
|
st->print_cr("%s", buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
void java_lang_Throwable::print_stack_element(outputStream *st, methodHandle method, int bci) {
|
||||||
|
Handle mirror = method->method_holder()->java_mirror();
|
||||||
|
int method_id = method->method_idnum();
|
||||||
|
int version = method->constants()->version();
|
||||||
|
print_stack_element(st, mirror, method_id, version, bci);
|
||||||
|
}
|
||||||
|
|
||||||
|
const char* java_lang_Throwable::no_stack_trace_message() {
|
||||||
|
return "\t<<no stack trace available>>";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Currently used only for exceptions occurring during startup
|
||||||
|
void java_lang_Throwable::print_stack_trace(oop throwable, outputStream* st) {
|
||||||
|
Thread *THREAD = Thread::current();
|
||||||
|
Handle h_throwable(THREAD, throwable);
|
||||||
|
while (h_throwable.not_null()) {
|
||||||
|
objArrayHandle result (THREAD, objArrayOop(backtrace(h_throwable())));
|
||||||
|
if (result.is_null()) {
|
||||||
|
st->print_cr(no_stack_trace_message());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (result.not_null()) {
|
||||||
|
|
||||||
|
// Get method id, bci, version and mirror from chunk
|
||||||
|
typeArrayHandle methods (THREAD, BacktraceBuilder::get_methods(result));
|
||||||
|
typeArrayHandle bcis (THREAD, BacktraceBuilder::get_bcis(result));
|
||||||
|
objArrayHandle mirrors (THREAD, BacktraceBuilder::get_mirrors(result));
|
||||||
|
|
||||||
|
int length = methods()->length();
|
||||||
|
for (int index = 0; index < length; index++) {
|
||||||
|
Handle mirror(THREAD, mirrors->obj_at(index));
|
||||||
|
// NULL mirror means end of stack trace
|
||||||
|
if (mirror.is_null()) goto handle_cause;
|
||||||
|
int method = methods->short_at(index);
|
||||||
|
int version = version_at(bcis->int_at(index));
|
||||||
|
int bci = bci_at(bcis->int_at(index));
|
||||||
|
print_stack_element(st, mirror, method, version, bci);
|
||||||
|
}
|
||||||
|
result = objArrayHandle(THREAD, objArrayOop(result->obj_at(trace_next_offset)));
|
||||||
|
}
|
||||||
|
handle_cause:
|
||||||
|
{
|
||||||
|
EXCEPTION_MARK;
|
||||||
|
JavaValue cause(T_OBJECT);
|
||||||
|
JavaCalls::call_virtual(&cause,
|
||||||
|
h_throwable,
|
||||||
|
KlassHandle(THREAD, h_throwable->klass()),
|
||||||
|
vmSymbols::getCause_name(),
|
||||||
|
vmSymbols::void_throwable_signature(),
|
||||||
|
THREAD);
|
||||||
|
// Ignore any exceptions. we are in the middle of exception handling. Same as classic VM.
|
||||||
|
if (HAS_PENDING_EXCEPTION) {
|
||||||
|
CLEAR_PENDING_EXCEPTION;
|
||||||
|
h_throwable = Handle();
|
||||||
|
} else {
|
||||||
|
h_throwable = Handle(THREAD, (oop) cause.get_jobject());
|
||||||
|
if (h_throwable.not_null()) {
|
||||||
|
st->print("Caused by: ");
|
||||||
|
print(h_throwable, st);
|
||||||
|
st->cr();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void java_lang_Throwable::fill_in_stack_trace(Handle throwable, methodHandle method, TRAPS) {
|
void java_lang_Throwable::fill_in_stack_trace(Handle throwable, methodHandle method, TRAPS) {
|
||||||
if (!StackTraceInThrowable) return;
|
if (!StackTraceInThrowable) return;
|
||||||
|
@ -1578,21 +1593,8 @@ void java_lang_Throwable::allocate_backtrace(Handle throwable, TRAPS) {
|
||||||
|
|
||||||
// No-op if stack trace is disabled
|
// No-op if stack trace is disabled
|
||||||
if (!StackTraceInThrowable) return;
|
if (!StackTraceInThrowable) return;
|
||||||
|
BacktraceBuilder bt(CHECK); // creates a backtrace
|
||||||
objArrayOop h_oop = oopFactory::new_objectArray(trace_size, CHECK);
|
set_backtrace(throwable(), bt.backtrace());
|
||||||
objArrayHandle backtrace (THREAD, h_oop);
|
|
||||||
typeArrayOop m_oop = oopFactory::new_metaDataArray(trace_chunk_size, CHECK);
|
|
||||||
typeArrayHandle methods (THREAD, m_oop);
|
|
||||||
typeArrayOop b = oopFactory::new_shortArray(trace_chunk_size, CHECK);
|
|
||||||
typeArrayHandle bcis(THREAD, b);
|
|
||||||
objArrayOop mirror_oop = oopFactory::new_objectArray(trace_chunk_size, CHECK);
|
|
||||||
objArrayHandle mirrors (THREAD, mirror_oop);
|
|
||||||
|
|
||||||
// backtrace has space for one chunk (next is NULL)
|
|
||||||
backtrace->obj_at_put(trace_methods_offset, methods());
|
|
||||||
backtrace->obj_at_put(trace_bcis_offset, bcis());
|
|
||||||
backtrace->obj_at_put(trace_mirrors_offset, mirrors());
|
|
||||||
set_backtrace(throwable(), backtrace());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1604,48 +1606,26 @@ void java_lang_Throwable::fill_in_stack_trace_of_preallocated_backtrace(Handle t
|
||||||
|
|
||||||
assert(throwable->is_a(SystemDictionary::Throwable_klass()), "sanity check");
|
assert(throwable->is_a(SystemDictionary::Throwable_klass()), "sanity check");
|
||||||
|
|
||||||
objArrayOop backtrace = (objArrayOop)java_lang_Throwable::backtrace(throwable());
|
JavaThread* THREAD = JavaThread::current();
|
||||||
assert(backtrace != NULL, "backtrace not preallocated");
|
|
||||||
|
|
||||||
oop m = backtrace->obj_at(trace_methods_offset);
|
objArrayHandle backtrace (THREAD, (objArrayOop)java_lang_Throwable::backtrace(throwable()));
|
||||||
typeArrayOop methods = typeArrayOop(m);
|
assert(backtrace.not_null(), "backtrace should have been preallocated");
|
||||||
assert(methods != NULL && methods->length() > 0, "method array not preallocated");
|
|
||||||
|
|
||||||
oop b = backtrace->obj_at(trace_bcis_offset);
|
ResourceMark rm(THREAD);
|
||||||
typeArrayOop bcis = typeArrayOop(b);
|
vframeStream st(THREAD);
|
||||||
assert(bcis != NULL, "bci array not preallocated");
|
|
||||||
|
|
||||||
oop mr = backtrace->obj_at(trace_mirrors_offset);
|
BacktraceBuilder bt(backtrace);
|
||||||
objArrayOop mirrors = objArrayOop(mr);
|
|
||||||
assert(mirrors != NULL, "bci array not preallocated");
|
|
||||||
|
|
||||||
assert(methods->length() == bcis->length() &&
|
|
||||||
methods->length() == mirrors->length(),
|
|
||||||
"method and bci arrays should match");
|
|
||||||
|
|
||||||
JavaThread* thread = JavaThread::current();
|
|
||||||
ResourceMark rm(thread);
|
|
||||||
vframeStream st(thread);
|
|
||||||
|
|
||||||
// Unlike fill_in_stack_trace we do not skip fillInStackTrace or throwable init
|
// Unlike fill_in_stack_trace we do not skip fillInStackTrace or throwable init
|
||||||
// methods as preallocated errors aren't created by "java" code.
|
// methods as preallocated errors aren't created by "java" code.
|
||||||
|
|
||||||
// fill in as much stack trace as possible
|
// fill in as much stack trace as possible
|
||||||
|
typeArrayOop methods = BacktraceBuilder::get_methods(backtrace);
|
||||||
int max_chunks = MIN2(methods->length(), (int)MaxJavaStackTraceDepth);
|
int max_chunks = MIN2(methods->length(), (int)MaxJavaStackTraceDepth);
|
||||||
int chunk_count = 0;
|
int chunk_count = 0;
|
||||||
|
|
||||||
for (;!st.at_end(); st.next()) {
|
for (;!st.at_end(); st.next()) {
|
||||||
// Add entry and smear the -1 bci to 0 since the array only holds
|
bt.push(st.method(), st.bci(), CHECK);
|
||||||
// unsigned shorts. The later line number lookup would just smear
|
|
||||||
// the -1 to a 0 even if it could be recorded.
|
|
||||||
int bci = st.bci();
|
|
||||||
if (bci == SynchronizationEntryBCI) bci = 0;
|
|
||||||
assert(bci == (jushort)bci, "doesn't fit");
|
|
||||||
bcis->ushort_at_put(chunk_count, bci);
|
|
||||||
methods->metadata_at_put(chunk_count, st.method());
|
|
||||||
mirrors->obj_at_put(chunk_count,
|
|
||||||
st.method()->method_holder()->java_mirror());
|
|
||||||
|
|
||||||
chunk_count++;
|
chunk_count++;
|
||||||
|
|
||||||
// Bail-out for deep stacks
|
// Bail-out for deep stacks
|
||||||
|
@ -1659,7 +1639,6 @@ void java_lang_Throwable::fill_in_stack_trace_of_preallocated_backtrace(Handle t
|
||||||
java_lang_Throwable::set_stacktrace(throwable(), java_lang_Throwable::unassigned_stacktrace());
|
java_lang_Throwable::set_stacktrace(throwable(), java_lang_Throwable::unassigned_stacktrace());
|
||||||
assert(java_lang_Throwable::unassigned_stacktrace() != NULL, "not initialized");
|
assert(java_lang_Throwable::unassigned_stacktrace() != NULL, "not initialized");
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1678,12 +1657,12 @@ int java_lang_Throwable::get_stack_trace_depth(oop throwable, TRAPS) {
|
||||||
chunk = next;
|
chunk = next;
|
||||||
}
|
}
|
||||||
assert(chunk != NULL && chunk->obj_at(trace_next_offset) == NULL, "sanity check");
|
assert(chunk != NULL && chunk->obj_at(trace_next_offset) == NULL, "sanity check");
|
||||||
// Count element in remaining partial chunk
|
// Count element in remaining partial chunk. NULL value for mirror
|
||||||
typeArrayOop methods = typeArrayOop(chunk->obj_at(trace_methods_offset));
|
// marks the end of the stack trace elements that are saved.
|
||||||
typeArrayOop bcis = typeArrayOop(chunk->obj_at(trace_bcis_offset));
|
objArrayOop mirrors = BacktraceBuilder::get_mirrors(chunk);
|
||||||
assert(methods != NULL && bcis != NULL, "sanity check");
|
assert(mirrors != NULL, "sanity check");
|
||||||
for (int i = 0; i < methods->length(); i++) {
|
for (int i = 0; i < mirrors->length(); i++) {
|
||||||
if (methods->metadata_at(i) == NULL) break;
|
if (mirrors->obj_at(i) == NULL) break;
|
||||||
depth++;
|
depth++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1709,25 +1688,28 @@ oop java_lang_Throwable::get_stack_trace_element(oop throwable, int index, TRAPS
|
||||||
if (chunk == NULL) {
|
if (chunk == NULL) {
|
||||||
THROW_(vmSymbols::java_lang_IndexOutOfBoundsException(), NULL);
|
THROW_(vmSymbols::java_lang_IndexOutOfBoundsException(), NULL);
|
||||||
}
|
}
|
||||||
// Get method,bci from chunk
|
// Get method id, bci, version and mirror from chunk
|
||||||
typeArrayOop methods = typeArrayOop(chunk->obj_at(trace_methods_offset));
|
typeArrayOop methods = BacktraceBuilder::get_methods(chunk);
|
||||||
typeArrayOop bcis = typeArrayOop(chunk->obj_at(trace_bcis_offset));
|
typeArrayOop bcis = BacktraceBuilder::get_bcis(chunk);
|
||||||
assert(methods != NULL && bcis != NULL, "sanity check");
|
objArrayOop mirrors = BacktraceBuilder::get_mirrors(chunk);
|
||||||
methodHandle method(THREAD, ((Method*)methods->metadata_at(chunk_index)));
|
|
||||||
int bci = bcis->ushort_at(chunk_index);
|
assert(methods != NULL && bcis != NULL && mirrors != NULL, "sanity check");
|
||||||
|
|
||||||
|
int method = methods->short_at(chunk_index);
|
||||||
|
int version = version_at(bcis->int_at(chunk_index));
|
||||||
|
int bci = bci_at(bcis->int_at(chunk_index));
|
||||||
|
Handle mirror(THREAD, mirrors->obj_at(chunk_index));
|
||||||
|
|
||||||
// Chunk can be partial full
|
// Chunk can be partial full
|
||||||
if (method.is_null()) {
|
if (mirror.is_null()) {
|
||||||
THROW_(vmSymbols::java_lang_IndexOutOfBoundsException(), NULL);
|
THROW_(vmSymbols::java_lang_IndexOutOfBoundsException(), NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
oop element = java_lang_StackTraceElement::create(method, bci, CHECK_0);
|
oop element = java_lang_StackTraceElement::create(mirror, method, version, bci, CHECK_0);
|
||||||
return element;
|
return element;
|
||||||
}
|
}
|
||||||
|
|
||||||
oop java_lang_StackTraceElement::create(methodHandle method, int bci, TRAPS) {
|
oop java_lang_StackTraceElement::create(Handle mirror, int method_id, int version, int bci, TRAPS) {
|
||||||
// SystemDictionary::stackTraceElement_klass() will be null for pre-1.4 JDKs
|
|
||||||
assert(JDK_Version::is_gte_jdk14x_version(), "should only be called in >= 1.4");
|
|
||||||
|
|
||||||
// Allocate java.lang.StackTraceElement instance
|
// Allocate java.lang.StackTraceElement instance
|
||||||
Klass* k = SystemDictionary::StackTraceElement_klass();
|
Klass* k = SystemDictionary::StackTraceElement_klass();
|
||||||
assert(k != NULL, "must be loaded in 1.4+");
|
assert(k != NULL, "must be loaded in 1.4+");
|
||||||
|
@ -1739,37 +1721,39 @@ oop java_lang_StackTraceElement::create(methodHandle method, int bci, TRAPS) {
|
||||||
Handle element = ik->allocate_instance_handle(CHECK_0);
|
Handle element = ik->allocate_instance_handle(CHECK_0);
|
||||||
// Fill in class name
|
// Fill in class name
|
||||||
ResourceMark rm(THREAD);
|
ResourceMark rm(THREAD);
|
||||||
const char* str = method->method_holder()->external_name();
|
InstanceKlass* holder = InstanceKlass::cast(java_lang_Class::as_Klass(mirror()));
|
||||||
|
const char* str = holder->external_name();
|
||||||
oop classname = StringTable::intern((char*) str, CHECK_0);
|
oop classname = StringTable::intern((char*) str, CHECK_0);
|
||||||
java_lang_StackTraceElement::set_declaringClass(element(), classname);
|
java_lang_StackTraceElement::set_declaringClass(element(), classname);
|
||||||
|
|
||||||
// Fill in method name
|
// Fill in method name
|
||||||
|
Method* method = holder->method_with_idnum(method_id);
|
||||||
oop methodname = StringTable::intern(method->name(), CHECK_0);
|
oop methodname = StringTable::intern(method->name(), CHECK_0);
|
||||||
java_lang_StackTraceElement::set_methodName(element(), methodname);
|
java_lang_StackTraceElement::set_methodName(element(), methodname);
|
||||||
// Fill in source file name
|
|
||||||
Symbol* source = method->method_holder()->source_file_name();
|
if (!version_matches(method, version)) {
|
||||||
|
// The method was redefined, accurate line number information isn't available
|
||||||
|
java_lang_StackTraceElement::set_fileName(element(), NULL);
|
||||||
|
java_lang_StackTraceElement::set_lineNumber(element(), -1);
|
||||||
|
} else {
|
||||||
|
// Fill in source file name and line number.
|
||||||
|
Symbol* source = holder->source_file_name();
|
||||||
if (ShowHiddenFrames && source == NULL)
|
if (ShowHiddenFrames && source == NULL)
|
||||||
source = vmSymbols::unknown_class_name();
|
source = vmSymbols::unknown_class_name();
|
||||||
oop filename = StringTable::intern(source, CHECK_0);
|
oop filename = StringTable::intern(source, CHECK_0);
|
||||||
java_lang_StackTraceElement::set_fileName(element(), filename);
|
java_lang_StackTraceElement::set_fileName(element(), filename);
|
||||||
// File in source line number
|
|
||||||
int line_number;
|
|
||||||
if (method->is_native()) {
|
|
||||||
// Negative value different from -1 below, enabling Java code in
|
|
||||||
// class java.lang.StackTraceElement to distinguish "native" from
|
|
||||||
// "no LineNumberTable".
|
|
||||||
line_number = -2;
|
|
||||||
} else {
|
|
||||||
// Returns -1 if no LineNumberTable, and otherwise actual line number
|
|
||||||
line_number = method->line_number_from_bci(bci);
|
|
||||||
if (line_number == -1 && ShowHiddenFrames) {
|
|
||||||
line_number = bci + 1000000;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
java_lang_StackTraceElement::set_lineNumber(element(), line_number);
|
|
||||||
|
|
||||||
|
int line_number = get_line_number(method, bci);
|
||||||
|
java_lang_StackTraceElement::set_lineNumber(element(), line_number);
|
||||||
|
}
|
||||||
return element();
|
return element();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
oop java_lang_StackTraceElement::create(methodHandle method, int bci, TRAPS) {
|
||||||
|
Handle mirror (THREAD, method->method_holder()->java_mirror());
|
||||||
|
int method_id = method->method_idnum();
|
||||||
|
return create(mirror, method_id, method->constants()->version(), bci, THREAD);
|
||||||
|
}
|
||||||
|
|
||||||
void java_lang_reflect_AccessibleObject::compute_offsets() {
|
void java_lang_reflect_AccessibleObject::compute_offsets() {
|
||||||
Klass* k = SystemDictionary::reflect_AccessibleObject_klass();
|
Klass* k = SystemDictionary::reflect_AccessibleObject_klass();
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -463,8 +463,7 @@ class java_lang_Throwable: AllStatic {
|
||||||
static int static_unassigned_stacktrace_offset;
|
static int static_unassigned_stacktrace_offset;
|
||||||
|
|
||||||
// Printing
|
// Printing
|
||||||
static char* print_stack_element_to_buffer(Method* method, int bci);
|
static char* print_stack_element_to_buffer(Handle mirror, int method, int version, int bci);
|
||||||
static void print_to_stream(Handle stream, const char* str);
|
|
||||||
// StackTrace (programmatic access, new since 1.4)
|
// StackTrace (programmatic access, new since 1.4)
|
||||||
static void clear_stacktrace(oop throwable);
|
static void clear_stacktrace(oop throwable);
|
||||||
// No stack trace available
|
// No stack trace available
|
||||||
|
@ -484,12 +483,9 @@ class java_lang_Throwable: AllStatic {
|
||||||
static oop message(oop throwable);
|
static oop message(oop throwable);
|
||||||
static oop message(Handle throwable);
|
static oop message(Handle throwable);
|
||||||
static void set_message(oop throwable, oop value);
|
static void set_message(oop throwable, oop value);
|
||||||
// Print stack trace stored in exception by call-back to Java
|
static void print_stack_element(outputStream *st, Handle mirror, int method,
|
||||||
// Note: this is no longer used in Merlin, but we still suppport
|
int version, int bci);
|
||||||
// it for compatibility.
|
static void print_stack_element(outputStream *st, methodHandle method, int bci);
|
||||||
static void print_stack_trace(oop throwable, oop print_stream);
|
|
||||||
static void print_stack_element(Handle stream, Method* method, int bci);
|
|
||||||
static void print_stack_element(outputStream *st, Method* method, int bci);
|
|
||||||
static void print_stack_usage(Handle stream);
|
static void print_stack_usage(Handle stream);
|
||||||
|
|
||||||
// Allocate space for backtrace (created but stack trace not filled in)
|
// Allocate space for backtrace (created but stack trace not filled in)
|
||||||
|
@ -1257,7 +1253,8 @@ class java_lang_StackTraceElement: AllStatic {
|
||||||
static void set_lineNumber(oop element, int value);
|
static void set_lineNumber(oop element, int value);
|
||||||
|
|
||||||
// Create an instance of StackTraceElement
|
// Create an instance of StackTraceElement
|
||||||
static oop create(methodHandle m, int bci, TRAPS);
|
static oop create(Handle mirror, int method, int version, int bci, TRAPS);
|
||||||
|
static oop create(methodHandle method, int bci, TRAPS);
|
||||||
|
|
||||||
// Debugging
|
// Debugging
|
||||||
friend class JavaClasses;
|
friend class JavaClasses;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -554,7 +554,7 @@ void CompactibleFreeListSpace::reportFreeListStatistics() const {
|
||||||
reportIndexedFreeListStatistics();
|
reportIndexedFreeListStatistics();
|
||||||
size_t total_size = totalSizeInIndexedFreeLists() +
|
size_t total_size = totalSizeInIndexedFreeLists() +
|
||||||
_dictionary->total_chunk_size(DEBUG_ONLY(freelistLock()));
|
_dictionary->total_chunk_size(DEBUG_ONLY(freelistLock()));
|
||||||
gclog_or_tty->print(" free=%ld frag=%1.4f\n", total_size, flsFrag());
|
gclog_or_tty->print(" free=" SIZE_FORMAT " frag=%1.4f\n", total_size, flsFrag());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -3338,7 +3338,7 @@ bool ConcurrentMarkSweepGeneration::grow_by(size_t bytes) {
|
||||||
if (Verbose && PrintGC) {
|
if (Verbose && PrintGC) {
|
||||||
size_t new_mem_size = _virtual_space.committed_size();
|
size_t new_mem_size = _virtual_space.committed_size();
|
||||||
size_t old_mem_size = new_mem_size - bytes;
|
size_t old_mem_size = new_mem_size - bytes;
|
||||||
gclog_or_tty->print_cr("Expanding %s from %ldK by %ldK to %ldK",
|
gclog_or_tty->print_cr("Expanding %s from " SIZE_FORMAT "K by " SIZE_FORMAT "K to " SIZE_FORMAT "K",
|
||||||
name(), old_mem_size/K, bytes/K, new_mem_size/K);
|
name(), old_mem_size/K, bytes/K, new_mem_size/K);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -9203,7 +9203,7 @@ void ASConcurrentMarkSweepGeneration::shrink_by(size_t desired_bytes) {
|
||||||
if (Verbose && PrintGCDetails) {
|
if (Verbose && PrintGCDetails) {
|
||||||
size_t new_mem_size = _virtual_space.committed_size();
|
size_t new_mem_size = _virtual_space.committed_size();
|
||||||
size_t old_mem_size = new_mem_size + bytes;
|
size_t old_mem_size = new_mem_size + bytes;
|
||||||
gclog_or_tty->print_cr("Shrinking %s from %ldK by %ldK to %ldK",
|
gclog_or_tty->print_cr("Shrinking %s from " SIZE_FORMAT "K by " SIZE_FORMAT "K to " SIZE_FORMAT "K",
|
||||||
name(), old_mem_size/K, bytes/K, new_mem_size/K);
|
name(), old_mem_size/K, bytes/K, new_mem_size/K);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -529,7 +529,7 @@ bool PSScavenge::invoke_no_policy() {
|
||||||
|
|
||||||
if (PrintTenuringDistribution) {
|
if (PrintTenuringDistribution) {
|
||||||
gclog_or_tty->cr();
|
gclog_or_tty->cr();
|
||||||
gclog_or_tty->print_cr("Desired survivor size %ld bytes, new threshold %u (max %u)",
|
gclog_or_tty->print_cr("Desired survivor size " SIZE_FORMAT " bytes, new threshold %u (max %u)",
|
||||||
size_policy->calculated_survivor_size_in_bytes(),
|
size_policy->calculated_survivor_size_in_bytes(),
|
||||||
_tenuring_threshold, MaxTenuringThreshold);
|
_tenuring_threshold, MaxTenuringThreshold);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -96,7 +96,7 @@ uint ageTable::compute_tenuring_threshold(size_t survivor_capacity) {
|
||||||
|
|
||||||
if (PrintTenuringDistribution) {
|
if (PrintTenuringDistribution) {
|
||||||
gclog_or_tty->cr();
|
gclog_or_tty->cr();
|
||||||
gclog_or_tty->print_cr("Desired survivor size %ld bytes, new threshold %u (max %u)",
|
gclog_or_tty->print_cr("Desired survivor size " SIZE_FORMAT " bytes, new threshold %u (max %u)",
|
||||||
desired_survivor_size*oopSize, result, MaxTenuringThreshold);
|
desired_survivor_size*oopSize, result, MaxTenuringThreshold);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -228,7 +228,7 @@ void Universe::check_alignment(uintx size, uintx alignment, const char* name) {
|
||||||
if (size < alignment || size % alignment != 0) {
|
if (size < alignment || size % alignment != 0) {
|
||||||
ResourceMark rm;
|
ResourceMark rm;
|
||||||
stringStream st;
|
stringStream st;
|
||||||
st.print("Size of %s (%ld bytes) must be aligned to %ld bytes", name, size, alignment);
|
st.print("Size of %s (" UINTX_FORMAT " bytes) must be aligned to " UINTX_FORMAT " bytes", name, size, alignment);
|
||||||
char* error = st.as_string();
|
char* error = st.as_string();
|
||||||
vm_exit_during_initialization(error);
|
vm_exit_during_initialization(error);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -66,7 +66,7 @@ ConstantPool::ConstantPool(Array<u1>* tags) {
|
||||||
set_pool_holder(NULL);
|
set_pool_holder(NULL);
|
||||||
set_flags(0);
|
set_flags(0);
|
||||||
// only set to non-zero if constant pool is merged by RedefineClasses
|
// only set to non-zero if constant pool is merged by RedefineClasses
|
||||||
set_orig_length(0);
|
set_version(0);
|
||||||
set_lock(new Monitor(Monitor::nonleaf + 2, "A constant pool lock"));
|
set_lock(new Monitor(Monitor::nonleaf + 2, "A constant pool lock"));
|
||||||
// all fields are initialized; needed for GC
|
// all fields are initialized; needed for GC
|
||||||
set_on_stack(false);
|
set_on_stack(false);
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -103,8 +103,8 @@ class ConstantPool : public Metadata {
|
||||||
union {
|
union {
|
||||||
// set for CDS to restore resolved references
|
// set for CDS to restore resolved references
|
||||||
int _resolved_reference_length;
|
int _resolved_reference_length;
|
||||||
// only set to non-zero if constant pool is merged by RedefineClasses
|
// keeps version number for redefined classes (used in backtrace)
|
||||||
int _orig_length;
|
int _version;
|
||||||
} _saved;
|
} _saved;
|
||||||
|
|
||||||
Monitor* _lock;
|
Monitor* _lock;
|
||||||
|
@ -784,8 +784,11 @@ class ConstantPool : public Metadata {
|
||||||
static void copy_cp_to_impl(constantPoolHandle from_cp, int start_i, int end_i, constantPoolHandle to_cp, int to_i, TRAPS);
|
static void copy_cp_to_impl(constantPoolHandle from_cp, int start_i, int end_i, constantPoolHandle to_cp, int to_i, TRAPS);
|
||||||
static void copy_entry_to(constantPoolHandle from_cp, int from_i, constantPoolHandle to_cp, int to_i, TRAPS);
|
static void copy_entry_to(constantPoolHandle from_cp, int from_i, constantPoolHandle to_cp, int to_i, TRAPS);
|
||||||
int find_matching_entry(int pattern_i, constantPoolHandle search_cp, TRAPS);
|
int find_matching_entry(int pattern_i, constantPoolHandle search_cp, TRAPS);
|
||||||
int orig_length() const { return _saved._orig_length; }
|
int version() const { return _saved._version; }
|
||||||
void set_orig_length(int orig_length) { _saved._orig_length = orig_length; }
|
void set_version(int version) { _saved._version = version; }
|
||||||
|
void increment_and_save_version(int version) {
|
||||||
|
_saved._version = version >= 0 ? (version + 1) : version; // keep overflow
|
||||||
|
}
|
||||||
|
|
||||||
void set_resolved_reference_length(int length) { _saved._resolved_reference_length = length; }
|
void set_resolved_reference_length(int length) { _saved._resolved_reference_length = length; }
|
||||||
int resolved_reference_length() const { return _saved._resolved_reference_length; }
|
int resolved_reference_length() const { return _saved._resolved_reference_length; }
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2007, 2012, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -547,7 +547,7 @@ void IdealGraphPrinter::visit_node(Node *n, bool edges, VectorSet* temp_set) {
|
||||||
|
|
||||||
// max. 2 chars allowed
|
// max. 2 chars allowed
|
||||||
if (value >= -9 && value <= 99) {
|
if (value >= -9 && value <= 99) {
|
||||||
sprintf(buffer, INT64_FORMAT, value);
|
sprintf(buffer, JLONG_FORMAT, value);
|
||||||
print_prop(short_name, buffer);
|
print_prop(short_name, buffer);
|
||||||
} else {
|
} else {
|
||||||
print_prop(short_name, "L");
|
print_prop(short_name, "L");
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -1542,10 +1542,10 @@ bool TypeLong::is_finite() const {
|
||||||
static const char* longnamenear(jlong x, const char* xname, char* buf, jlong n) {
|
static const char* longnamenear(jlong x, const char* xname, char* buf, jlong n) {
|
||||||
if (n > x) {
|
if (n > x) {
|
||||||
if (n >= x + 10000) return NULL;
|
if (n >= x + 10000) return NULL;
|
||||||
sprintf(buf, "%s+" INT64_FORMAT, xname, n - x);
|
sprintf(buf, "%s+" JLONG_FORMAT, xname, n - x);
|
||||||
} else if (n < x) {
|
} else if (n < x) {
|
||||||
if (n <= x - 10000) return NULL;
|
if (n <= x - 10000) return NULL;
|
||||||
sprintf(buf, "%s-" INT64_FORMAT, xname, x - n);
|
sprintf(buf, "%s-" JLONG_FORMAT, xname, x - n);
|
||||||
} else {
|
} else {
|
||||||
return xname;
|
return xname;
|
||||||
}
|
}
|
||||||
|
@ -1557,11 +1557,11 @@ static const char* longname(char* buf, jlong n) {
|
||||||
if (n == min_jlong)
|
if (n == min_jlong)
|
||||||
return "min";
|
return "min";
|
||||||
else if (n < min_jlong + 10000)
|
else if (n < min_jlong + 10000)
|
||||||
sprintf(buf, "min+" INT64_FORMAT, n - min_jlong);
|
sprintf(buf, "min+" JLONG_FORMAT, n - min_jlong);
|
||||||
else if (n == max_jlong)
|
else if (n == max_jlong)
|
||||||
return "max";
|
return "max";
|
||||||
else if (n > max_jlong - 10000)
|
else if (n > max_jlong - 10000)
|
||||||
sprintf(buf, "max-" INT64_FORMAT, max_jlong - n);
|
sprintf(buf, "max-" JLONG_FORMAT, max_jlong - n);
|
||||||
else if ((str = longnamenear(max_juint, "maxuint", buf, n)) != NULL)
|
else if ((str = longnamenear(max_juint, "maxuint", buf, n)) != NULL)
|
||||||
return str;
|
return str;
|
||||||
else if ((str = longnamenear(max_jint, "maxint", buf, n)) != NULL)
|
else if ((str = longnamenear(max_jint, "maxint", buf, n)) != NULL)
|
||||||
|
@ -1569,7 +1569,7 @@ static const char* longname(char* buf, jlong n) {
|
||||||
else if ((str = longnamenear(min_jint, "minint", buf, n)) != NULL)
|
else if ((str = longnamenear(min_jint, "minint", buf, n)) != NULL)
|
||||||
return str;
|
return str;
|
||||||
else
|
else
|
||||||
sprintf(buf, INT64_FORMAT, n);
|
sprintf(buf, JLONG_FORMAT, n);
|
||||||
return buf;
|
return buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -484,15 +484,6 @@ JVM_ENTRY(void, JVM_FillInStackTrace(JNIEnv *env, jobject receiver))
|
||||||
JVM_END
|
JVM_END
|
||||||
|
|
||||||
|
|
||||||
JVM_ENTRY(void, JVM_PrintStackTrace(JNIEnv *env, jobject receiver, jobject printable))
|
|
||||||
JVMWrapper("JVM_PrintStackTrace");
|
|
||||||
// Note: This is no longer used in Merlin, but we still support it for compatibility.
|
|
||||||
oop exception = JNIHandles::resolve_non_null(receiver);
|
|
||||||
oop stream = JNIHandles::resolve_non_null(printable);
|
|
||||||
java_lang_Throwable::print_stack_trace(exception, stream);
|
|
||||||
JVM_END
|
|
||||||
|
|
||||||
|
|
||||||
JVM_ENTRY(jint, JVM_GetStackTraceDepth(JNIEnv *env, jobject throwable))
|
JVM_ENTRY(jint, JVM_GetStackTraceDepth(JNIEnv *env, jobject throwable))
|
||||||
JVMWrapper("JVM_GetStackTraceDepth");
|
JVMWrapper("JVM_GetStackTraceDepth");
|
||||||
oop exception = JNIHandles::resolve(throwable);
|
oop exception = JNIHandles::resolve(throwable);
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -212,9 +212,6 @@ JVM_IsNaN(jdouble d);
|
||||||
JNIEXPORT void JNICALL
|
JNIEXPORT void JNICALL
|
||||||
JVM_FillInStackTrace(JNIEnv *env, jobject throwable);
|
JVM_FillInStackTrace(JNIEnv *env, jobject throwable);
|
||||||
|
|
||||||
JNIEXPORT void JNICALL
|
|
||||||
JVM_PrintStackTrace(JNIEnv *env, jobject throwable, jobject printable);
|
|
||||||
|
|
||||||
JNIEXPORT jint JNICALL
|
JNIEXPORT jint JNICALL
|
||||||
JVM_GetStackTraceDepth(JNIEnv *env, jobject throwable);
|
JVM_GetStackTraceDepth(JNIEnv *env, jobject throwable);
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -1334,20 +1334,8 @@ jvmtiError VM_RedefineClasses::merge_cp_and_rewrite(
|
||||||
return JVMTI_ERROR_INTERNAL;
|
return JVMTI_ERROR_INTERNAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
int orig_length = old_cp->orig_length();
|
// Update the version number of the constant pool
|
||||||
if (orig_length == 0) {
|
merge_cp->increment_and_save_version(old_cp->version());
|
||||||
// This old_cp is an actual original constant pool. We save
|
|
||||||
// the original length in the merged constant pool so that
|
|
||||||
// merge_constant_pools() can be more efficient. If a constant
|
|
||||||
// pool has a non-zero orig_length() value, then that constant
|
|
||||||
// pool was created by a merge operation in RedefineClasses.
|
|
||||||
merge_cp->set_orig_length(old_cp->length());
|
|
||||||
} else {
|
|
||||||
// This old_cp is a merged constant pool from a previous
|
|
||||||
// RedefineClasses() calls so just copy the orig_length()
|
|
||||||
// value.
|
|
||||||
merge_cp->set_orig_length(old_cp->orig_length());
|
|
||||||
}
|
|
||||||
|
|
||||||
ResourceMark rm(THREAD);
|
ResourceMark rm(THREAD);
|
||||||
_index_map_count = 0;
|
_index_map_count = 0;
|
||||||
|
@ -2421,12 +2409,13 @@ void VM_RedefineClasses::set_new_constant_pool(
|
||||||
// worst case merge situation. We want to associate the minimum
|
// worst case merge situation. We want to associate the minimum
|
||||||
// sized constant pool with the klass to save space.
|
// sized constant pool with the klass to save space.
|
||||||
constantPoolHandle smaller_cp(THREAD,
|
constantPoolHandle smaller_cp(THREAD,
|
||||||
ConstantPool::allocate(loader_data, scratch_cp_length,
|
ConstantPool::allocate(loader_data, scratch_cp_length, THREAD));
|
||||||
THREAD));
|
|
||||||
// preserve orig_length() value in the smaller copy
|
// preserve version() value in the smaller copy
|
||||||
int orig_length = scratch_cp->orig_length();
|
int version = scratch_cp->version();
|
||||||
assert(orig_length != 0, "sanity check");
|
assert(version != 0, "sanity check");
|
||||||
smaller_cp->set_orig_length(orig_length);
|
smaller_cp->set_version(version);
|
||||||
|
|
||||||
scratch_cp->copy_cp_to(1, scratch_cp_length - 1, smaller_cp, 1, THREAD);
|
scratch_cp->copy_cp_to(1, scratch_cp_length - 1, smaller_cp, 1, THREAD);
|
||||||
scratch_cp = smaller_cp;
|
scratch_cp = smaller_cp;
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -129,7 +129,7 @@ void AllocationProfiler::print(size_t cutoff) {
|
||||||
assert(!is_active(), "AllocationProfiler cannot be active while printing profile");
|
assert(!is_active(), "AllocationProfiler cannot be active while printing profile");
|
||||||
|
|
||||||
tty->cr();
|
tty->cr();
|
||||||
tty->print_cr("Allocation profile (sizes in bytes, cutoff = %ld bytes):", cutoff * BytesPerWord);
|
tty->print_cr("Allocation profile (sizes in bytes, cutoff = " SIZE_FORMAT " bytes):", cutoff * BytesPerWord);
|
||||||
tty->cr();
|
tty->cr();
|
||||||
|
|
||||||
// Print regular instance klasses and basic type array klasses
|
// Print regular instance klasses and basic type array klasses
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -532,7 +532,7 @@ char* SysClassPath::add_jars_to_path(char* path, const char* directory) {
|
||||||
// Parses a memory size specification string.
|
// Parses a memory size specification string.
|
||||||
static bool atomull(const char *s, julong* result) {
|
static bool atomull(const char *s, julong* result) {
|
||||||
julong n = 0;
|
julong n = 0;
|
||||||
int args_read = sscanf(s, os::julong_format_specifier(), &n);
|
int args_read = sscanf(s, JULONG_FORMAT, &n);
|
||||||
if (args_read != 1) {
|
if (args_read != 1) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -641,10 +641,6 @@ class os: AllStatic {
|
||||||
|
|
||||||
static struct hostent* get_host_by_name(char* name);
|
static struct hostent* get_host_by_name(char* name);
|
||||||
|
|
||||||
// Printing 64 bit integers
|
|
||||||
static const char* jlong_format_specifier();
|
|
||||||
static const char* julong_format_specifier();
|
|
||||||
|
|
||||||
// Support for signals (see JVM_RaiseSignal, JVM_RegisterSignal)
|
// Support for signals (see JVM_RaiseSignal, JVM_RegisterSignal)
|
||||||
static void signal_init();
|
static void signal_init();
|
||||||
static void signal_init_pd();
|
static void signal_init_pd();
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -192,7 +192,7 @@ PerfLong::PerfLong(CounterNS ns, const char* namep, Units u, Variability v)
|
||||||
}
|
}
|
||||||
|
|
||||||
int PerfLong::format(char* buffer, int length) {
|
int PerfLong::format(char* buffer, int length) {
|
||||||
return jio_snprintf(buffer, length,"%lld", *(jlong*)_valuep);
|
return jio_snprintf(buffer, length, JLONG_FORMAT, *(jlong*)_valuep);
|
||||||
}
|
}
|
||||||
|
|
||||||
PerfLongVariant::PerfLongVariant(CounterNS ns, const char* namep, Units u,
|
PerfLongVariant::PerfLongVariant(CounterNS ns, const char* namep, Units u,
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -868,8 +868,8 @@ void VirtualSpace::print() {
|
||||||
tty->print ("Virtual space:");
|
tty->print ("Virtual space:");
|
||||||
if (special()) tty->print(" (pinned in memory)");
|
if (special()) tty->print(" (pinned in memory)");
|
||||||
tty->cr();
|
tty->cr();
|
||||||
tty->print_cr(" - committed: %ld", committed_size());
|
tty->print_cr(" - committed: " SIZE_FORMAT, committed_size());
|
||||||
tty->print_cr(" - reserved: %ld", reserved_size());
|
tty->print_cr(" - reserved: " SIZE_FORMAT, reserved_size());
|
||||||
tty->print_cr(" - [low, high]: [" INTPTR_FORMAT ", " INTPTR_FORMAT "]", low(), high());
|
tty->print_cr(" - [low, high]: [" INTPTR_FORMAT ", " INTPTR_FORMAT "]", low(), high());
|
||||||
tty->print_cr(" - [low_b, high_b]: [" INTPTR_FORMAT ", " INTPTR_FORMAT "]", low_boundary(), high_boundary());
|
tty->print_cr(" - [low_b, high_b]: [" INTPTR_FORMAT ", " INTPTR_FORMAT "]", low_boundary(), high_boundary());
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2011, 2013 Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -86,7 +86,7 @@ void GenDCmdArgument::to_string(StringArrayArgument* f, char* buf, size_t len) {
|
||||||
|
|
||||||
template <> void DCmdArgument<jlong>::parse_value(const char* str,
|
template <> void DCmdArgument<jlong>::parse_value(const char* str,
|
||||||
size_t len, TRAPS) {
|
size_t len, TRAPS) {
|
||||||
if (str == NULL || sscanf(str, INT64_FORMAT, &_value) != 1) {
|
if (str == NULL || sscanf(str, JLONG_FORMAT, &_value) != 1) {
|
||||||
THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(),
|
THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(),
|
||||||
"Integer parsing error in diagnostic command arguments\n");
|
"Integer parsing error in diagnostic command arguments\n");
|
||||||
}
|
}
|
||||||
|
@ -171,7 +171,7 @@ template <> void DCmdArgument<NanoTimeArgument>::parse_value(const char* str,
|
||||||
"Integer parsing error nanotime value: syntax error");
|
"Integer parsing error nanotime value: syntax error");
|
||||||
}
|
}
|
||||||
|
|
||||||
int argc = sscanf(str, INT64_FORMAT , &_value._time);
|
int argc = sscanf(str, JLONG_FORMAT, &_value._time);
|
||||||
if (argc != 1) {
|
if (argc != 1) {
|
||||||
THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(),
|
THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(),
|
||||||
"Integer parsing error nanotime value: syntax error");
|
"Integer parsing error nanotime value: syntax error");
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -1866,7 +1866,7 @@ int HeapDumper::dump(const char* path) {
|
||||||
if (error() == NULL) {
|
if (error() == NULL) {
|
||||||
char msg[256];
|
char msg[256];
|
||||||
sprintf(msg, "Heap dump file created [%s bytes in %3.3f secs]",
|
sprintf(msg, "Heap dump file created [%s bytes in %3.3f secs]",
|
||||||
os::jlong_format_specifier(), timer()->seconds());
|
JLONG_FORMAT, timer()->seconds());
|
||||||
tty->print_cr(msg, writer.bytes_written());
|
tty->print_cr(msg, writer.bytes_written());
|
||||||
} else {
|
} else {
|
||||||
tty->print_cr("Dump file is incomplete: %s", writer.error());
|
tty->print_cr("Dump file is incomplete: %s", writer.error());
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -353,7 +353,7 @@ void SensorInfo::clear(int count, TRAPS) {
|
||||||
|
|
||||||
#ifndef PRODUCT
|
#ifndef PRODUCT
|
||||||
void SensorInfo::print() {
|
void SensorInfo::print() {
|
||||||
tty->print_cr("%s count = %ld pending_triggers = %ld pending_clears = %ld",
|
tty->print_cr("%s count = " SIZE_FORMAT " pending_triggers = %ld pending_clears = %ld",
|
||||||
(_sensor_on ? "on" : "off"),
|
(_sensor_on ? "on" : "off"),
|
||||||
_sensor_count, _pending_trigger_count, _pending_clear_count);
|
_sensor_count, _pending_trigger_count, _pending_clear_count);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -1250,6 +1250,14 @@ inline int build_int_from_shorts( jushort low, jushort high ) {
|
||||||
|
|
||||||
#define PTR64_FORMAT "0x%016" PRIx64
|
#define PTR64_FORMAT "0x%016" PRIx64
|
||||||
|
|
||||||
|
// Format jlong, if necessary
|
||||||
|
#ifndef JLONG_FORMAT
|
||||||
|
#define JLONG_FORMAT INT64_FORMAT
|
||||||
|
#endif
|
||||||
|
#ifndef JULONG_FORMAT
|
||||||
|
#define JULONG_FORMAT UINT64_FORMAT
|
||||||
|
#endif
|
||||||
|
|
||||||
// Format pointers which change size between 32- and 64-bit.
|
// Format pointers which change size between 32- and 64-bit.
|
||||||
#ifdef _LP64
|
#ifdef _LP64
|
||||||
#define INTPTR_FORMAT "0x%016" PRIxPTR
|
#define INTPTR_FORMAT "0x%016" PRIxPTR
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -306,4 +306,8 @@ inline int wcslen(const jchar* x) { return wcslen((const wchar_t*)x); }
|
||||||
#endif
|
#endif
|
||||||
#define offsetof(klass,field) offset_of(klass,field)
|
#define offsetof(klass,field) offset_of(klass,field)
|
||||||
|
|
||||||
|
#if defined(_LP64) && defined(__APPLE__)
|
||||||
|
#define JLONG_FORMAT "%ld"
|
||||||
|
#endif // _LP64 && __APPLE__
|
||||||
|
|
||||||
#endif // SHARE_VM_UTILITIES_GLOBALDEFINITIONS_GCC_HPP
|
#endif // SHARE_VM_UTILITIES_GLOBALDEFINITIONS_GCC_HPP
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -243,13 +243,11 @@ outputStream& outputStream::indent() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void outputStream::print_jlong(jlong value) {
|
void outputStream::print_jlong(jlong value) {
|
||||||
// N.B. Same as INT64_FORMAT
|
print(JLONG_FORMAT, value);
|
||||||
print(os::jlong_format_specifier(), value);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void outputStream::print_julong(julong value) {
|
void outputStream::print_julong(julong value) {
|
||||||
// N.B. Same as UINT64_FORMAT
|
print(JULONG_FORMAT, value);
|
||||||
print(os::julong_format_specifier(), value);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
@ -239,8 +239,8 @@ ParallelTaskTerminator::offer_termination(TerminatorTerminator* terminator) {
|
||||||
|
|
||||||
#ifdef TRACESPINNING
|
#ifdef TRACESPINNING
|
||||||
void ParallelTaskTerminator::print_termination_counts() {
|
void ParallelTaskTerminator::print_termination_counts() {
|
||||||
gclog_or_tty->print_cr("ParallelTaskTerminator Total yields: %lld "
|
gclog_or_tty->print_cr("ParallelTaskTerminator Total yields: " UINT32_FORMAT
|
||||||
"Total spins: %lld Total peeks: %lld",
|
" Total spins: " UINT32_FORMAT " Total peeks: " UINT32_FORMAT,
|
||||||
total_yields(),
|
total_yields(),
|
||||||
total_spins(),
|
total_spins(),
|
||||||
total_peeks());
|
total_peeks());
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue