Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_hotspot
提交
50d03f76
D
dragonwell8_hotspot
项目概览
openanolis
/
dragonwell8_hotspot
通知
2
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
dragonwell8_hotspot
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
50d03f76
编写于
5月 04, 2012
作者:
A
amurillo
浏览文件
操作
浏览文件
下载
差异文件
Merge
上级
c034fe8e
7b1f4848
变更
55
展开全部
隐藏空白更改
内联
并排
Showing
55 changed file
with
1975 addition
and
1222 deletion
+1975
-1222
agent/src/os/linux/ps_core.c
agent/src/os/linux/ps_core.c
+1
-1
make/Makefile
make/Makefile
+55
-18
make/hotspot_version
make/hotspot_version
+1
-1
make/linux/Makefile
make/linux/Makefile
+5
-3
make/linux/makefiles/buildtree.make
make/linux/makefiles/buildtree.make
+7
-1
make/linux/makefiles/defs.make
make/linux/makefiles/defs.make
+89
-32
make/linux/makefiles/gcc.make
make/linux/makefiles/gcc.make
+2
-2
make/linux/makefiles/jsig.make
make/linux/makefiles/jsig.make
+12
-2
make/linux/makefiles/saproc.make
make/linux/makefiles/saproc.make
+11
-1
make/linux/makefiles/vm.make
make/linux/makefiles/vm.make
+12
-2
make/solaris/Makefile
make/solaris/Makefile
+5
-3
make/solaris/makefiles/buildtree.make
make/solaris/makefiles/buildtree.make
+7
-1
make/solaris/makefiles/defs.make
make/solaris/makefiles/defs.make
+118
-51
make/solaris/makefiles/dtrace.make
make/solaris/makefiles/dtrace.make
+40
-12
make/solaris/makefiles/jsig.make
make/solaris/makefiles/jsig.make
+12
-2
make/solaris/makefiles/saproc.make
make/solaris/makefiles/saproc.make
+12
-2
make/solaris/makefiles/sparcWorks.make
make/solaris/makefiles/sparcWorks.make
+3
-3
make/solaris/makefiles/vm.make
make/solaris/makefiles/vm.make
+12
-2
make/windows/build.make
make/windows/build.make
+5
-1
make/windows/makefiles/compile.make
make/windows/makefiles/compile.make
+8
-3
make/windows/makefiles/debug.make
make/windows/makefiles/debug.make
+6
-0
make/windows/makefiles/defs.make
make/windows/makefiles/defs.make
+78
-8
make/windows/makefiles/fastdebug.make
make/windows/makefiles/fastdebug.make
+6
-0
make/windows/makefiles/product.make
make/windows/makefiles/product.make
+6
-0
make/windows/makefiles/sa.make
make/windows/makefiles/sa.make
+18
-6
src/os/solaris/vm/attachListener_solaris.cpp
src/os/solaris/vm/attachListener_solaris.cpp
+3
-1
src/share/vm/gc_implementation/concurrentMarkSweep/cmsPermGen.cpp
...e/vm/gc_implementation/concurrentMarkSweep/cmsPermGen.cpp
+1
-1
src/share/vm/gc_implementation/concurrentMarkSweep/cmsPermGen.hpp
...e/vm/gc_implementation/concurrentMarkSweep/cmsPermGen.hpp
+2
-2
src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.cpp
...entation/concurrentMarkSweep/compactibleFreeListSpace.cpp
+181
-179
src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.hpp
...entation/concurrentMarkSweep/compactibleFreeListSpace.hpp
+13
-13
src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp
...ion/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp
+28
-28
src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.hpp
...ion/concurrentMarkSweep/concurrentMarkSweepGeneration.hpp
+3
-3
src/share/vm/gc_implementation/concurrentMarkSweep/freeChunk.cpp
...re/vm/gc_implementation/concurrentMarkSweep/freeChunk.cpp
+2
-1
src/share/vm/gc_implementation/concurrentMarkSweep/freeChunk.hpp
...re/vm/gc_implementation/concurrentMarkSweep/freeChunk.hpp
+12
-12
src/share/vm/gc_implementation/concurrentMarkSweep/promotionInfo.cpp
...m/gc_implementation/concurrentMarkSweep/promotionInfo.cpp
+1
-1
src/share/vm/gc_implementation/concurrentMarkSweep/promotionInfo.hpp
...m/gc_implementation/concurrentMarkSweep/promotionInfo.hpp
+9
-9
src/share/vm/gc_implementation/concurrentMarkSweep/vmStructs_cms.hpp
...m/gc_implementation/concurrentMarkSweep/vmStructs_cms.hpp
+11
-11
src/share/vm/gc_implementation/g1/concurrentMark.cpp
src/share/vm/gc_implementation/g1/concurrentMark.cpp
+57
-150
src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp
src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp
+14
-21
src/share/vm/gc_implementation/g1/g1CollectorPolicy.cpp
src/share/vm/gc_implementation/g1/g1CollectorPolicy.cpp
+7
-12
src/share/vm/gc_implementation/g1/heapRegion.cpp
src/share/vm/gc_implementation/g1/heapRegion.cpp
+0
-5
src/share/vm/gc_implementation/g1/heapRegion.hpp
src/share/vm/gc_implementation/g1/heapRegion.hpp
+0
-18
src/share/vm/gc_implementation/g1/heapRegion.inline.hpp
src/share/vm/gc_implementation/g1/heapRegion.inline.hpp
+0
-1
src/share/vm/gc_implementation/shared/allocationStats.hpp
src/share/vm/gc_implementation/shared/allocationStats.hpp
+45
-45
src/share/vm/memory/binaryTreeDictionary.cpp
src/share/vm/memory/binaryTreeDictionary.cpp
+442
-356
src/share/vm/memory/binaryTreeDictionary.hpp
src/share/vm/memory/binaryTreeDictionary.hpp
+329
-0
src/share/vm/memory/freeBlockDictionary.cpp
src/share/vm/memory/freeBlockDictionary.cpp
+14
-6
src/share/vm/memory/freeBlockDictionary.hpp
src/share/vm/memory/freeBlockDictionary.hpp
+25
-26
src/share/vm/memory/freeList.cpp
src/share/vm/memory/freeList.cpp
+87
-77
src/share/vm/memory/freeList.hpp
src/share/vm/memory/freeList.hpp
+74
-80
src/share/vm/memory/generationSpec.cpp
src/share/vm/memory/generationSpec.cpp
+3
-3
src/share/vm/precompiled/precompiled.hpp
src/share/vm/precompiled/precompiled.hpp
+0
-3
src/share/vm/runtime/arguments.cpp
src/share/vm/runtime/arguments.cpp
+3
-0
src/share/vm/runtime/vmStructs.cpp
src/share/vm/runtime/vmStructs.cpp
+1
-1
test/runtime/7162488/Test7162488.sh
test/runtime/7162488/Test7162488.sh
+77
-0
未找到文件。
agent/src/os/linux/ps_core.c
浏览文件 @
50d03f76
...
...
@@ -440,7 +440,7 @@ static bool sort_map_array(struct ps_prochandle* ph) {
int
j
=
0
;
print_debug
(
"---- sorted virtual address map ----
\n
"
);
for
(
j
=
0
;
j
<
ph
->
core
->
num_maps
;
j
++
)
{
print_debug
(
"base = 0x%lx
\t
size = %z
d
\n
"
,
ph
->
core
->
map_array
[
j
]
->
vaddr
,
print_debug
(
"base = 0x%lx
\t
size = %z
u
\n
"
,
ph
->
core
->
map_array
[
j
]
->
vaddr
,
ph
->
core
->
map_array
[
j
]
->
memsz
);
}
}
...
...
make/Makefile
浏览文件 @
50d03f76
...
...
@@ -136,31 +136,36 @@ docs:
ifeq
($(OSNAME),windows)
@
$(ECHO)
"No docs (
$(VM_TARGET)
) for windows"
else
# We specify 'BUILD_FLAVOR=product' so that the proper
# ENABLE_FULL_DEBUG_SYMBOLS value is used.
$(CD)
$(OUTPUTDIR);
\
$(MAKE)
-f
$(ABS_OS_MAKEFILE)
\
$(MAKE_ARGS)
docs
$(MAKE_ARGS)
BUILD_FLAVOR
=
product
docs
endif
# Build variation of hotspot
$(C1_VM_TARGETS)
:
$(CD)
$(GAMMADIR)
/make
;
\
$(MAKE)
VM_TARGET
=
$@
generic_build1
$(ALT_OUT)
$(MAKE)
BUILD_FLAVOR
=
$
(
@:%1
=
%
)
VM_TARGET
=
$@
generic_build1
$(ALT_OUT)
$(C2_VM_TARGETS)
:
$(CD)
$(GAMMADIR)
/make
;
\
$(MAKE)
VM_TARGET
=
$@
generic_build2
$(ALT_OUT)
$(MAKE)
BUILD_FLAVOR
=
$@
VM_TARGET
=
$@
generic_build2
$(ALT_OUT)
$(KERNEL_VM_TARGETS)
:
$(CD)
$(GAMMADIR)
/make
;
\
$(MAKE)
VM_TARGET
=
$@
generic_buildkernel
$(ALT_OUT)
$(MAKE)
BUILD_FLAVOR
=
$
(
@:%kernel
=
%
)
VM_TARGET
=
$@
\
generic_buildkernel
$(ALT_OUT)
$(ZERO_VM_TARGETS)
:
$(CD)
$(GAMMADIR)
/make
;
\
$(MAKE)
VM_TARGET
=
$@
generic_buildzero
$(ALT_OUT)
$(MAKE)
BUILD_FLAVOR
=
$
(
@:%zero
=
%
)
VM_TARGET
=
$@
\
generic_buildzero
$(ALT_OUT)
$(SHARK_VM_TARGETS)
:
$(CD)
$(GAMMADIR)
/make
;
\
$(MAKE)
VM_TARGET
=
$@
generic_buildshark
$(ALT_OUT)
$(MAKE)
BUILD_FLAVOR
=
$
(
@:%shark
=
%
)
VM_TARGET
=
$@
\
generic_buildshark
$(ALT_OUT)
# Build compiler1 (client) rule, different for platforms
generic_build1
:
...
...
@@ -237,25 +242,37 @@ generic_buildshark:
# Export file rule
generic_export
:
$(EXPORT_LIST)
export_product
:
$(MAKE)
VM_SUBDIR
=
product generic_export
$(MAKE)
BUILD_FLAVOR
=
$
(
@:export_%
=
%
)
VM_SUBDIR
=
$
(
@:export_%
=
%
)
\
generic_export
export_fastdebug
:
$(MAKE)
VM_SUBDIR
=
fastdebug
EXPORT_SUBDIR
=
/fastdebug generic_export
$(MAKE)
BUILD_FLAVOR
=
$
(
@:export_%
=
%
)
VM_SUBDIR
=
$
(
@:export_%
=
%
)
\
EXPORT_SUBDIR
=
/
$
(
@:export_%
=
%
)
\
generic_export
export_debug
:
$(MAKE)
VM_SUBDIR
=
${VM_DEBUG}
EXPORT_SUBDIR
=
/debug generic_export
$(MAKE)
BUILD_FLAVOR
=
$
(
@:export_%
=
%
)
VM_SUBDIR
=
${VM_DEBUG}
\
EXPORT_SUBDIR
=
/
$
(
@:export_%
=
%
)
\
generic_export
export_optimized
:
$(MAKE)
VM_SUBDIR
=
optimized
EXPORT_SUBDIR
=
/optimized generic_export
$(MAKE)
BUILD_FLAVOR
=
$
(
@:export_%
=
%
)
VM_SUBDIR
=
$
(
@:export_%
=
%
)
\
EXPORT_SUBDIR
=
/
$
(
@:export_%
=
%
)
\
generic_export
export_product_jdk
::
$(MAKE)
ALT_EXPORT_PATH
=
$(JDK_IMAGE_DIR)
\
VM_SUBDIR
=
product generic_export
$(MAKE)
BUILD_FLAVOR
=
$
(
@:export_%_jdk
=
%
)
\
VM_SUBDIR
=
$
(
@:export_%_jdk
=
%
)
ALT_EXPORT_PATH
=
$(JDK_IMAGE_DIR)
\
generic_export
export_optimized_jdk
::
$(MAKE)
ALT_EXPORT_PATH
=
$(JDK_IMAGE_DIR)
\
VM_SUBDIR
=
optimized generic_export
$(MAKE)
BUILD_FLAVOR
=
$
(
@:export_%_jdk
=
%
)
\
VM_SUBDIR
=
$
(
@:export_%_jdk
=
%
)
ALT_EXPORT_PATH
=
$(JDK_IMAGE_DIR)
\
generic_export
export_fastdebug_jdk
::
$(MAKE)
ALT_EXPORT_PATH
=
$(JDK_IMAGE_DIR)
/fastdebug
\
VM_SUBDIR
=
fastdebug generic_export
$(MAKE)
BUILD_FLAVOR
=
$
(
@:export_%_jdk
=
%
)
\
VM_SUBDIR
=
$
(
@:export_%_jdk
=
%
)
\
ALT_EXPORT_PATH
=
$(JDK_IMAGE_DIR)
/
$
(
@:export_%_jdk
=
%
)
\
generic_export
export_debug_jdk
::
$(MAKE)
ALT_EXPORT_PATH
=
$(JDK_IMAGE_DIR)
/debug
\
VM_SUBDIR
=
${VM_DEBUG}
generic_export
$(MAKE)
BUILD_FLAVOR
=
$
(
@:export_%_jdk
=
%
)
VM_SUBDIR
=
${VM_DEBUG}
\
ALT_EXPORT_PATH
=
$(JDK_IMAGE_DIR)
/
$
(
@:export_%_jdk
=
%
)
\
generic_export
# Export file copy rules
XUSAGE
=
$(HS_SRC_DIR)
/share/vm/Xusage.txt
...
...
@@ -300,6 +317,8 @@ $(EXPORT_LIB_DIR)/%.lib: $(MISC_DIR)/%.lib
$
(
install-file
)
# Other libraries (like SA)
$(EXPORT_JRE_BIN_DIR)/%.diz
:
$(MISC_DIR)/%.diz
$
(
install-file
)
$(EXPORT_JRE_BIN_DIR)/%.dll
:
$(MISC_DIR)/%.dll
$
(
install-file
)
$(EXPORT_JRE_BIN_DIR)/%.pdb
:
$(MISC_DIR)/%.pdb
...
...
@@ -308,6 +327,8 @@ $(EXPORT_JRE_BIN_DIR)/%.map: $(MISC_DIR)/%.map
$
(
install-file
)
# Client files always come from C1 area
$(EXPORT_CLIENT_DIR)/%.diz
:
$(C1_DIR)/%.diz
$
(
install-file
)
$(EXPORT_CLIENT_DIR)/%.dll
:
$(C1_DIR)/%.dll
$
(
install-file
)
$(EXPORT_CLIENT_DIR)/%.pdb
:
$(C1_DIR)/%.pdb
...
...
@@ -316,6 +337,8 @@ $(EXPORT_CLIENT_DIR)/%.map: $(C1_DIR)/%.map
$
(
install-file
)
# Server files always come from C2 area
$(EXPORT_SERVER_DIR)/%.diz
:
$(C2_DIR)/%.diz
$
(
install-file
)
$(EXPORT_SERVER_DIR)/%.dll
:
$(C2_DIR)/%.dll
$
(
install-file
)
$(EXPORT_SERVER_DIR)/%.pdb
:
$(C2_DIR)/%.pdb
...
...
@@ -324,6 +347,8 @@ $(EXPORT_SERVER_DIR)/%.map: $(C2_DIR)/%.map
$
(
install-file
)
# Kernel files always come from kernel area
$(EXPORT_KERNEL_DIR)/%.diz
:
$(KERNEL_DIR)/%.diz
$
(
install-file
)
$(EXPORT_KERNEL_DIR)/%.dll
:
$(KERNEL_DIR)/%.dll
$
(
install-file
)
$(EXPORT_KERNEL_DIR)/%.pdb
:
$(KERNEL_DIR)/%.pdb
...
...
@@ -347,6 +372,12 @@ ifneq ($(OSNAME),windows)
$
(
install-file
)
$(EXPORT_SERVER_DIR)/64/%.debuginfo
:
$(C2_DIR)/%.debuginfo
$
(
install-file
)
$(EXPORT_JRE_LIB_ARCH_DIR)/%.diz
:
$(C2_DIR)/%.diz
$
(
install-file
)
$(EXPORT_SERVER_DIR)/%.diz
:
$(C2_DIR)/%.diz
$
(
install-file
)
$(EXPORT_SERVER_DIR)/64/%.diz
:
$(C2_DIR)/%.diz
$
(
install-file
)
endif
ifeq
($(JVM_VARIANT_CLIENT), true)
$(EXPORT_JRE_LIB_ARCH_DIR)/%.$(LIBRARY_SUFFIX)
:
$(C1_DIR)/%.$(LIBRARY_SUFFIX)
...
...
@@ -361,6 +392,12 @@ ifneq ($(OSNAME),windows)
$
(
install-file
)
$(EXPORT_CLIENT_DIR)/64/%.debuginfo
:
$(C1_DIR)/%.debuginfo
$
(
install-file
)
$(EXPORT_JRE_LIB_ARCH_DIR)/%.diz
:
$(C1_DIR)/%.diz
$
(
install-file
)
$(EXPORT_CLIENT_DIR)/%.diz
:
$(C1_DIR)/%.diz
$
(
install-file
)
$(EXPORT_CLIENT_DIR)/64/%.diz
:
$(C1_DIR)/%.diz
$
(
install-file
)
endif
ifeq
($(JVM_VARIANT_ZEROSHARK), true)
$(EXPORT_JRE_LIB_ARCH_DIR)/%.$(LIBRARY_SUFFIX)
:
$(SHARK_DIR)/%.$(LIBRARY_SUFFIX)
...
...
make/hotspot_version
浏览文件 @
50d03f76
...
...
@@ -35,7 +35,7 @@ HOTSPOT_VM_COPYRIGHT=Copyright 2011
HS_MAJOR_VER=24
HS_MINOR_VER=0
HS_BUILD_NUMBER=0
8
HS_BUILD_NUMBER=0
9
JDK_MAJOR_VER=1
JDK_MINOR_VER=8
...
...
make/linux/Makefile
浏览文件 @
50d03f76
#
# Copyright (c) 1999, 201
1
, Oracle and/or its affiliates. All rights reserved.
# Copyright (c) 1999, 201
2
, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
...
...
@@ -210,7 +210,7 @@ TARGETS_SHARK = $(addsuffix shark,$(TARGETS))
BUILDTREE_MAKE
=
$(GAMMADIR)
/make/
$(OSNAME)
/makefiles/buildtree.make
BUILDTREE_VARS
=
GAMMADIR
=
$(GAMMADIR)
OS_FAMILY
=
$(OSNAME)
SRCARCH
=
$(SRCARCH)
BUILDARCH
=
$(BUILDARCH)
LIBARCH
=
$(LIBARCH)
BUILDTREE_VARS
+=
HOTSPOT_RELEASE_VERSION
=
$(HOTSPOT_RELEASE_VERSION)
HOTSPOT_BUILD_VERSION
=
$(HOTSPOT_BUILD_VERSION)
JRE_RELEASE_VERSION
=
$(JRE_RELEASE_VERSION)
BUILDTREE_VARS
+=
OBJCOPY
=
$(OBJCOPY)
STRIP_POLICY
=
$(STRIP_POLICY
)
BUILDTREE_VARS
+=
ENABLE_FULL_DEBUG_SYMBOLS
=
$(ENABLE_FULL_DEBUG_SYMBOLS)
OBJCOPY
=
$(OBJCOPY)
STRIP_POLICY
=
$(STRIP_POLICY)
ZIP_DEBUGINFO_FILES
=
$(ZIP_DEBUGINFO_FILES)
ZIPEXE
=
$(ZIPEXE
)
BUILDTREE
=
$(MAKE)
-f
$(BUILDTREE_MAKE)
$(BUILDTREE_VARS)
...
...
@@ -337,9 +337,11 @@ treeshark: $(SUBDIRS_SHARK)
# Doc target. This is the same for all build options.
# Hence create a docs directory beside ...$(ARCH)_[...]
# We specify 'BUILD_FLAVOR=product' so that the proper
# ENABLE_FULL_DEBUG_SYMBOLS value is used.
docs
:
checks
$(QUIETLY)
mkdir
-p
$(SUBDIR_DOCS)
$(MAKE)
-f
$(GAMMADIR)
/make/
$(OSNAME)
/makefiles/jvmti.make
$(MFLAGS)
$(BUILDTREE_VARS)
JvmtiOutDir
=
$(SUBDIR_DOCS)
jvmtidocs
$(MAKE)
-f
$(GAMMADIR)
/make/
$(OSNAME)
/makefiles/jvmti.make
$(MFLAGS)
$(BUILDTREE_VARS)
JvmtiOutDir
=
$(SUBDIR_DOCS)
BUILD_FLAVOR
=
product
jvmtidocs
# Synonyms for win32-like targets.
compiler2
:
jvmg product
...
...
make/linux/makefiles/buildtree.make
浏览文件 @
50d03f76
#
# Copyright (c) 2005, 201
1
, Oracle and/or its affiliates. All rights reserved.
# Copyright (c) 2005, 201
2
, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
...
...
@@ -236,10 +236,16 @@ flags.make: $(BUILDTREE_MAKE) ../shared_dirs.lst
echo
"
$(
call
gamma-path,commonsrc,os/posix/vm
)
"
;
\
[
-n
"
$(CFLAGS_BROWSE)
"
]
&&
\
echo
&&
echo
"CFLAGS_BROWSE =
$(CFLAGS_BROWSE)
"
;
\
[
-n
"
$(ENABLE_FULL_DEBUG_SYMBOLS)
"
]
&&
\
echo
&&
echo
"ENABLE_FULL_DEBUG_SYMBOLS =
$(ENABLE_FULL_DEBUG_SYMBOLS)
"
;
\
[
-n
"
$(OBJCOPY)
"
]
&&
\
echo
&&
echo
"OBJCOPY =
$(OBJCOPY)
"
;
\
[
-n
"
$(STRIP_POLICY)
"
]
&&
\
echo
&&
echo
"STRIP_POLICY =
$(STRIP_POLICY)
"
;
\
[
-n
"
$(ZIP_DEBUGINFO_FILES)
"
]
&&
\
echo
&&
echo
"ZIP_DEBUGINFO_FILES =
$(ZIP_DEBUGINFO_FILES)
"
;
\
[
-n
"
$(ZIPEXE)
"
]
&&
\
echo
&&
echo
"ZIPEXE =
$(ZIPEXE)
"
;
\
[
-n
"
$(HOTSPOT_EXTRA_SYSDEFS)
"
]
&&
\
echo
&&
\
echo
"HOTSPOT_EXTRA_SYSDEFS
\$
$(HOTSPOT_EXTRA_SYSDEFS)
=
$(HOTSPOT_EXTRA_SYSDEFS)
"
&&
\
...
...
make/linux/makefiles/defs.make
浏览文件 @
50d03f76
...
...
@@ -141,32 +141,70 @@ else
endif
ifeq
($(JDK6_OR_EARLIER),0)
# Full Debug Symbols is supported on JDK7 or newer
# Full Debug Symbols is supported on JDK7 or newer.
# The Full Debug Symbols (FDS) default for BUILD_FLAVOR == product
# builds is enabled with debug info files ZIP'ed to save space. For
# BUILD_FLAVOR != product builds, FDS is always enabled, after all a
# debug build without debug info isn't very useful.
# The ZIP_DEBUGINFO_FILES option only has meaning when FDS is enabled.
#
# If you invoke a build with FULL_DEBUG_SYMBOLS=0, then FDS will be
# disabled for a BUILD_FLAVOR == product build.
#
# Note: Use of a different variable name for the FDS override option
# versus the FDS enabled check is intentional (FULL_DEBUG_SYMBOLS
# versus ENABLE_FULL_DEBUG_SYMBOLS). For auto build systems that pass
# in options via environment variables, use of distinct variables
# prevents strange behaviours. For example, in a BUILD_FLAVOR !=
# product build, the FULL_DEBUG_SYMBOLS environment variable will be
# 0, but the ENABLE_FULL_DEBUG_SYMBOLS make variable will be 1. If
# the same variable name is used, then different values can be picked
# up by different parts of the build. Just to be clear, we only need
# two variable names because the incoming option value can be
# overridden in some situations, e.g., a BUILD_FLAVOR != product
# build.
# Default OBJCOPY comes from GNU Binutils on Linux:
DEF_OBJCOPY
=
/usr/bin/objcopy
ifdef
CROSS_COMPILE_ARCH
# don't try to generate .debuginfo files when cross compiling
_JUNK_
:=
$(
shell
\
echo
>
&2
"INFO: cross compiling for ARCH
$(CROSS_COMPILE_ARCH)
,"
\
"skipping .debuginfo generation."
)
OBJCOPY
=
ifeq
($(BUILD_FLAVOR), product)
FULL_DEBUG_SYMBOLS
?=
1
ENABLE_FULL_DEBUG_SYMBOLS
=
$(FULL_DEBUG_SYMBOLS)
else
OBJCOPY
=
$(
shell
test
-x
$(DEF_OBJCOPY)
&&
echo
$(DEF_OBJCOPY)
)
ifneq
($(ALT_OBJCOPY),)
_JUNK_
:=
$(
shell
echo
>
&2
"INFO: ALT_OBJCOPY=
$(ALT_OBJCOPY)
"
)
# disable .debuginfo support by setting ALT_OBJCOPY to a non-existent path
OBJCOPY
=
$(
shell
test
-x
$(ALT_OBJCOPY)
&&
echo
$(ALT_OBJCOPY)
)
# debug variants always get Full Debug Symbols (if available)
ENABLE_FULL_DEBUG_SYMBOLS
=
1
endif
_JUNK_
:=
$(
shell
\
echo
>
&2
"INFO: ENABLE_FULL_DEBUG_SYMBOLS=
$(ENABLE_FULL_DEBUG_SYMBOLS)
"
)
# since objcopy is optional, we set ZIP_DEBUGINFO_FILES later
ifeq
($(ENABLE_FULL_DEBUG_SYMBOLS),1)
# Default OBJCOPY comes from GNU Binutils on Linux:
DEF_OBJCOPY
=
/usr/bin/objcopy
ifdef
CROSS_COMPILE_ARCH
# don't try to generate .debuginfo files when cross compiling
_JUNK_
:=
$(
shell
\
echo
>
&2
"INFO: cross compiling for ARCH
$(CROSS_COMPILE_ARCH)
,"
\
"skipping .debuginfo generation."
)
OBJCOPY
=
else
OBJCOPY
=
$(
shell
test
-x
$(DEF_OBJCOPY)
&&
echo
$(DEF_OBJCOPY)
)
ifneq
($(ALT_OBJCOPY),)
_JUNK_
:=
$(
shell
echo
>
&2
"INFO: ALT_OBJCOPY=
$(ALT_OBJCOPY)
"
)
OBJCOPY
=
$(
shell
test
-x
$(ALT_OBJCOPY)
&&
echo
$(ALT_OBJCOPY)
)
endif
endif
else
OBJCOPY
=
endif
ifeq
($(OBJCOPY),)
_JUNK_
:=
$(
shell
\
echo
>
&2
"INFO: no objcopy cmd found so cannot create .debuginfo files."
)
ENABLE_FULL_DEBUG_SYMBOLS
=
0
_JUNK_
:=
$(
shell
\
echo
>
&2
"INFO: ENABLE_FULL_DEBUG_SYMBOLS=
$(ENABLE_FULL_DEBUG_SYMBOLS)
"
)
else
_JUNK_
:=
$(
shell
\
echo
>
&2
"INFO:
$(OBJCOPY)
cmd found so will create .debuginfo files."
)
# Library stripping policies for .debuginfo configs:
# all_strip - strips everything from the library
# min_strip - strips most stuff from the library; leaves minimum symbols
...
...
@@ -175,15 +213,17 @@ ifeq ($(JDK6_OR_EARLIER),0)
# Oracle security policy requires "all_strip". A waiver was granted on
# 2011.09.01 that permits using "min_strip" in the Java JDK and Java JRE.
#
DEF_STRIP_POLICY
=
"min_strip"
ifeq
($(ALT_STRIP_POLICY),)
STRIP_POLICY
=
$(DEF_STRIP_POLICY)
else
STRIP_POLICY
=
$(ALT_STRIP_POLICY)
endif
# Currently, STRIP_POLICY is only used when Full Debug Symbols is enabled.
#
STRIP_POLICY
?=
min_strip
_JUNK_
:=
$(
shell
\
echo
>
&2
"INFO: STRIP_POLICY=
$(STRIP_POLICY)
"
)
ZIP_DEBUGINFO_FILES
?=
1
_JUNK_
:=
$(
shell
\
echo
>
&2
"INFO: ZIP_DEBUGINFO_FILES=
$(ZIP_DEBUGINFO_FILES)
"
)
endif
endif
...
...
@@ -199,8 +239,12 @@ EXPORT_LIST += $(EXPORT_DOCS_DIR)/platform/jvmti/jvmti.html
# client and server subdirectories have symbolic links to ../libjsig.so
EXPORT_LIST
+=
$(EXPORT_JRE_LIB_ARCH_DIR)
/libjsig.
$(LIBRARY_SUFFIX)
ifneq
($(OBJCOPY),)
EXPORT_LIST
+=
$(EXPORT_JRE_LIB_ARCH_DIR)
/libjsig.debuginfo
ifeq
($(ENABLE_FULL_DEBUG_SYMBOLS),1)
ifeq
($(ZIP_DEBUGINFO_FILES),1)
EXPORT_LIST
+=
$(EXPORT_JRE_LIB_ARCH_DIR)
/libjsig.diz
else
EXPORT_LIST
+=
$(EXPORT_JRE_LIB_ARCH_DIR)
/libjsig.debuginfo
endif
endif
EXPORT_SERVER_DIR
=
$(EXPORT_JRE_LIB_ARCH_DIR)
/server
EXPORT_CLIENT_DIR
=
$(EXPORT_JRE_LIB_ARCH_DIR)
/client
...
...
@@ -210,16 +254,24 @@ EXPORT_LIST += $(EXPORT_JRE_LIB_DIR)/wb.jar
ifeq
($(findstring true, $(JVM_VARIANT_SERVER) $(JVM_VARIANT_ZERO) $(JVM_VARIANT_ZEROSHARK)), true)
EXPORT_LIST
+=
$(EXPORT_SERVER_DIR)
/Xusage.txt
EXPORT_LIST
+=
$(EXPORT_SERVER_DIR)
/libjvm.
$(LIBRARY_SUFFIX)
ifneq
($(OBJCOPY),)
EXPORT_LIST
+=
$(EXPORT_SERVER_DIR)
/libjvm.debuginfo
ifeq
($(ENABLE_FULL_DEBUG_SYMBOLS),1)
ifeq
($(ZIP_DEBUGINFO_FILES),1)
EXPORT_LIST
+=
$(EXPORT_SERVER_DIR)
/libjvm.diz
else
EXPORT_LIST
+=
$(EXPORT_SERVER_DIR)
/libjvm.debuginfo
endif
endif
endif
ifeq
($(JVM_VARIANT_CLIENT),true)
EXPORT_LIST
+=
$(EXPORT_CLIENT_DIR)
/Xusage.txt
EXPORT_LIST
+=
$(EXPORT_CLIENT_DIR)
/libjvm.
$(LIBRARY_SUFFIX)
ifneq
($(OBJCOPY),)
EXPORT_LIST
+=
$(EXPORT_CLIENT_DIR)
/libjvm.debuginfo
ifeq
($(ENABLE_FULL_DEBUG_SYMBOLS),1)
ifeq
($(ZIP_DEBUGINFO_FILES),1)
EXPORT_LIST
+=
$(EXPORT_CLIENT_DIR)
/libjvm.diz
else
EXPORT_LIST
+=
$(EXPORT_CLIENT_DIR)
/libjvm.debuginfo
endif
endif
endif
...
...
@@ -229,9 +281,14 @@ ADD_SA_BINARIES/x86 = $(EXPORT_JRE_LIB_ARCH_DIR)/libsaproc.$(LIBRARY_SUFFIX) \
$(EXPORT_LIB_DIR)
/sa-jdi.jar
ADD_SA_BINARIES/
sparc
=
$(EXPORT_JRE_LIB_ARCH_DIR)
/libsaproc.
$(LIBRARY_SUFFIX)
\
$(EXPORT_LIB_DIR)
/sa-jdi.jar
ifneq
($(OBJCOPY),)
ADD_SA_BINARIES/
x86
+=
$(EXPORT_JRE_LIB_ARCH_DIR)
/libsaproc.debuginfo
ADD_SA_BINARIES/
sparc
+=
$(EXPORT_JRE_LIB_ARCH_DIR)
/libsaproc.debuginfo
ifeq
($(ENABLE_FULL_DEBUG_SYMBOLS),1)
ifeq
($(ZIP_DEBUGINFO_FILES),1)
ADD_SA_BINARIES/
x86
+=
$(EXPORT_JRE_LIB_ARCH_DIR)
/libsaproc.diz
ADD_SA_BINARIES/
sparc
+=
$(EXPORT_JRE_LIB_ARCH_DIR)
/libsaproc.diz
else
ADD_SA_BINARIES/
x86
+=
$(EXPORT_JRE_LIB_ARCH_DIR)
/libsaproc.debuginfo
ADD_SA_BINARIES/
sparc
+=
$(EXPORT_JRE_LIB_ARCH_DIR)
/libsaproc.debuginfo
endif
endif
ADD_SA_BINARIES/
ppc
=
ADD_SA_BINARIES/
ia64
=
...
...
make/linux/makefiles/gcc.make
浏览文件 @
50d03f76
#
# Copyright (c) 1999, 201
1
, Oracle and/or its affiliates. All rights reserved.
# Copyright (c) 1999, 201
2
, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
...
...
@@ -230,7 +230,7 @@ ifeq ($(DEBUG_CFLAGS/$(BUILDARCH)),)
DEBUG_CFLAGS
+=
-gstabs
endif
if
neq
($(OBJCOPY),
)
if
eq
($(ENABLE_FULL_DEBUG_SYMBOLS),1
)
FASTDEBUG_CFLAGS/
ia64
=
-g
FASTDEBUG_CFLAGS/
amd64
=
-g
FASTDEBUG_CFLAGS/
arm
=
-g
...
...
make/linux/makefiles/jsig.make
浏览文件 @
50d03f76
#
# Copyright (c) 2005, 201
1
, Oracle and/or its affiliates. All rights reserved.
# Copyright (c) 2005, 201
2
, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
...
...
@@ -32,12 +32,15 @@ JSIG_G = $(JSIG)$(G_SUFFIX)
LIBJSIG_G
=
lib
$(JSIG_G)
.so
LIBJSIG_DEBUGINFO
=
lib
$(JSIG)
.debuginfo
LIBJSIG_DIZ
=
lib
$(JSIG)
.diz
LIBJSIG_G_DEBUGINFO
=
lib
$(JSIG_G)
.debuginfo
LIBJSIG_G_DIZ
=
lib
$(JSIG_G)
.diz
JSIGSRCDIR
=
$(GAMMADIR)
/src/os/
$(Platform_os_family)
/vm
DEST_JSIG
=
$(JDK_LIBDIR)
/
$(LIBJSIG)
DEST_JSIG_DEBUGINFO
=
$(JDK_LIBDIR)
/
$(LIBJSIG_DEBUGINFO)
DEST_JSIG_DIZ
=
$(JDK_LIBDIR)
/
$(LIBJSIG_DIZ)
LIBJSIG_MAPFILE
=
$(MAKEFILES_DIR)
/mapfile-vers-jsig
...
...
@@ -58,7 +61,7 @@ $(LIBJSIG): $(JSIGSRCDIR)/jsig.c $(LIBJSIG_MAPFILE)
$(QUIETLY)
$(CC)
$(SYMFLAG)
$(ARCHFLAG)
$(SHARED_FLAG)
$(PICFLAG)
\
$(LFLAGS_JSIG)
$(JSIG_DEBUG_CFLAGS)
-o
$@
$<
-ldl
$(QUIETLY)
[
-f
$(LIBJSIG_G)
]
||
{
ln
-s
$@
$(LIBJSIG_G)
;
}
if
neq
($(OBJCOPY),
)
if
eq
($(ENABLE_FULL_DEBUG_SYMBOLS),1
)
$(QUIETLY)
$(OBJCOPY)
--only-keep-debug
$@
$(LIBJSIG_DEBUGINFO)
$(QUIETLY)
$(OBJCOPY)
--add-gnu-debuglink
=
$(LIBJSIG_DEBUGINFO)
$@
ifeq
($(STRIP_POLICY),all_strip)
...
...
@@ -70,12 +73,19 @@ ifneq ($(OBJCOPY),)
endif
endif
[
-f
$(LIBJSIG_G_DEBUGINFO)
]
||
{
ln
-s
$(LIBJSIG_DEBUGINFO)
$(LIBJSIG_G_DEBUGINFO);
}
ifeq
($(ZIP_DEBUGINFO_FILES),1)
$(ZIPEXE)
-q
-y
$(LIBJSIG_DIZ)
$(LIBJSIG_DEBUGINFO)
$(LIBJSIG_G_DEBUGINFO)
$(RM)
$(LIBJSIG_DEBUGINFO)
$(LIBJSIG_G_DEBUGINFO)
[
-f
$(LIBJSIG_G_DIZ)
]
||
{
ln
-s
$(LIBJSIG_DIZ)
$(LIBJSIG_G_DIZ);
}
endif
endif
install_jsig
:
$(LIBJSIG)
@
echo
"Copying
$(LIBJSIG)
to
$(DEST_JSIG)
"
$(QUIETLY)
test
-f
$(LIBJSIG_DEBUGINFO)
&&
\
cp
-f
$(LIBJSIG_DEBUGINFO)
$(DEST_JSIG_DEBUGINFO)
$(QUIETLY)
test
-f
$(LIBJSIG_DIZ)
&&
\
cp
-f
$(LIBJSIG_DIZ)
$(DEST_JSIG_DIZ)
$(QUIETLY)
cp
-f
$(LIBJSIG)
$(DEST_JSIG)
&&
echo
"Done"
.PHONY
:
install_jsig
make/linux/makefiles/saproc.make
浏览文件 @
50d03f76
...
...
@@ -33,7 +33,9 @@ SAPROC_G = $(SAPROC)$(G_SUFFIX)
LIBSAPROC_G
=
lib
$(SAPROC_G)
.so
LIBSAPROC_DEBUGINFO
=
lib
$(SAPROC)
.debuginfo
LIBSAPROC_DIZ
=
lib
$(SAPROC)
.diz
LIBSAPROC_G_DEBUGINFO
=
lib
$(SAPROC_G)
.debuginfo
LIBSAPROC_G_DIZ
=
lib
$(SAPROC_G)
.diz
AGENT_DIR
=
$(GAMMADIR)
/agent
...
...
@@ -50,6 +52,7 @@ SAMAPFILE = $(SASRCDIR)/mapfile
DEST_SAPROC
=
$(JDK_LIBDIR)
/
$(LIBSAPROC)
DEST_SAPROC_DEBUGINFO
=
$(JDK_LIBDIR)
/
$(LIBSAPROC_DEBUGINFO)
DEST_SAPROC_DIZ
=
$(JDK_LIBDIR)
/
$(LIBSAPROC_DIZ)
# DEBUG_BINARIES overrides everything, use full -g debug information
ifeq
($(DEBUG_BINARIES), true)
...
...
@@ -87,7 +90,7 @@ $(LIBSAPROC): $(SASRCFILES) $(SAMAPFILE)
-o
$@
\
-lthread_db
$(QUIETLY)
[
-f
$(LIBSAPROC_G)
]
||
{
ln
-s
$@
$(LIBSAPROC_G)
;
}
if
neq
($(OBJCOPY),
)
if
eq
($(ENABLE_FULL_DEBUG_SYMBOLS),1
)
$(QUIETLY)
$(OBJCOPY)
--only-keep-debug
$@
$(LIBSAPROC_DEBUGINFO)
$(QUIETLY)
$(OBJCOPY)
--add-gnu-debuglink
=
$(LIBSAPROC_DEBUGINFO)
$@
ifeq
($(STRIP_POLICY),all_strip)
...
...
@@ -99,6 +102,11 @@ ifneq ($(OBJCOPY),)
endif
endif
[
-f
$(LIBSAPROC_G_DEBUGINFO)
]
||
{
ln
-s
$(LIBSAPROC_DEBUGINFO)
$(LIBSAPROC_G_DEBUGINFO);
}
ifeq
($(ZIP_DEBUGINFO_FILES),1)
$(ZIPEXE)
-q
-y
$(LIBSAPROC_DIZ)
$(LIBSAPROC_DEBUGINFO)
$(LIBSAPROC_G_DEBUGINFO)
$(RM)
$(LIBSAPROC_DEBUGINFO)
$(LIBSAPROC_G_DEBUGINFO)
[
-f
$(LIBSAPROC_G_DIZ)
]
||
{
ln
-s
$(LIBSAPROC_DIZ)
$(LIBSAPROC_G_DIZ);
}
endif
endif
install_saproc
:
$(BUILDLIBSAPROC)
...
...
@@ -106,6 +114,8 @@ install_saproc: $(BUILDLIBSAPROC)
echo
"Copying
$(LIBSAPROC)
to
$(DEST_SAPROC)
"
;
\
test
-f
$(LIBSAPROC_DEBUGINFO)
&&
\
cp
-f
$(LIBSAPROC_DEBUGINFO)
$(DEST_SAPROC_DEBUGINFO)
;
\
test
-f
$(LIBSAPROC_DIZ)
&&
\
cp
-f
$(LIBSAPROC_DIZ)
$(DEST_SAPROC_DIZ)
;
\
cp
-f
$(LIBSAPROC)
$(DEST_SAPROC)
&&
echo
"Done"
;
\
fi
...
...
make/linux/makefiles/vm.make
浏览文件 @
50d03f76
...
...
@@ -61,7 +61,7 @@ Src_Dirs_I += $(GENERATED)
INCLUDES
+=
$
(
PRECOMPILED_HEADER_DIR:%
=
-I
%
)
$
(
Src_Dirs_I:%
=
-I
%
)
# SYMFLAG is used by {jsig,saproc}.make
if
neq
($(OBJCOPY),
)
if
eq
($(ENABLE_FULL_DEBUG_SYMBOLS),1
)
# always build with debug info when we can create .debuginfo files
SYMFLAG
=
-g
else
...
...
@@ -139,7 +139,9 @@ LIBJVM = lib$(JVM).so
LIBJVM_G
=
lib
$(JVM)$(G_SUFFIX)
.so
LIBJVM_DEBUGINFO
=
lib
$(JVM)
.debuginfo
LIBJVM_DIZ
=
lib
$(JVM)
.diz
LIBJVM_G_DEBUGINFO
=
lib
$(JVM)$(G_SUFFIX)
.debuginfo
LIBJVM_G_DIZ
=
lib
$(JVM)$(G_SUFFIX)
.diz
SPECIAL_PATHS
:=
adlc c1 gc_implementation opto shark libadt
...
...
@@ -331,7 +333,7 @@ $(LIBJVM): $(LIBJVM.o) $(LIBJVM_MAPFILE) $(LD_SCRIPT)
fi
\
}
ifeq
($(CROSS_COMPILE_ARCH),)
if
neq
($(OBJCOPY),
)
if
eq
($(ENABLE_FULL_DEBUG_SYMBOLS),1
)
$(QUIETLY)
$(OBJCOPY)
--only-keep-debug
$@
$(LIBJVM_DEBUGINFO)
$(QUIETLY)
$(OBJCOPY)
--add-gnu-debuglink
=
$(LIBJVM_DEBUGINFO)
$@
ifeq
($(STRIP_POLICY),all_strip)
...
...
@@ -343,17 +345,25 @@ ifeq ($(CROSS_COMPILE_ARCH),)
endif
endif
$(QUIETLY)
[
-f
$(LIBJVM_G_DEBUGINFO)
]
||
ln
-s
$(LIBJVM_DEBUGINFO)
$(LIBJVM_G_DEBUGINFO)
ifeq
($(ZIP_DEBUGINFO_FILES),1)
$(ZIPEXE)
-q
-y
$(LIBJVM_DIZ)
$(LIBJVM_DEBUGINFO)
$(LIBJVM_G_DEBUGINFO)
$(RM)
$(LIBJVM_DEBUGINFO)
$(LIBJVM_G_DEBUGINFO)
[
-f
$(LIBJVM_G_DIZ)
]
||
{
ln
-s
$(LIBJVM_DIZ)
$(LIBJVM_G_DIZ);
}
endif
endif
endif
DEST_SUBDIR
=
$(JDK_LIBDIR)
/
$(VM_SUBDIR)
DEST_JVM
=
$(DEST_SUBDIR)
/
$(LIBJVM)
DEST_JVM_DEBUGINFO
=
$(DEST_SUBDIR)
/
$(LIBJVM_DEBUGINFO)
DEST_JVM_DIZ
=
$(DEST_SUBDIR)
/
$(LIBJVM_DIZ)
install_jvm
:
$(LIBJVM)
@
echo
"Copying
$(LIBJVM)
to
$(DEST_JVM)
"
$(QUIETLY)
test
-f
$(LIBJVM_DEBUGINFO)
&&
\
cp
-f
$(LIBJVM_DEBUGINFO)
$(DEST_JVM_DEBUGINFO)
$(QUIETLY)
test
-f
$(LIBJVM_DIZ)
&&
\
cp
-f
$(LIBJVM_DIZ)
$(DEST_JVM_DIZ)
$(QUIETLY)
cp
-f
$(LIBJVM)
$(DEST_JVM)
&&
echo
"Done"
#----------------------------------------------------------------------
...
...
make/solaris/Makefile
浏览文件 @
50d03f76
#
# Copyright (c) 1998, 201
1
, Oracle and/or its affiliates. All rights reserved.
# Copyright (c) 1998, 201
2
, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
...
...
@@ -168,7 +168,7 @@ TARGETS_KERNEL = $(addsuffix kernel,$(TARGETS))
BUILDTREE_MAKE
=
$(GAMMADIR)
/make/
$(OSNAME)
/makefiles/buildtree.make
BUILDTREE_VARS
=
GAMMADIR
=
$(GAMMADIR)
OS_FAMILY
=
$(OSNAME)
ARCH
=
$(SRCARCH)
BUILDARCH
=
$(BUILDARCH)
LIBARCH
=
$(LIBARCH)
BUILDTREE_VARS
+=
HOTSPOT_RELEASE_VERSION
=
$(HOTSPOT_RELEASE_VERSION)
HOTSPOT_BUILD_VERSION
=
$(HOTSPOT_BUILD_VERSION)
JRE_RELEASE_VERSION
=
$(JRE_RELEASE_VERSION)
BUILDTREE_VARS
+=
OBJCOPY
=
$(OBJCOPY)
STRIP_POLICY
=
$(STRIP_POLICY
)
BUILDTREE_VARS
+=
ENABLE_FULL_DEBUG_SYMBOLS
=
$(ENABLE_FULL_DEBUG_SYMBOLS)
OBJCOPY
=
$(OBJCOPY)
STRIP_POLICY
=
$(STRIP_POLICY)
ZIP_DEBUGINFO_FILES
=
$(ZIP_DEBUGINFO_FILES)
ZIPEXE
=
$(ZIPEXE
)
BUILDTREE
=
$(MAKE)
-f
$(BUILDTREE_MAKE)
$(BUILDTREE_VARS)
...
...
@@ -278,9 +278,11 @@ treekernel: $(SUBDIRS_KERNEL)
# Doc target. This is the same for all build options.
# Hence create a docs directory beside ...$(ARCH)_[...]
# We specify 'BUILD_FLAVOR=product' so that the proper
# ENABLE_FULL_DEBUG_SYMBOLS value is used.
docs
:
checks
$(QUIETLY)
mkdir
-p
$(SUBDIR_DOCS)
$(MAKE)
-f
$(GAMMADIR)
/make/
$(OSNAME)
/makefiles/jvmti.make
$(MFLAGS)
$(BUILDTREE_VARS)
JvmtiOutDir
=
$(SUBDIR_DOCS)
jvmtidocs
$(MAKE)
-f
$(GAMMADIR)
/make/
$(OSNAME)
/makefiles/jvmti.make
$(MFLAGS)
$(BUILDTREE_VARS)
JvmtiOutDir
=
$(SUBDIR_DOCS)
BUILD_FLAVOR
=
product
jvmtidocs
# Synonyms for win32-like targets.
compiler2
:
jvmg product
...
...
make/solaris/makefiles/buildtree.make
浏览文件 @
50d03f76
#
# Copyright (c) 2000, 201
1
, Oracle and/or its affiliates. All rights reserved.
# Copyright (c) 2000, 201
2
, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
...
...
@@ -229,10 +229,16 @@ flags.make: $(BUILDTREE_MAKE) ../shared_dirs.lst
echo
"
$(
call
gamma-path,commonsrc,os/posix/vm
)
"
;
\
[
-n
"
$(CFLAGS_BROWSE)
"
]
&&
\
echo
&&
echo
"CFLAGS_BROWSE =
$(CFLAGS_BROWSE)
"
;
\
[
-n
"
$(ENABLE_FULL_DEBUG_SYMBOLS)
"
]
&&
\
echo
&&
echo
"ENABLE_FULL_DEBUG_SYMBOLS =
$(ENABLE_FULL_DEBUG_SYMBOLS)
"
;
\
[
-n
"
$(OBJCOPY)
"
]
&&
\
echo
&&
echo
"OBJCOPY =
$(OBJCOPY)
"
;
\
[
-n
"
$(STRIP_POLICY)
"
]
&&
\
echo
&&
echo
"STRIP_POLICY =
$(STRIP_POLICY)
"
;
\
[
-n
"
$(ZIP_DEBUGINFO_FILES)
"
]
&&
\
echo
&&
echo
"ZIP_DEBUGINFO_FILES =
$(ZIP_DEBUGINFO_FILES)
"
;
\
[
-n
"
$(ZIPEXE)
"
]
&&
\
echo
&&
echo
"ZIPEXE =
$(ZIPEXE)
"
;
\
[
-n
"
$(HOTSPOT_EXTRA_SYSDEFS)
"
]
&&
\
echo
&&
\
echo
"HOTSPOT_EXTRA_SYSDEFS
\$
$(HOTSPOT_EXTRA_SYSDEFS)
=
$(HOTSPOT_EXTRA_SYSDEFS)
"
&&
\
...
...
make/solaris/makefiles/defs.make
浏览文件 @
50d03f76
...
...
@@ -86,45 +86,83 @@ else
endif
ifeq
($(JDK6_OR_EARLIER),0)
# Full Debug Symbols is supported on JDK7 or newer
ifdef
ENABLE_FULL_DEBUG_SYMBOLS
# Only check for Full Debug Symbols support on Solaris if it is
# specifically enabled. Hopefully, it can be enabled by default
# once the .debuginfo size issues are worked out.
# Default OBJCOPY comes from the SUNWbinutils package:
DEF_OBJCOPY
=
/usr/sfw/bin/gobjcopy
ifeq
($(VM_PLATFORM),solaris_amd64)
# On Solaris AMD64/X64, gobjcopy is not happy and fails:
#
# usr/sfw/bin/gobjcopy --add-gnu-debuglink=<lib>.debuginfo <lib>.so
# BFD: stKPaiop: Not enough room for program headers, try linking with -N
# /usr/sfw/bin/gobjcopy: stKPaiop: Bad value
# BFD: stKPaiop: Not enough room for program headers, try linking with -N
# /usr/sfw/bin/gobjcopy: libsaproc.debuginfo: Bad value
# BFD: stKPaiop: Not enough room for program headers, try linking with -N
# /usr/sfw/bin/gobjcopy: stKPaiop: Bad value
_JUNK_
:=
$(
shell
\
echo
>
&2
"INFO:
$(DEF_OBJCOPY)
is not working on Solaris AMD64/X64"
)
OBJCOPY
=
# Full Debug Symbols is supported on JDK7 or newer.
# The Full Debug Symbols (FDS) default for BUILD_FLAVOR == product
# builds is enabled with debug info files ZIP'ed to save space. For
# BUILD_FLAVOR != product builds, FDS is always enabled, after all a
# debug build without debug info isn't very useful.
# The ZIP_DEBUGINFO_FILES option only has meaning when FDS is enabled.
#
# If you invoke a build with FULL_DEBUG_SYMBOLS=0, then FDS will be
# disabled for a BUILD_FLAVOR == product build.
#
# Note: Use of a different variable name for the FDS override option
# versus the FDS enabled check is intentional (FULL_DEBUG_SYMBOLS
# versus ENABLE_FULL_DEBUG_SYMBOLS). For auto build systems that pass
# in options via environment variables, use of distinct variables
# prevents strange behaviours. For example, in a BUILD_FLAVOR !=
# product build, the FULL_DEBUG_SYMBOLS environment variable will be
# 0, but the ENABLE_FULL_DEBUG_SYMBOLS make variable will be 1. If
# the same variable name is used, then different values can be picked
# up by different parts of the build. Just to be clear, we only need
# two variable names because the incoming option value can be
# overridden in some situations, e.g., a BUILD_FLAVOR != product
# build.
# Disable FULL_DEBUG_SYMBOLS by default because dtrace tests are
# failing in nightly when the debug info files are ZIP'ed. On
# Solaris debug info files need to be ZIP'ed to reduce the impact
# on disk space footprint.
FULL_DEBUG_SYMBOLS
?=
0
ifeq
($(BUILD_FLAVOR), product)
# FULL_DEBUG_SYMBOLS ?= 1
ENABLE_FULL_DEBUG_SYMBOLS
=
$(FULL_DEBUG_SYMBOLS)
else
OBJCOPY
=
$(
shell
test
-x
$(DEF_OBJCOPY)
&&
echo
$(DEF_OBJCOPY)
)
ifneq
($(ALT_OBJCOPY),)
_JUNK_
:=
$(
shell
echo
>
&2
"INFO: ALT_OBJCOPY=
$(ALT_OBJCOPY)
"
)
# disable .debuginfo support by setting ALT_OBJCOPY to a non-existent path
OBJCOPY
=
$(
shell
test
-x
$(ALT_OBJCOPY)
&&
echo
$(ALT_OBJCOPY)
)
# debug variants always get Full Debug Symbols (if available)
# ENABLE_FULL_DEBUG_SYMBOLS = 1
ENABLE_FULL_DEBUG_SYMBOLS
=
$(FULL_DEBUG_SYMBOLS)
endif
_JUNK_
:=
$(
shell
\
echo
>
&2
"INFO: ENABLE_FULL_DEBUG_SYMBOLS=
$(ENABLE_FULL_DEBUG_SYMBOLS)
"
)
# since objcopy is optional, we set ZIP_DEBUGINFO_FILES later
ifeq
($(ENABLE_FULL_DEBUG_SYMBOLS),1)
# Default OBJCOPY comes from the SUNWbinutils package:
DEF_OBJCOPY
=
/usr/sfw/bin/gobjcopy
ifeq
($(VM_PLATFORM),solaris_amd64)
# On Solaris AMD64/X64, gobjcopy is not happy and fails:
#
# usr/sfw/bin/gobjcopy --add-gnu-debuglink=<lib>.debuginfo <lib>.so
# BFD: stKPaiop: Not enough room for program headers, try linking with -N
# /usr/sfw/bin/gobjcopy: stKPaiop: Bad value
# BFD: stKPaiop: Not enough room for program headers, try linking with -N
# /usr/sfw/bin/gobjcopy: libsaproc.debuginfo: Bad value
# BFD: stKPaiop: Not enough room for program headers, try linking with -N
# /usr/sfw/bin/gobjcopy: stKPaiop: Bad value
_JUNK_
:=
$(
shell
\
echo
>
&2
"INFO:
$(DEF_OBJCOPY)
is not working on Solaris AMD64/X64"
)
OBJCOPY
=
else
OBJCOPY
=
$(
shell
test
-x
$(DEF_OBJCOPY)
&&
echo
$(DEF_OBJCOPY)
)
ifneq
($(ALT_OBJCOPY),)
_JUNK_
:=
$(
shell
echo
>
&2
"INFO: ALT_OBJCOPY=
$(ALT_OBJCOPY)
"
)
OBJCOPY
=
$(
shell
test
-x
$(ALT_OBJCOPY)
&&
echo
$(ALT_OBJCOPY)
)
endif
endif
else
OBJCOPY
=
endif
endif
ifeq
($(OBJCOPY),)
_JUNK_
:=
$(
shell
\
echo
>
&2
"INFO: no objcopy cmd found so cannot create .debuginfo files."
)
ENABLE_FULL_DEBUG_SYMBOLS
=
0
_JUNK_
:=
$(
shell
\
echo
>
&2
"INFO: ENABLE_FULL_DEBUG_SYMBOLS=
$(ENABLE_FULL_DEBUG_SYMBOLS)
"
)
else
_JUNK_
:=
$(
shell
\
echo
>
&2
"INFO:
$(OBJCOPY)
cmd found so will create .debuginfo files."
)
# Library stripping policies for .debuginfo configs:
# all_strip - strips everything from the library
# min_strip - strips most stuff from the library; leaves minimum symbols
...
...
@@ -133,14 +171,19 @@ endif
# Oracle security policy requires "all_strip". A waiver was granted on
# 2011.09.01 that permits using "min_strip" in the Java JDK and Java JRE.
#
DEF_STRIP_POLICY
=
"min_strip"
ifeq
($(ALT_STRIP_POLICY),)
STRIP_POLICY
=
$(DEF_STRIP_POLICY)
else
STRIP_POLICY
=
$(ALT_STRIP_POLICY)
endif
# Currently, STRIP_POLICY is only used when Full Debug Symbols is enabled.
#
STRIP_POLICY
?=
min_strip
_JUNK_
:=
$(
shell
\
echo
>
&2
"INFO: STRIP_POLICY=
$(STRIP_POLICY)
"
)
# Disable ZIP_DEBUGINFO_FILES by default because dtrace tests are
# failing in nightly when the debug info files are ZIP'ed.
ZIP_DEBUGINFO_FILES
?=
0
_JUNK_
:=
$(
shell
\
echo
>
&2
"INFO: ZIP_DEBUGINFO_FILES=
$(ZIP_DEBUGINFO_FILES)
"
)
endif
endif
...
...
@@ -156,8 +199,12 @@ EXPORT_LIST += $(EXPORT_DOCS_DIR)/platform/jvmti/jvmti.html
# client and server subdirectories have symbolic links to ../libjsig.$(LIBRARY_SUFFIX)
EXPORT_LIST
+=
$(EXPORT_JRE_LIB_ARCH_DIR)
/libjsig.
$(LIBRARY_SUFFIX)
ifneq
($(OBJCOPY),)
EXPORT_LIST
+=
$(EXPORT_JRE_LIB_ARCH_DIR)
/libjsig.debuginfo
ifeq
($(ENABLE_FULL_DEBUG_SYMBOLS),1)
ifeq
($(ZIP_DEBUGINFO_FILES),1)
EXPORT_LIST
+=
$(EXPORT_JRE_LIB_ARCH_DIR)
/libjsig.diz
else
EXPORT_LIST
+=
$(EXPORT_JRE_LIB_ARCH_DIR)
/libjsig.debuginfo
endif
endif
EXPORT_LIST
+=
$(EXPORT_JRE_LIB_DIR)
/wb.jar
...
...
@@ -174,10 +221,16 @@ ifeq ($(JVM_VARIANT_SERVER),true)
EXPORT_LIST
+=
$(EXPORT_SERVER_DIR)
/64/libjvm_db.
$(LIBRARY_SUFFIX)
EXPORT_LIST
+=
$(EXPORT_SERVER_DIR)
/64/libjvm_dtrace.
$(LIBRARY_SUFFIX)
endif
ifneq
($(OBJCOPY),)
EXPORT_LIST
+=
$(EXPORT_SERVER_DIR)
/libjvm.debuginfo
EXPORT_LIST
+=
$(EXPORT_SERVER_DIR)
/libjvm_db.debuginfo
EXPORT_LIST
+=
$(EXPORT_SERVER_DIR)
/libjvm_dtrace.debuginfo
ifeq
($(ENABLE_FULL_DEBUG_SYMBOLS),1)
ifeq
($(ZIP_DEBUGINFO_FILES),1)
EXPORT_LIST
+=
$(EXPORT_SERVER_DIR)
/libjvm.diz
EXPORT_LIST
+=
$(EXPORT_SERVER_DIR)
/libjvm_db.diz
EXPORT_LIST
+=
$(EXPORT_SERVER_DIR)
/libjvm_dtrace.diz
else
EXPORT_LIST
+=
$(EXPORT_SERVER_DIR)
/libjvm.debuginfo
EXPORT_LIST
+=
$(EXPORT_SERVER_DIR)
/libjvm_db.debuginfo
EXPORT_LIST
+=
$(EXPORT_SERVER_DIR)
/libjvm_dtrace.debuginfo
endif
endif
endif
ifeq
($(JVM_VARIANT_CLIENT),true)
...
...
@@ -189,19 +242,33 @@ ifeq ($(JVM_VARIANT_CLIENT),true)
EXPORT_LIST
+=
$(EXPORT_CLIENT_DIR)
/64/libjvm_db.
$(LIBRARY_SUFFIX)
EXPORT_LIST
+=
$(EXPORT_CLIENT_DIR)
/64/libjvm_dtrace.
$(LIBRARY_SUFFIX)
endif
ifneq
($(OBJCOPY),)
EXPORT_LIST
+=
$(EXPORT_CLIENT_DIR)
/libjvm.debuginfo
EXPORT_LIST
+=
$(EXPORT_CLIENT_DIR)
/libjvm_db.debuginfo
EXPORT_LIST
+=
$(EXPORT_CLIENT_DIR)
/libjvm_dtrace.debuginfo
ifeq
($(ARCH_DATA_MODEL),32)
EXPORT_LIST
+=
$(EXPORT_CLIENT_DIR)
/64/libjvm_db.debuginfo
EXPORT_LIST
+=
$(EXPORT_CLIENT_DIR)
/64/libjvm_dtrace.debuginfo
ifeq
($(ENABLE_FULL_DEBUG_SYMBOLS),1)
ifeq
($(ZIP_DEBUGINFO_FILES),1)
EXPORT_LIST
+=
$(EXPORT_CLIENT_DIR)
/libjvm.diz
EXPORT_LIST
+=
$(EXPORT_CLIENT_DIR)
/libjvm_db.diz
EXPORT_LIST
+=
$(EXPORT_CLIENT_DIR)
/libjvm_dtrace.diz
ifeq
($(ARCH_DATA_MODEL),32)
EXPORT_LIST
+=
$(EXPORT_CLIENT_DIR)
/64/libjvm_db.diz
EXPORT_LIST
+=
$(EXPORT_CLIENT_DIR)
/64/libjvm_dtrace.diz
endif
else
EXPORT_LIST
+=
$(EXPORT_CLIENT_DIR)
/libjvm.debuginfo
EXPORT_LIST
+=
$(EXPORT_CLIENT_DIR)
/libjvm_db.debuginfo
EXPORT_LIST
+=
$(EXPORT_CLIENT_DIR)
/libjvm_dtrace.debuginfo
ifeq
($(ARCH_DATA_MODEL),32)
EXPORT_LIST
+=
$(EXPORT_CLIENT_DIR)
/64/libjvm_db.debuginfo
EXPORT_LIST
+=
$(EXPORT_CLIENT_DIR)
/64/libjvm_dtrace.debuginfo
endif
endif
endif
endif
EXPORT_LIST
+=
$(EXPORT_JRE_LIB_ARCH_DIR)
/libsaproc.
$(LIBRARY_SUFFIX)
ifneq
($(OBJCOPY),)
EXPORT_LIST
+=
$(EXPORT_JRE_LIB_ARCH_DIR)
/libsaproc.debuginfo
ifeq
($(ENABLE_FULL_DEBUG_SYMBOLS),1)
ifeq
($(ZIP_DEBUGINFO_FILES),1)
EXPORT_LIST
+=
$(EXPORT_JRE_LIB_ARCH_DIR)
/libsaproc.diz
else
EXPORT_LIST
+=
$(EXPORT_JRE_LIB_ARCH_DIR)
/libsaproc.debuginfo
endif
endif
EXPORT_LIST
+=
$(EXPORT_LIB_DIR)
/sa-jdi.jar
make/solaris/makefiles/dtrace.make
浏览文件 @
50d03f76
#
# Copyright (c) 2005, 201
1
, Oracle and/or its affiliates. All rights reserved.
# Copyright (c) 2005, 201
2
, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
...
...
@@ -41,15 +41,19 @@ JVM_DB = libjvm_db
LIBJVM_DB
=
libjvm_db.so
LIBJVM_DB_G
=
libjvm
$(G_SUFFIX)
_db.so
LIBJVM_DB_DEBUGINFO
=
libjvm_db.debuginfo
LIBJVM_DB_DEBUGINFO
=
libjvm_db.debuginfo
LIBJVM_DB_DIZ
=
libjvm_db.diz
LIBJVM_DB_G_DEBUGINFO
=
libjvm
$(G_SUFFIX)
_db.debuginfo
LIBJVM_DB_G_DIZ
=
libjvm
$(G_SUFFIX)
_db.diz
JVM_DTRACE
=
jvm_dtrace
LIBJVM_DTRACE
=
libjvm_dtrace.so
LIBJVM_DTRACE_G
=
libjvm
$(G_SUFFIX)
_dtrace.so
LIBJVM_DTRACE_DEBUGINFO
=
libjvm_dtrace.debuginfo
LIBJVM_DTRACE_DEBUGINFO
=
libjvm_dtrace.debuginfo
LIBJVM_DTRACE_DIZ
=
libjvm_dtrace.diz
LIBJVM_DTRACE_G_DEBUGINFO
=
libjvm
$(G_SUFFIX)
_dtrace.debuginfo
LIBJVM_DTRACE_G_DIZ
=
libjvm
$(G_SUFFIX)
_dtrace.diz
JVMOFFS
=
JvmOffsets
JVMOFFS.o
=
$(JVMOFFS)
.o
...
...
@@ -95,10 +99,14 @@ XLIBJVM_DB_G = 64/$(LIBJVM_DB_G)
XLIBJVM_DTRACE
=
64/
$(LIBJVM_DTRACE)
XLIBJVM_DTRACE_G
=
64/
$(LIBJVM_DTRACE_G)
XLIBJVM_DB_DEBUGINFO
=
64/
$(LIBJVM_DB_DEBUGINFO)
XLIBJVM_DB_G_DEBUGINFO
=
64/
$(LIBJVM_DB_G_DEBUGINFO)
XLIBJVM_DTRACE_DEBUGINFO
=
64/
$(LIBJVM_DTRACE_DEBUGINFO)
XLIBJVM_DB_DEBUGINFO
=
64/
$(LIBJVM_DB_DEBUGINFO)
XLIBJVM_DB_DIZ
=
64/
$(LIBJVM_DB_DIZ)
XLIBJVM_DB_G_DEBUGINFO
=
64/
$(LIBJVM_DB_G_DEBUGINFO)
XLIBJVM_DB_G_DIZ
=
64/
$(LIBJVM_DB_G_DIZ)
XLIBJVM_DTRACE_DEBUGINFO
=
64/
$(LIBJVM_DTRACE_DEBUGINFO)
XLIBJVM_DTRACE_DIZ
=
64/
$(LIBJVM_DTRACE_DIZ)
XLIBJVM_DTRACE_G_DEBUGINFO
=
64/
$(LIBJVM_DTRACE_G_DEBUGINFO)
XLIBJVM_DTRACE_G_DIZ
=
64/
$(LIBJVM_DTRACE_G_DIZ)
$(XLIBJVM_DB)
:
$(DTRACE_SRCDIR)/$(JVM_DB).c $(JVMOFFS).h $(LIBJVM_DB_MAPFILE)
@
echo
Making
$@
...
...
@@ -106,7 +114,7 @@ $(XLIBJVM_DB): $(DTRACE_SRCDIR)/$(JVM_DB).c $(JVMOFFS).h $(LIBJVM_DB_MAPFILE)
$(CC)
$(SYMFLAG)
$
(
ARCHFLAG/
$(ISA)
)
-D
$(TYPE)
-I
.
-I
$(GENERATED)
\
$(SHARED_FLAG)
$(LFLAGS_JVM_DB)
-o
$@
$(DTRACE_SRCDIR)
/
$(JVM_DB)
.c
-lc
[
-f
$(XLIBJVM_DB_G)
]
||
{
ln
-s
$(LIBJVM_DB)
$(XLIBJVM_DB_G)
;
}
if
neq
($(OBJCOPY),
)
if
eq
($(ENABLE_FULL_DEBUG_SYMBOLS),1
)
$(QUIETLY)
$(OBJCOPY)
--only-keep-debug
$@
$(XLIBJVM_DB_DEBUGINFO)
$(QUIETLY)
$(OBJCOPY)
--add-gnu-debuglink
=
$(XLIBJVM_DB_DEBUGINFO)
$@
ifeq
($(STRIP_POLICY),all_strip)
...
...
@@ -117,7 +125,12 @@ ifneq ($(OBJCOPY),)
# implied else here is no stripping at all
endif
endif
[
-f
$(XLIBJVM_DB_G_DEBUGINFO)
]
||
{
ln
-s
$(LIBJVM_DB_DEBUGINFO)
$(XLIBJVM_DB_G_DEBUGINFO);
}
[
-f
$(XLIBJVM_DB_G_DEBUGINFO)
]
||
{
ln
-s
$(XLIBJVM_DB_DEBUGINFO)
$(XLIBJVM_DB_G_DEBUGINFO);
}
ifeq
($(ZIP_DEBUGINFO_FILES),1)
$(ZIPEXE)
-q
-y
$(XLIBJVM_DB_DIZ)
$(XLIBJVM_DB_DEBUGINFO)
$(XLIBJVM_DB_G_DEBUGINFO)
$(RM)
$(XLIBJVM_DB_DEBUGINFO)
$(XLIBJVM_DB_G_DEBUGINFO)
[
-f
$(XLIBJVM_DB_G_DIZ)
]
||
{
ln
-s
$(XLIBJVM_DB_DIZ)
$(XLIBJVM_DB_G_DIZ);
}
endif
endif
$(XLIBJVM_DTRACE)
:
$(DTRACE_SRCDIR)/$(JVM_DTRACE).c $(DTRACE_SRCDIR)/$(JVM_DTRACE).h $(LIBJVM_DTRACE_MAPFILE)
...
...
@@ -126,7 +139,7 @@ $(XLIBJVM_DTRACE): $(DTRACE_SRCDIR)/$(JVM_DTRACE).c $(DTRACE_SRCDIR)/$(JVM_DTRAC
$(CC)
$(SYMFLAG)
$
(
ARCHFLAG/
$(ISA)
)
-D
$(TYPE)
-I
.
\
$(SHARED_FLAG)
$(LFLAGS_JVM_DTRACE)
-o
$@
$(DTRACE_SRCDIR)
/
$(JVM_DTRACE)
.c
-lc
-lthread
-ldoor
[
-f
$(XLIBJVM_DTRACE_G)
]
||
{
ln
-s
$(LIBJVM_DTRACE)
$(XLIBJVM_DTRACE_G)
;
}
if
neq
($(OBJCOPY),
)
if
eq
($(ENABLE_FULL_DEBUG_SYMBOLS),1
)
$(QUIETLY)
$(OBJCOPY)
--only-keep-debug
$@
$(XLIBJVM_DTRACE_DEBUGINFO)
$(QUIETLY)
$(OBJCOPY)
--add-gnu-debuglink
=
$(XLIBJVM_DTRACE_DEBUGINFO)
$@
ifeq
($(STRIP_POLICY),all_strip)
...
...
@@ -137,7 +150,12 @@ ifneq ($(OBJCOPY),)
# implied else here is no stripping at all
endif
endif
[
-f
$(XLIBJVM_DTRACE_G_DEBUGINFO)
]
||
{
ln
-s
$(LIBJVM_DTRACE_DEBUGINFO)
$(XLIBJVM_DTRACE_G_DEBUGINFO);
}
[
-f
$(XLIBJVM_DTRACE_G_DEBUGINFO)
]
||
{
ln
-s
$(XLIBJVM_DTRACE_DEBUGINFO)
$(XLIBJVM_DTRACE_G_DEBUGINFO);
}
ifeq
($(ZIP_DEBUGINFO_FILES),1)
$(ZIPEXE)
-q
-y
$(XLIBJVM_DTRACE_DIZ)
$(XLIBJVM_DTRACE_DEBUGINFO)
$(XLIBJVM_DTRACE_G_DEBUGINFO)
$(RM)
$(XLIBJVM_DTRACE_DEBUGINFO)
$(XLIBJVM_DTRACE_G_DEBUGINFO)
[
-f
$(XLIBJVM_DTRACE_G_DIZ)
]
||
{
ln
-s
$(XLIBJVM_DTRACE_DIZ)
$(XLIBJVM_DTRACE_G_DIZ);
}
endif
endif
endif
# ifneq ("${ISA}","${BUILDARCH}")
...
...
@@ -185,7 +203,7 @@ $(LIBJVM_DB): $(DTRACE_SRCDIR)/$(JVM_DB).c $(JVMOFFS.o) $(XLIBJVM_DB) $(LIBJVM_D
$(QUIETLY)
$(CC)
$(SYMFLAG)
$(ARCHFLAG)
-D
$(TYPE)
-I
.
-I
$(GENERATED)
\
$(SHARED_FLAG)
$(LFLAGS_JVM_DB)
-o
$@
$(DTRACE_SRCDIR)
/
$(JVM_DB)
.c
-lc
[
-f
$(LIBJVM_DB_G)
]
||
{
ln
-s
$@
$(LIBJVM_DB_G)
;
}
if
neq
($(OBJCOPY),
)
if
eq
($(ENABLE_FULL_DEBUG_SYMBOLS),1
)
$(QUIETLY)
$(OBJCOPY)
--only-keep-debug
$@
$(LIBJVM_DB_DEBUGINFO)
$(QUIETLY)
$(OBJCOPY)
--add-gnu-debuglink
=
$(LIBJVM_DB_DEBUGINFO)
$@
ifeq
($(STRIP_POLICY),all_strip)
...
...
@@ -197,6 +215,11 @@ ifneq ($(OBJCOPY),)
endif
endif
[
-f
$(LIBJVM_DB_G_DEBUGINFO)
]
||
{
ln
-s
$(LIBJVM_DB_DEBUGINFO)
$(LIBJVM_DB_G_DEBUGINFO);
}
ifeq
($(ZIP_DEBUGINFO_FILES),1)
$(ZIPEXE)
-q
-y
$(LIBJVM_DB_DIZ)
$(LIBJVM_DB_DEBUGINFO)
$(LIBJVM_DB_G_DEBUGINFO)
$(RM)
$(LIBJVM_DB_DEBUGINFO)
$(LIBJVM_DB_G_DEBUGINFO)
[
-f
$(LIBJVM_DB_G_DIZ)
]
||
{
ln
-s
$(LIBJVM_DB_DIZ)
$(LIBJVM_DB_G_DIZ);
}
endif
endif
$(LIBJVM_DTRACE)
:
$(DTRACE_SRCDIR)/$(JVM_DTRACE).c $(XLIBJVM_DTRACE) $(DTRACE_SRCDIR)/$(JVM_DTRACE).h $(LIBJVM_DTRACE_MAPFILE)
...
...
@@ -204,7 +227,7 @@ $(LIBJVM_DTRACE): $(DTRACE_SRCDIR)/$(JVM_DTRACE).c $(XLIBJVM_DTRACE) $(DTRACE_SR
$(QUIETLY)
$(CC)
$(SYMFLAG)
$(ARCHFLAG)
-D
$(TYPE)
-I
.
\
$(SHARED_FLAG)
$(LFLAGS_JVM_DTRACE)
-o
$@
$(DTRACE_SRCDIR)
/
$(JVM_DTRACE)
.c
-lc
-lthread
-ldoor
[
-f
$(LIBJVM_DTRACE_G)
]
||
{
ln
-s
$@
$(LIBJVM_DTRACE_G)
;
}
if
neq
($(OBJCOPY),
)
if
eq
($(ENABLE_FULL_DEBUG_SYMBOLS),1
)
$(QUIETLY)
$(OBJCOPY)
--only-keep-debug
$@
$(LIBJVM_DTRACE_DEBUGINFO)
$(QUIETLY)
$(OBJCOPY)
--add-gnu-debuglink
=
$(LIBJVM_DTRACE_DEBUGINFO)
$@
ifeq
($(STRIP_POLICY),all_strip)
...
...
@@ -216,6 +239,11 @@ ifneq ($(OBJCOPY),)
endif
endif
[
-f
$(LIBJVM_DTRACE_G_DEBUGINFO)
]
||
{
ln
-s
$(LIBJVM_DTRACE_DEBUGINFO)
$(LIBJVM_DTRACE_G_DEBUGINFO);
}
ifeq
($(ZIP_DEBUGINFO_FILES),1)
$(ZIPEXE)
-q
-y
$(LIBJVM_DTRACE_DIZ)
$(LIBJVM_DTRACE_DEBUGINFO)
$(LIBJVM_DTRACE_G_DEBUGINFO)
$(RM)
$(LIBJVM_DTRACE_DEBUGINFO)
$(LIBJVM_DTRACE_G_DEBUGINFO)
[
-f
$(LIBJVM_DTRACE_G_DIZ)
]
||
{
ln
-s
$(LIBJVM_DTRACE_DIZ)
$(LIBJVM_DTRACE_G_DIZ);
}
endif
endif
$(DTRACE).d
:
$(DTRACE_SRCDIR)/hotspot.d $(DTRACE_SRCDIR)/hotspot_jni.d
\
...
...
make/solaris/makefiles/jsig.make
浏览文件 @
50d03f76
#
# Copyright (c) 2005, 201
1
, Oracle and/or its affiliates. All rights reserved.
# Copyright (c) 2005, 201
2
, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
...
...
@@ -32,12 +32,15 @@ JSIG_G = $(JSIG)$(G_SUFFIX)
LIBJSIG_G
=
lib
$(JSIG_G)
.so
LIBJSIG_DEBUGINFO
=
lib
$(JSIG)
.debuginfo
LIBJSIG_DIZ
=
lib
$(JSIG)
.diz
LIBJSIG_G_DEBUGINFO
=
lib
$(JSIG_G)
.debuginfo
LIBJSIG_G_DIZ
=
lib
$(JSIG_G)
.diz
JSIGSRCDIR
=
$(GAMMADIR)
/src/os/
$(Platform_os_family)
/vm
DEST_JSIG
=
$(JDK_LIBDIR)
/
$(LIBJSIG)
DEST_JSIG_DEBUGINFO
=
$(JDK_LIBDIR)
/
$(LIBJSIG_DEBUGINFO)
DEST_JSIG_DIZ
=
$(JDK_LIBDIR)
/
$(LIBJSIG_DIZ)
LIBJSIG_MAPFILE
=
$(MAKEFILES_DIR)
/mapfile-vers-jsig
...
...
@@ -54,7 +57,7 @@ $(LIBJSIG): $(JSIGSRCDIR)/jsig.c $(LIBJSIG_MAPFILE)
$(QUIETLY)
$(CC)
$(SYMFLAG)
$(ARCHFLAG)
$(SHARED_FLAG)
$(PICFLAG)
\
$(LFLAGS_JSIG)
-o
$@
$<
-ldl
[
-f
$(LIBJSIG_G)
]
||
{
ln
-s
$@
$(LIBJSIG_G)
;
}
if
neq
($(OBJCOPY),
)
if
eq
($(ENABLE_FULL_DEBUG_SYMBOLS),1
)
$(QUIETLY)
$(OBJCOPY)
--only-keep-debug
$@
$(LIBJSIG_DEBUGINFO)
$(QUIETLY)
$(OBJCOPY)
--add-gnu-debuglink
=
$(LIBJSIG_DEBUGINFO)
$@
ifeq
($(STRIP_POLICY),all_strip)
...
...
@@ -66,12 +69,19 @@ ifneq ($(OBJCOPY),)
endif
endif
[
-f
$(LIBJSIG_G_DEBUGINFO)
]
||
{
ln
-s
$(LIBJSIG_DEBUGINFO)
$(LIBJSIG_G_DEBUGINFO);
}
ifeq
($(ZIP_DEBUGINFO_FILES),1)
$(ZIPEXE)
-q
-y
$(LIBJSIG_DIZ)
$(LIBJSIG_DEBUGINFO)
$(LIBJSIG_G_DEBUGINFO)
$(RM)
$(LIBJSIG_DEBUGINFO)
$(LIBJSIG_G_DEBUGINFO)
[
-f
$(LIBJSIG_G_DIZ)
]
||
{
ln
-s
$(LIBJSIG_DIZ)
$(LIBJSIG_G_DIZ);
}
endif
endif
install_jsig
:
$(LIBJSIG)
@
echo
"Copying
$(LIBJSIG)
to
$(DEST_JSIG)
"
$(QUIETLY)
test
-f
$(LIBJSIG_DEBUGINFO)
&&
\
cp
-f
$(LIBJSIG_DEBUGINFO)
$(DEST_JSIG_DEBUGINFO)
$(QUIETLY)
test
-f
$(LIBJSIG_DIZ)
&&
\
cp
-f
$(LIBJSIG_DIZ)
$(DEST_JSIG_DIZ)
$(QUIETLY)
cp
-f
$(LIBJSIG)
$(DEST_JSIG)
&&
echo
"Done"
.PHONY
:
install_jsig
make/solaris/makefiles/saproc.make
浏览文件 @
50d03f76
#
# Copyright (c) 2005, 201
1
, Oracle and/or its affiliates. All rights reserved.
# Copyright (c) 2005, 201
2
, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
...
...
@@ -33,7 +33,9 @@ SAPROC_G = $(SAPROC)$(G_SUFFIX)
LIBSAPROC_G
=
lib
$(SAPROC_G)
.so
LIBSAPROC_DEBUGINFO
=
lib
$(SAPROC)
.debuginfo
LIBSAPROC_DIZ
=
lib
$(SAPROC)
.diz
LIBSAPROC_G_DEBUGINFO
=
lib
$(SAPROC_G)
.debuginfo
LIBSAPROC_G_DIZ
=
lib
$(SAPROC_G)
.diz
AGENT_DIR
=
$(GAMMADIR)
/agent
...
...
@@ -45,6 +47,7 @@ SAMAPFILE = $(SASRCDIR)/mapfile
DEST_SAPROC
=
$(JDK_LIBDIR)
/
$(LIBSAPROC)
DEST_SAPROC_DEBUGINFO
=
$(JDK_LIBDIR)
/
$(LIBSAPROC_DEBUGINFO)
DEST_SAPROC_DIZ
=
$(JDK_LIBDIR)
/
$(LIBSAPROC_DIZ)
# if $(AGENT_DIR) does not exist, we don't build SA
...
...
@@ -105,7 +108,7 @@ $(LIBSAPROC): $(SASRCFILES) $(SAMAPFILE)
-o
$@
\
-ldl
-ldemangle
-lthread
-lc
[
-f
$(LIBSAPROC_G)
]
||
{
ln
-s
$@
$(LIBSAPROC_G)
;
}
if
neq
($(OBJCOPY),
)
if
eq
($(ENABLE_FULL_DEBUG_SYMBOLS),1
)
$(QUIETLY)
$(OBJCOPY)
--only-keep-debug
$@
$(LIBSAPROC_DEBUGINFO)
$(QUIETLY)
$(OBJCOPY)
--add-gnu-debuglink
=
$(LIBSAPROC_DEBUGINFO)
$@
ifeq
($(STRIP_POLICY),all_strip)
...
...
@@ -117,6 +120,11 @@ ifneq ($(OBJCOPY),)
endif
endif
[
-f
$(LIBSAPROC_G_DEBUGINFO)
]
||
{
ln
-s
$(LIBSAPROC_DEBUGINFO)
$(LIBSAPROC_G_DEBUGINFO);
}
ifeq
($(ZIP_DEBUGINFO_FILES),1)
$(ZIPEXE)
-q
-y
$(LIBSAPROC_DIZ)
$(LIBSAPROC_DEBUGINFO)
$(LIBSAPROC_G_DEBUGINFO)
$(RM)
$(LIBSAPROC_DEBUGINFO)
$(LIBSAPROC_G_DEBUGINFO)
[
-f
$(LIBSAPROC_G_DIZ)
]
||
{
ln
-s
$(LIBSAPROC_DIZ)
$(LIBSAPROC_G_DIZ);
}
endif
endif
install_saproc
:
$(BULDLIBSAPROC)
...
...
@@ -124,6 +132,8 @@ install_saproc: $(BULDLIBSAPROC)
echo
"Copying
$(LIBSAPROC)
to
$(DEST_SAPROC)
"
;
\
test
-f
$(LIBSAPROC_DEBUGINFO)
&&
\
cp
-f
$(LIBSAPROC_DEBUGINFO)
$(DEST_SAPROC_DEBUGINFO)
;
\
test
-f
$(LIBSAPROC_DIZ)
&&
\
cp
-f
$(LIBSAPROC_DIZ)
$(DEST_SAPROC_DIZ)
;
\
cp
-f
$(LIBSAPROC)
$(DEST_SAPROC)
&&
echo
"Done"
;
\
fi
...
...
make/solaris/makefiles/sparcWorks.make
浏览文件 @
50d03f76
#
# Copyright (c) 1998, 201
1
, Oracle and/or its affiliates. All rights reserved.
# Copyright (c) 1998, 201
2
, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
...
...
@@ -488,12 +488,12 @@ endif
# The -g0 setting allows the C++ frontend to inline, which is a big win.
# The -xs setting disables 'lazy debug info' which puts everything in
# the .so instead of requiring the '.o' files.
if
neq
($(OBJCOPY),
)
if
eq
($(ENABLE_FULL_DEBUG_SYMBOLS),1
)
OPT_CFLAGS
+=
-g0
-xs
endif
DEBUG_CFLAGS
=
-g
FASTDEBUG_CFLAGS
=
-g0
if
neq
($(OBJCOPY),
)
if
eq
($(ENABLE_FULL_DEBUG_SYMBOLS),1
)
DEBUG_CFLAGS
+=
-xs
FASTDEBUG_CFLAGS
+=
-xs
endif
...
...
make/solaris/makefiles/vm.make
浏览文件 @
50d03f76
...
...
@@ -56,7 +56,7 @@ Src_Dirs_I += $(GENERATED)
INCLUDES
+=
$
(
Src_Dirs_I:%
=
-I
%
)
# SYMFLAG is used by {dtrace,jsig,saproc}.make.
if
neq
($(OBJCOPY),
)
if
eq
($(ENABLE_FULL_DEBUG_SYMBOLS),1
)
# always build with debug info when we can create .debuginfo files
# and disable 'lazy debug info' so the .so has everything.
SYMFLAG
=
-g
-xs
...
...
@@ -152,7 +152,9 @@ LIBJVM = lib$(JVM).so
LIBJVM_G
=
lib
$(JVM)$(G_SUFFIX)
.so
LIBJVM_DEBUGINFO
=
lib
$(JVM)
.debuginfo
LIBJVM_DIZ
=
lib
$(JVM)
.diz
LIBJVM_G_DEBUGINFO
=
lib
$(JVM)$(G_SUFFIX)
.debuginfo
LIBJVM_G_DIZ
=
lib
$(JVM)$(G_SUFFIX)
.diz
SPECIAL_PATHS
:=
adlc c1 dist gc_implementation opto shark libadt
...
...
@@ -283,7 +285,7 @@ ifeq ($(filter -sbfast -xsbfast, $(CFLAGS_BROWSE)),)
$(QUIETLY)
rm
-f
$@
.1
&&
ln
-s
$@
$@
.1
$(QUIETLY)
[
-f
$(LIBJVM_G)
]
||
ln
-s
$@
$(LIBJVM_G)
$(QUIETLY)
[
-f
$(LIBJVM_G)
.1
]
||
ln
-s
$@
.1
$(LIBJVM_G)
.1
if
neq
($(OBJCOPY),
)
if
eq
($(ENABLE_FULL_DEBUG_SYMBOLS),1
)
$(QUIETLY)
$(OBJCOPY)
--only-keep-debug
$@
$(LIBJVM_DEBUGINFO)
$(QUIETLY)
$(OBJCOPY)
--add-gnu-debuglink
=
$(LIBJVM_DEBUGINFO)
$@
ifeq
($(STRIP_POLICY),all_strip)
...
...
@@ -295,6 +297,11 @@ ifneq ($(OBJCOPY),)
endif
endif
$(QUIETLY)
[
-f
$(LIBJVM_G_DEBUGINFO)
]
||
ln
-s
$(LIBJVM_DEBUGINFO)
$(LIBJVM_G_DEBUGINFO)
ifeq
($(ZIP_DEBUGINFO_FILES),1)
$(ZIPEXE)
-q
-y
$(LIBJVM_DIZ)
$(LIBJVM_DEBUGINFO)
$(LIBJVM_G_DEBUGINFO)
$(RM)
$(LIBJVM_DEBUGINFO)
$(LIBJVM_G_DEBUGINFO)
[
-f
$(LIBJVM_G_DIZ)
]
||
{
ln
-s
$(LIBJVM_DIZ)
$(LIBJVM_G_DIZ);
}
endif
endif
endif
# filter -sbfast -xsbfast
...
...
@@ -302,11 +309,14 @@ endif # filter -sbfast -xsbfast
DEST_SUBDIR
=
$(JDK_LIBDIR)
/
$(VM_SUBDIR)
DEST_JVM
=
$(DEST_SUBDIR)
/
$(LIBJVM)
DEST_JVM_DEBUGINFO
=
$(DEST_SUBDIR)
/
$(LIBJVM_DEBUGINFO)
DEST_JVM_DIZ
=
$(DEST_SUBDIR)
/
$(LIBJVM_DIZ)
install_jvm
:
$(LIBJVM)
@
echo
"Copying
$(LIBJVM)
to
$(DEST_JVM)
"
$(QUIETLY)
test
-f
$(LIBJVM_DEBUGINFO)
&&
\
cp
-f
$(LIBJVM_DEBUGINFO)
$(DEST_JVM_DEBUGINFO)
$(QUIETLY)
test
-f
$(LIBJVM_DIZ)
&&
\
cp
-f
$(LIBJVM_DIZ)
$(DEST_JVM_DIZ)
$(QUIETLY)
cp
-f
$(LIBJVM)
$(DEST_JVM)
&&
echo
"Done"
#----------------------------------------------------------------------
...
...
make/windows/build.make
浏览文件 @
50d03f76
#
# Copyright (c) 1998, 201
1
, Oracle and/or its affiliates. All rights reserved.
# Copyright (c) 1998, 201
2
, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
...
...
@@ -302,6 +302,10 @@ $(variantDir)\local.make: checks
@
echo
MT
=
$(MT)
>>
$@
@
echo
RC
=
$(RC)
>>
$@
@
sh
$(WorkSpace)
/make/windows/get_msc_ver.sh
>>
$@
@
if
"
$(ENABLE_FULL_DEBUG_SYMBOLS)
"
NEQ
""
echo
ENABLE_FULL_DEBUG_SYMBOLS
=
$(ENABLE_FULL_DEBUG_SYMBOLS)
>>
$@
@
if
"
$(ZIP_DEBUGINFO_FILES)
"
NEQ
""
echo
ZIP_DEBUGINFO_FILES
=
$(ZIP_DEBUGINFO_FILES)
>>
$@
@
if
"
$(RM)
"
NEQ
""
echo
RM
=
$(RM)
>>
$@
@
if
"
$(ZIPEXE)
"
NEQ
""
echo
ZIPEXE
=
$(ZIPEXE)
>>
$@
checks
:
checkVariant checkWorkSpace checkSA
...
...
make/windows/makefiles/compile.make
浏览文件 @
50d03f76
#
# Copyright (c) 1997, 201
1
, Oracle and/or its affiliates. All rights reserved.
# Copyright (c) 1997, 201
2
, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
...
...
@@ -54,8 +54,10 @@ CXX=cl.exe
# These are always used in all compiles
CXX_FLAGS
=
/nologo /W3 /WX
# Let's add debug information always too.
# Let's add debug information when Full Debug Symbols is enabled
!if
"$(ENABLE_FULL_DEBUG_SYMBOLS)"
==
"1"
CXX_FLAGS
=
$(CXX_FLAGS)
/Zi
!
endif
# Based on BUILDARCH we add some flags and select the default compiler name
!if
"$(BUILDARCH)"
==
"ia64"
...
...
@@ -239,7 +241,10 @@ LD=link.exe
LD_FLAGS
=
$(LD_FLAGS)
kernel32.lib user32.lib gdi32.lib winspool.lib
\
comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib
\
uuid.lib Wsock32.lib winmm.lib /nologo /machine:
$(MACHINE)
/opt:REF
\
/opt:ICF,8 /map /debug
/opt:ICF,8
!if
"$(ENABLE_FULL_DEBUG_SYMBOLS)"
==
"1"
LD_FLAGS
=
$(LD_FLAGS)
/map /debug
!
endif
!if
$(MSC_VER)
>=
1600
...
...
make/windows/makefiles/debug.make
浏览文件 @
50d03f76
...
...
@@ -61,6 +61,12 @@ $(AOUT): $(Res_Files) $(Obj_Files) vm.def
# separately. Use ";#2" for .dll and ";#1" for .exe:
$(MT) /manifest $@.manifest /outputresource
:
$@;
#
2
!
endif
!if
"$(ENABLE_FULL_DEBUG_SYMBOLS)"
==
"1"
!if
"$(ZIP_DEBUGINFO_FILES)"
==
"1"
$(ZIPEXE)
-q
$*.diz
$*.map
$*.pdb
$(RM)
$*.map
$*.pdb
!
endif
!
endif
!
include
$(WorkSpace)/make/windows/makefiles/shared.make
!
include
$(WorkSpace)/make/windows/makefiles/sa.make
...
...
make/windows/makefiles/defs.make
浏览文件 @
50d03f76
...
...
@@ -107,6 +107,52 @@ ifneq ($(shell $(ECHO) $(PROCESSOR_IDENTIFIER) | $(GREP) EM64T),)
endif
endif
# Full Debug Symbols has been enabled on Windows since JDK1.4.1 so
# there is no need for an "earlier than JDK7 check".
# The Full Debug Symbols (FDS) default for BUILD_FLAVOR == product
# builds is enabled with debug info files ZIP'ed to save space. For
# BUILD_FLAVOR != product builds, FDS is always enabled, after all a
# debug build without debug info isn't very useful.
# The ZIP_DEBUGINFO_FILES option only has meaning when FDS is enabled.
#
# If you invoke a build with FULL_DEBUG_SYMBOLS=0, then FDS will be
# disabled for a BUILD_FLAVOR == product build.
#
# Note: Use of a different variable name for the FDS override option
# versus the FDS enabled check is intentional (FULL_DEBUG_SYMBOLS
# versus ENABLE_FULL_DEBUG_SYMBOLS). For auto build systems that pass
# in options via environment variables, use of distinct variables
# prevents strange behaviours. For example, in a BUILD_FLAVOR !=
# product build, the FULL_DEBUG_SYMBOLS environment variable will be
# 0, but the ENABLE_FULL_DEBUG_SYMBOLS make variable will be 1. If
# the same variable name is used, then different values can be picked
# up by different parts of the build. Just to be clear, we only need
# two variable names because the incoming option value can be
# overridden in some situations, e.g., a BUILD_FLAVOR != product
# build.
ifeq
($(BUILD_FLAVOR), product)
FULL_DEBUG_SYMBOLS
?=
1
ENABLE_FULL_DEBUG_SYMBOLS
=
$(FULL_DEBUG_SYMBOLS)
else
# debug variants always get Full Debug Symbols (if available)
ENABLE_FULL_DEBUG_SYMBOLS
=
1
endif
_JUNK_
:=
$(
shell
\
echo
>
&2
"INFO: ENABLE_FULL_DEBUG_SYMBOLS=
$(ENABLE_FULL_DEBUG_SYMBOLS)
"
)
MAKE_ARGS
+=
ENABLE_FULL_DEBUG_SYMBOLS
=
$(ENABLE_FULL_DEBUG_SYMBOLS)
ifeq
($(ENABLE_FULL_DEBUG_SYMBOLS),1)
# Disable ZIP_DEBUGINFO_FILES by default because various tests are
# failing in nightly when the debug info files are ZIP'ed.
ZIP_DEBUGINFO_FILES
?=
0
else
ZIP_DEBUGINFO_FILES
=
0
endif
MAKE_ARGS
+=
ZIP_DEBUGINFO_FILES
=
$(ZIP_DEBUGINFO_FILES)
MAKE_ARGS
+=
RM
=
"
$(RM)
"
MAKE_ARGS
+=
ZIPEXE
=
$(ZIPEXE)
# On 32 bit windows we build server, client and kernel, on 64 bit just server.
ifeq
($(JVM_VARIANTS),)
ifeq
($(ARCH_DATA_MODEL), 32)
...
...
@@ -193,29 +239,53 @@ EXPORT_KERNEL_DIR = $(EXPORT_JRE_BIN_DIR)/kernel
ifeq
($(JVM_VARIANT_SERVER),true)
EXPORT_LIST
+=
$(EXPORT_SERVER_DIR)
/Xusage.txt
EXPORT_LIST
+=
$(EXPORT_SERVER_DIR)
/jvm.
$(LIBRARY_SUFFIX)
EXPORT_LIST
+=
$(EXPORT_SERVER_DIR)
/jvm.pdb
EXPORT_LIST
+=
$(EXPORT_SERVER_DIR)
/jvm.map
ifeq
($(ENABLE_FULL_DEBUG_SYMBOLS),1)
ifeq
($(ZIP_DEBUGINFO_FILES),1)
EXPORT_LIST
+=
$(EXPORT_SERVER_DIR)
/jvm.diz
else
EXPORT_LIST
+=
$(EXPORT_SERVER_DIR)
/jvm.pdb
EXPORT_LIST
+=
$(EXPORT_SERVER_DIR)
/jvm.map
endif
endif
EXPORT_LIST
+=
$(EXPORT_LIB_DIR)
/jvm.lib
endif
ifeq
($(JVM_VARIANT_CLIENT),true)
EXPORT_LIST
+=
$(EXPORT_CLIENT_DIR)
/Xusage.txt
EXPORT_LIST
+=
$(EXPORT_CLIENT_DIR)
/jvm.
$(LIBRARY_SUFFIX)
EXPORT_LIST
+=
$(EXPORT_CLIENT_DIR)
/jvm.pdb
EXPORT_LIST
+=
$(EXPORT_CLIENT_DIR)
/jvm.map
ifeq
($(ENABLE_FULL_DEBUG_SYMBOLS),1)
ifeq
($(ZIP_DEBUGINFO_FILES),1)
EXPORT_LIST
+=
$(EXPORT_CLIENT_DIR)
/jvm.diz
else
EXPORT_LIST
+=
$(EXPORT_CLIENT_DIR)
/jvm.pdb
EXPORT_LIST
+=
$(EXPORT_CLIENT_DIR)
/jvm.map
endif
endif
endif
ifeq
($(JVM_VARIANT_KERNEL),true)
EXPORT_LIST
+=
$(EXPORT_KERNEL_DIR)
/Xusage.txt
EXPORT_LIST
+=
$(EXPORT_KERNEL_DIR)
/jvm.
$(LIBRARY_SUFFIX)
EXPORT_LIST
+=
$(EXPORT_KERNEL_DIR)
/jvm.pdb
EXPORT_LIST
+=
$(EXPORT_KERNEL_DIR)
/jvm.map
ifeq
($(ENABLE_FULL_DEBUG_SYMBOLS),1)
ifeq
($(ZIP_DEBUGINFO_FILES),1)
EXPORT_LIST
+=
$(EXPORT_KERNEL_DIR)
/jvm.diz
else
EXPORT_LIST
+=
$(EXPORT_KERNEL_DIR)
/jvm.pdb
EXPORT_LIST
+=
$(EXPORT_KERNEL_DIR)
/jvm.map
endif
endif
endif
EXPORT_LIST
+=
$(EXPORT_JRE_LIB_DIR)
/wb.jar
ifeq
($(BUILD_WIN_SA), 1)
EXPORT_LIST
+=
$(EXPORT_JRE_BIN_DIR)
/sawindbg.
$(LIBRARY_SUFFIX)
EXPORT_LIST
+=
$(EXPORT_JRE_BIN_DIR)
/sawindbg.pdb
EXPORT_LIST
+=
$(EXPORT_JRE_BIN_DIR)
/sawindbg.map
ifeq
($(ENABLE_FULL_DEBUG_SYMBOLS),1)
ifeq
($(ZIP_DEBUGINFO_FILES),1)
EXPORT_LIST
+=
$(EXPORT_JRE_BIN_DIR)
/sawindbg.diz
else
EXPORT_LIST
+=
$(EXPORT_JRE_BIN_DIR)
/sawindbg.pdb
EXPORT_LIST
+=
$(EXPORT_JRE_BIN_DIR)
/sawindbg.map
endif
endif
EXPORT_LIST
+=
$(EXPORT_LIB_DIR)
/sa-jdi.jar
# Must pass this down to nmake.
MAKE_ARGS
+=
BUILD_WIN_SA
=
1
...
...
make/windows/makefiles/fastdebug.make
浏览文件 @
50d03f76
...
...
@@ -61,6 +61,12 @@ $(AOUT): $(Res_Files) $(Obj_Files) vm.def
# separately. Use ";#2" for .dll and ";#1" for .exe:
$(MT) /manifest $@.manifest /outputresource
:
$@;
#
2
!
endif
!if
"$(ENABLE_FULL_DEBUG_SYMBOLS)"
==
"1"
!if
"$(ZIP_DEBUGINFO_FILES)"
==
"1"
$(ZIPEXE)
-q
$*.diz
$*.map
$*.pdb
$(RM)
$*.map
$*.pdb
!
endif
!
endif
!
include
$(WorkSpace)/make/windows/makefiles/shared.make
!
include
$(WorkSpace)/make/windows/makefiles/sa.make
...
...
make/windows/makefiles/product.make
浏览文件 @
50d03f76
...
...
@@ -72,6 +72,12 @@ $(AOUT): $(Res_Files) $(Obj_Files) vm.def
# separately. Use ";#2" for .dll and ";#1" for .exe:
$(MT) /manifest $@.manifest /outputresource
:
$@;
#
2
!
endif
!if
"$(ENABLE_FULL_DEBUG_SYMBOLS)"
==
"1"
!if
"$(ZIP_DEBUGINFO_FILES)"
==
"1"
$(ZIPEXE)
-q
$*.diz
$*.map
$*.pdb
$(RM)
$*.map
$*.pdb
!
endif
!
endif
!
include
$(WorkSpace)/make/windows/makefiles/shared.make
!
include
$(WorkSpace)/make/windows/makefiles/sa.make
...
...
make/windows/makefiles/sa.make
浏览文件 @
50d03f76
#
# Copyright (c) 2003, 201
1
, Oracle and/or its affiliates. All rights reserved.
# Copyright (c) 2003, 201
2
, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
...
...
@@ -94,13 +94,19 @@ SA_CFLAGS = /nologo $(MS_RUNTIME_OPTION) /W3 $(GX_OPTION) /Od /D "WIN32" /D "WIN
SA_LD_FLAGS
=
bufferoverflowU.lib
!
endif
!
else
SA_CFLAGS
=
/nologo
$(MS_RUNTIME_OPTION)
/W3 /Gm
$(GX_OPTION)
/ZI /Od /D
"WIN32"
/D
"_WINDOWS"
/D
"_DEBUG"
/D
"_CONSOLE"
/D
"_MBCS"
/YX /FD /GZ /c
SA_CFLAGS
=
/nologo
$(MS_RUNTIME_OPTION)
/W3 /Gm
$(GX_OPTION)
/Od /D
"WIN32"
/D
"_WINDOWS"
/D
"_DEBUG"
/D
"_CONSOLE"
/D
"_MBCS"
/YX /FD /GZ /c
!if
"$(ENABLE_FULL_DEBUG_SYMBOLS)"
==
"1"
SA_CFLAGS
=
$(SA_CFLAGS)
/ZI
!
endif
!
endif
!if
"$(MT)"
!=
""
SA_LD_FLAGS
=
/manifest
$(SA_LD_FLAGS)
!
endif
SASRCFILE
=
$(AGENT_DIR)
/src/os/win32/windbg/sawindbg.cpp
SA_LFLAGS
=
$(SA_LD_FLAGS)
/nologo /subsystem:console /map /debug /machine:
$(MACHINE)
SA_LFLAGS
=
$(SA_LD_FLAGS)
/nologo /subsystem:console /machine:
$(MACHINE)
!if
"$(ENABLE_FULL_DEBUG_SYMBOLS)"
==
"1"
SA_LFLAGS
=
$(SA_LFLAGS)
/map /debug
!
endif
# Note that we do not keep sawindbj.obj around as it would then
# get included in the dumpbin command in build_vm_def.sh
...
...
@@ -114,14 +120,20 @@ $(SAWINDBG): $(SASRCFILE)
/I
"
$(BootStrapDir)
/include"
/I
"
$(BootStrapDir)
/include/win32"
/I
"
$(GENERATED)
"
$(SA_CFLAGS)
$(SASRCFILE)
/out:
sawindbg
.obj
/out:
$*
.obj
<<
set
LIB
=
$(SA_LIB)$(LIB)
$(LD) /out
:
$@ /DLL
sawindbg
.obj dbgeng.lib $(SA_LFLAGS)
$(LD) /out
:
$@ /DLL
$*
.obj dbgeng.lib $(SA_LFLAGS)
!if
"$(MT)"
!=
""
$(MT) /manifest $(@F).manifest /outputresource
:
$(@F);
#
2
!
endif
-@rm
-f
sawindbg.obj
!if
"$(ENABLE_FULL_DEBUG_SYMBOLS)"
==
"1"
!if
"$(ZIP_DEBUGINFO_FILES)"
==
"1"
$(ZIPEXE)
-q
$*.diz
$*.map
$*.pdb
$(RM)
$*.map
$*.pdb
!
endif
!
endif
-@rm
-f
$*.obj
cleanall
:
rm
-rf
$
(
GENERATED:
\=
/
)
/saclasses
...
...
src/os/solaris/vm/attachListener_solaris.cpp
浏览文件 @
50d03f76
...
...
@@ -336,7 +336,9 @@ extern "C" {
// Return 0 (success) + file descriptor, or non-0 (error)
if
(
res
==
0
)
{
door_desc_t
desc
;
desc
.
d_attributes
=
DOOR_DESCRIPTOR
;
// DOOR_RELEASE flag makes sure fd is closed after passing it to
// the client. See door_return(3DOOR) man page.
desc
.
d_attributes
=
DOOR_DESCRIPTOR
|
DOOR_RELEASE
;
desc
.
d_data
.
d_desc
.
d_descriptor
=
return_fd
;
door_return
((
char
*
)
&
res
,
sizeof
(
res
),
&
desc
,
1
);
}
else
{
...
...
src/share/vm/gc_implementation/concurrentMarkSweep/cmsPermGen.cpp
浏览文件 @
50d03f76
...
...
@@ -38,7 +38,7 @@
CMSPermGen
::
CMSPermGen
(
ReservedSpace
rs
,
size_t
initial_byte_size
,
CardTableRS
*
ct
,
FreeBlockDictionary
::
DictionaryChoice
dictionaryChoice
)
{
FreeBlockDictionary
<
FreeChunk
>
::
DictionaryChoice
dictionaryChoice
)
{
CMSPermGenGen
*
g
=
new
CMSPermGenGen
(
rs
,
initial_byte_size
,
-
1
,
ct
);
if
(
g
==
NULL
)
{
...
...
src/share/vm/gc_implementation/concurrentMarkSweep/cmsPermGen.hpp
浏览文件 @
50d03f76
...
...
@@ -45,7 +45,7 @@ class CMSPermGen: public PermGen {
public:
CMSPermGen
(
ReservedSpace
rs
,
size_t
initial_byte_size
,
CardTableRS
*
ct
,
FreeBlockDictionary
::
DictionaryChoice
);
CardTableRS
*
ct
,
FreeBlockDictionary
<
FreeChunk
>
::
DictionaryChoice
);
HeapWord
*
mem_allocate
(
size_t
size
);
...
...
@@ -65,7 +65,7 @@ public:
// regarding not using adaptive free lists for a perm gen.
ConcurrentMarkSweepGeneration
(
rs
,
initial_byte_size
,
// MinPermHeapExapnsion
level
,
ct
,
false
/* use adaptive freelists */
,
(
FreeBlockDictionary
::
DictionaryChoice
)
CMSDictionaryChoice
)
(
FreeBlockDictionary
<
FreeChunk
>
::
DictionaryChoice
)
CMSDictionaryChoice
)
{}
void
initialize_performance_counters
();
...
...
src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.cpp
浏览文件 @
50d03f76
此差异已折叠。
点击以展开。
src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.hpp
浏览文件 @
50d03f76
...
...
@@ -25,10 +25,10 @@
#ifndef SHARE_VM_GC_IMPLEMENTATION_CONCURRENTMARKSWEEP_COMPACTIBLEFREELISTSPACE_HPP
#define SHARE_VM_GC_IMPLEMENTATION_CONCURRENTMARKSWEEP_COMPACTIBLEFREELISTSPACE_HPP
#include "gc_implementation/concurrentMarkSweep/binaryTreeDictionary.hpp"
#include "gc_implementation/concurrentMarkSweep/freeList.hpp"
#include "gc_implementation/concurrentMarkSweep/promotionInfo.hpp"
#include "memory/binaryTreeDictionary.hpp"
#include "memory/blockOffsetTable.inline.hpp"
#include "memory/freeList.hpp"
#include "memory/space.hpp"
// Classes in support of keeping track of promotions into a non-Contiguous
...
...
@@ -129,10 +129,10 @@ class CompactibleFreeListSpace: public CompactibleSpace {
// Linear allocation blocks
LinearAllocBlock
_smallLinearAllocBlock
;
FreeBlockDictionary
::
DictionaryChoice
_dictionaryChoice
;
FreeBlockDictionary
*
_dictionary
;
// ptr to dictionary for large size blocks
FreeBlockDictionary
<
FreeChunk
>
::
DictionaryChoice
_dictionaryChoice
;
FreeBlockDictionary
<
FreeChunk
>
*
_dictionary
;
// ptr to dictionary for large size blocks
FreeList
_indexedFreeList
[
IndexSetSize
];
FreeList
<
FreeChunk
>
_indexedFreeList
[
IndexSetSize
];
// indexed array for small size blocks
// allocation stategy
bool
_fitStrategy
;
// Use best fit strategy.
...
...
@@ -169,7 +169,7 @@ class CompactibleFreeListSpace: public CompactibleSpace {
// If the count of "fl" is negative, it's absolute value indicates a
// number of free chunks that had been previously "borrowed" from global
// list of size "word_sz", and must now be decremented.
void
par_get_chunk_of_blocks
(
size_t
word_sz
,
size_t
n
,
FreeList
*
fl
);
void
par_get_chunk_of_blocks
(
size_t
word_sz
,
size_t
n
,
FreeList
<
FreeChunk
>
*
fl
);
// Allocation helper functions
// Allocate using a strategy that takes from the indexed free lists
...
...
@@ -215,7 +215,7 @@ class CompactibleFreeListSpace: public CompactibleSpace {
// and return it. The split off remainder is returned to
// the free lists. The old name for getFromListGreater
// was lookInListGreater.
FreeChunk
*
getFromListGreater
(
FreeList
*
fl
,
size_t
numWords
);
FreeChunk
*
getFromListGreater
(
FreeList
<
FreeChunk
>
*
fl
,
size_t
numWords
);
// Get a chunk in the indexed free list or dictionary,
// by considering a larger chunk and splitting it.
FreeChunk
*
getChunkFromGreater
(
size_t
numWords
);
...
...
@@ -286,10 +286,10 @@ class CompactibleFreeListSpace: public CompactibleSpace {
// Constructor...
CompactibleFreeListSpace
(
BlockOffsetSharedArray
*
bs
,
MemRegion
mr
,
bool
use_adaptive_freelists
,
FreeBlockDictionary
::
DictionaryChoice
);
FreeBlockDictionary
<
FreeChunk
>
::
DictionaryChoice
);
// accessors
bool
bestFitFirst
()
{
return
_fitStrategy
==
FreeBlockBestFitFirst
;
}
FreeBlockDictionary
*
dictionary
()
const
{
return
_dictionary
;
}
FreeBlockDictionary
<
FreeChunk
>
*
dictionary
()
const
{
return
_dictionary
;
}
HeapWord
*
nearLargestChunk
()
const
{
return
_nearLargestChunk
;
}
void
set_nearLargestChunk
(
HeapWord
*
v
)
{
_nearLargestChunk
=
v
;
}
...
...
@@ -499,7 +499,7 @@ class CompactibleFreeListSpace: public CompactibleSpace {
// Verify that the given chunk is in the free lists:
// i.e. either the binary tree dictionary, the indexed free lists
// or the linear allocation block.
bool
verify
ChunkInFreeLists
(
FreeChunk
*
fc
)
const
;
bool
verify
_chunk_in_free_list
(
FreeChunk
*
fc
)
const
;
// Verify that the given chunk is the linear allocation block
bool
verify_chunk_is_linear_alloc_block
(
FreeChunk
*
fc
)
const
;
// Do some basic checks on the the free lists.
...
...
@@ -608,7 +608,7 @@ class CompactibleFreeListSpace: public CompactibleSpace {
void
coalDeath
(
size_t
size
);
void
smallSplitBirth
(
size_t
size
);
void
smallSplitDeath
(
size_t
size
);
void
split
B
irth
(
size_t
size
);
void
split
_b
irth
(
size_t
size
);
void
splitDeath
(
size_t
size
);
void
split
(
size_t
from
,
size_t
to1
);
...
...
@@ -622,7 +622,7 @@ class CFLS_LAB : public CHeapObj {
CompactibleFreeListSpace
*
_cfls
;
// Our local free lists.
FreeList
_indexedFreeList
[
CompactibleFreeListSpace
::
IndexSetSize
];
FreeList
<
FreeChunk
>
_indexedFreeList
[
CompactibleFreeListSpace
::
IndexSetSize
];
// Initialized from a command-line arg.
...
...
@@ -635,7 +635,7 @@ class CFLS_LAB : public CHeapObj {
size_t
_num_blocks
[
CompactibleFreeListSpace
::
IndexSetSize
];
// Internal work method
void
get_from_global_pool
(
size_t
word_sz
,
FreeList
*
fl
);
void
get_from_global_pool
(
size_t
word_sz
,
FreeList
<
FreeChunk
>
*
fl
);
public:
CFLS_LAB
(
CompactibleFreeListSpace
*
cfls
);
...
...
src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp
浏览文件 @
50d03f76
...
...
@@ -188,7 +188,7 @@ class CMSParGCThreadState: public CHeapObj {
ConcurrentMarkSweepGeneration
::
ConcurrentMarkSweepGeneration
(
ReservedSpace
rs
,
size_t
initial_byte_size
,
int
level
,
CardTableRS
*
ct
,
bool
use_adaptive_freelists
,
FreeBlockDictionary
::
DictionaryChoice
dictionaryChoice
)
:
FreeBlockDictionary
<
FreeChunk
>
::
DictionaryChoice
dictionaryChoice
)
:
CardGeneration
(
rs
,
initial_byte_size
,
level
,
ct
),
_dilatation_factor
(((
double
)
MinChunkSize
)
/
((
double
)(
CollectedHeap
::
min_fill_size
()))),
_debug_collection_type
(
Concurrent_collection_type
)
...
...
@@ -1026,7 +1026,7 @@ HeapWord* ConcurrentMarkSweepGeneration::have_lock_and_allocate(size_t size,
// its mark-bit or P-bits not yet set. Such objects need
// to be safely navigable by block_start().
assert
(
oop
(
res
)
->
klass_or_null
()
==
NULL
,
"Object should be uninitialized here."
);
assert
(
!
((
FreeChunk
*
)
res
)
->
is
F
ree
(),
"Error, block will look free but show wrong size"
);
assert
(
!
((
FreeChunk
*
)
res
)
->
is
_f
ree
(),
"Error, block will look free but show wrong size"
);
collector
()
->
direct_allocated
(
res
,
adjustedSize
);
_direct_allocated_words
+=
adjustedSize
;
// allocation counters
...
...
@@ -1391,7 +1391,7 @@ ConcurrentMarkSweepGeneration::par_promote(int thread_num,
oop
obj
=
oop
(
obj_ptr
);
OrderAccess
::
storestore
();
assert
(
obj
->
klass_or_null
()
==
NULL
,
"Object should be uninitialized here."
);
assert
(
!
((
FreeChunk
*
)
obj_ptr
)
->
is
F
ree
(),
"Error, block will look free but show wrong size"
);
assert
(
!
((
FreeChunk
*
)
obj_ptr
)
->
is
_f
ree
(),
"Error, block will look free but show wrong size"
);
// IMPORTANT: See note on object initialization for CMS above.
// Otherwise, copy the object. Here we must be careful to insert the
// klass pointer last, since this marks the block as an allocated object.
...
...
@@ -1400,7 +1400,7 @@ ConcurrentMarkSweepGeneration::par_promote(int thread_num,
// Restore the mark word copied above.
obj
->
set_mark
(
m
);
assert
(
obj
->
klass_or_null
()
==
NULL
,
"Object should be uninitialized here."
);
assert
(
!
((
FreeChunk
*
)
obj_ptr
)
->
is
F
ree
(),
"Error, block will look free but show wrong size"
);
assert
(
!
((
FreeChunk
*
)
obj_ptr
)
->
is
_f
ree
(),
"Error, block will look free but show wrong size"
);
OrderAccess
::
storestore
();
if
(
UseCompressedOops
)
{
...
...
@@ -1421,7 +1421,7 @@ ConcurrentMarkSweepGeneration::par_promote(int thread_num,
promoInfo
->
track
((
PromotedObject
*
)
obj
,
old
->
klass
());
}
assert
(
obj
->
klass_or_null
()
==
NULL
,
"Object should be uninitialized here."
);
assert
(
!
((
FreeChunk
*
)
obj_ptr
)
->
is
F
ree
(),
"Error, block will look free but show wrong size"
);
assert
(
!
((
FreeChunk
*
)
obj_ptr
)
->
is
_f
ree
(),
"Error, block will look free but show wrong size"
);
assert
(
old
->
is_oop
(),
"Will use and dereference old klass ptr below"
);
// Finally, install the klass pointer (this should be volatile).
...
...
@@ -2034,7 +2034,7 @@ void CMSCollector::do_compaction_work(bool clear_all_soft_refs) {
pointer_delta
(
cms_space
->
end
(),
cms_space
->
compaction_top
())
*
HeapWordSize
,
"All the free space should be compacted into one chunk at top"
);
assert
(
cms_space
->
dictionary
()
->
total
ChunkS
ize
(
assert
(
cms_space
->
dictionary
()
->
total
_chunk_s
ize
(
debug_only
(
cms_space
->
freelistLock
()))
==
0
||
cms_space
->
totalSizeInIndexedFreeLists
()
==
0
,
"All the free space should be in a single chunk"
);
...
...
@@ -6131,7 +6131,7 @@ void ConcurrentMarkSweepGeneration::setNearLargestChunk() {
double
nearLargestPercent
=
FLSLargestBlockCoalesceProximity
;
HeapWord
*
minAddr
=
_cmsSpace
->
bottom
();
HeapWord
*
largestAddr
=
(
HeapWord
*
)
_cmsSpace
->
dictionary
()
->
find
LargestD
ict
();
(
HeapWord
*
)
_cmsSpace
->
dictionary
()
->
find
_largest_d
ict
();
if
(
largestAddr
==
NULL
)
{
// The dictionary appears to be empty. In this case
// try to coalesce at the end of the heap.
...
...
@@ -7906,7 +7906,7 @@ SweepClosure::SweepClosure(CMSCollector* collector,
_last_fc
=
NULL
;
_sp
->
initializeIndexedFreeListArrayReturnedBytes
();
_sp
->
dictionary
()
->
initialize
DictReturnedB
ytes
();
_sp
->
dictionary
()
->
initialize
_dict_returned_b
ytes
();
)
assert
(
_limit
>=
_sp
->
bottom
()
&&
_limit
<=
_sp
->
end
(),
"sweep _limit out of bounds"
);
...
...
@@ -7954,13 +7954,13 @@ SweepClosure::~SweepClosure() {
if
(
PrintCMSStatistics
&&
CMSVerifyReturnedBytes
)
{
size_t
indexListReturnedBytes
=
_sp
->
sumIndexedFreeListArrayReturnedBytes
();
size_t
dict
ReturnedBytes
=
_sp
->
dictionary
()
->
sumDictReturnedB
ytes
();
size_t
returned
Bytes
=
indexListReturnedBytes
+
dictReturnedB
ytes
;
gclog_or_tty
->
print
(
"Returned "
SIZE_FORMAT
" bytes"
,
returned
B
ytes
);
size_t
dict
_returned_bytes
=
_sp
->
dictionary
()
->
sum_dict_returned_b
ytes
();
size_t
returned
_bytes
=
indexListReturnedBytes
+
dict_returned_b
ytes
;
gclog_or_tty
->
print
(
"Returned "
SIZE_FORMAT
" bytes"
,
returned
_b
ytes
);
gclog_or_tty
->
print
(
" Indexed List Returned "
SIZE_FORMAT
" bytes"
,
indexListReturnedBytes
);
gclog_or_tty
->
print_cr
(
" Dictionary Returned "
SIZE_FORMAT
" bytes"
,
dict
ReturnedB
ytes
);
dict
_returned_b
ytes
);
}
}
if
(
CMSTraceSweeper
)
{
...
...
@@ -7985,9 +7985,9 @@ void SweepClosure::initialize_free_range(HeapWord* freeFinger,
if
(
CMSTestInFreeList
)
{
if
(
freeRangeInFreeLists
)
{
FreeChunk
*
fc
=
(
FreeChunk
*
)
freeFinger
;
assert
(
fc
->
is
F
ree
(),
"A chunk on the free list should be free."
);
assert
(
fc
->
is
_f
ree
(),
"A chunk on the free list should be free."
);
assert
(
fc
->
size
()
>
0
,
"Free range should have a size"
);
assert
(
_sp
->
verify
ChunkInFreeLists
(
fc
),
"Chunk is not in free lists"
);
assert
(
_sp
->
verify
_chunk_in_free_list
(
fc
),
"Chunk is not in free lists"
);
}
}
}
...
...
@@ -8057,7 +8057,7 @@ size_t SweepClosure::do_blk_careful(HeapWord* addr) {
assert
(
addr
<
_limit
,
"sweep invariant"
);
// check if we should yield
do_yield_check
(
addr
);
if
(
fc
->
is
F
ree
())
{
if
(
fc
->
is
_f
ree
())
{
// Chunk that is already free
res
=
fc
->
size
();
do_already_free_chunk
(
fc
);
...
...
@@ -8145,7 +8145,7 @@ void SweepClosure::do_already_free_chunk(FreeChunk* fc) {
// Chunks that cannot be coalesced are not in the
// free lists.
if
(
CMSTestInFreeList
&&
!
fc
->
cantCoalesce
())
{
assert
(
_sp
->
verify
ChunkInFreeLists
(
fc
),
assert
(
_sp
->
verify
_chunk_in_free_list
(
fc
),
"free chunk should be in free lists"
);
}
// a chunk that is already free, should not have been
...
...
@@ -8171,7 +8171,7 @@ void SweepClosure::do_already_free_chunk(FreeChunk* fc) {
FreeChunk
*
nextChunk
=
(
FreeChunk
*
)(
addr
+
size
);
assert
((
HeapWord
*
)
nextChunk
<=
_sp
->
end
(),
"Chunk size out of bounds?"
);
if
((
HeapWord
*
)
nextChunk
<
_sp
->
end
()
&&
// There is another free chunk to the right ...
nextChunk
->
is
F
ree
()
&&
// ... which is free...
nextChunk
->
is
_f
ree
()
&&
// ... which is free...
nextChunk
->
cantCoalesce
())
{
// ... but can't be coalesced
// nothing to do
}
else
{
...
...
@@ -8203,7 +8203,7 @@ void SweepClosure::do_already_free_chunk(FreeChunk* fc) {
assert
(
ffc
->
size
()
==
pointer_delta
(
addr
,
freeFinger
()),
"Size of free range is inconsistent with chunk size."
);
if
(
CMSTestInFreeList
)
{
assert
(
_sp
->
verify
ChunkInFreeLists
(
ffc
),
assert
(
_sp
->
verify
_chunk_in_free_list
(
ffc
),
"free range is not in free lists"
);
}
_sp
->
removeFreeChunkFromFreeLists
(
ffc
);
...
...
@@ -8262,7 +8262,7 @@ size_t SweepClosure::do_garbage_chunk(FreeChunk* fc) {
assert
(
ffc
->
size
()
==
pointer_delta
(
addr
,
freeFinger
()),
"Size of free range is inconsistent with chunk size."
);
if
(
CMSTestInFreeList
)
{
assert
(
_sp
->
verify
ChunkInFreeLists
(
ffc
),
assert
(
_sp
->
verify
_chunk_in_free_list
(
ffc
),
"free range is not in free lists"
);
}
_sp
->
removeFreeChunkFromFreeLists
(
ffc
);
...
...
@@ -8351,11 +8351,11 @@ void SweepClosure::do_post_free_or_garbage_chunk(FreeChunk* fc,
size_t
chunkSize
)
{
// do_post_free_or_garbage_chunk() should only be called in the case
// of the adaptive free list allocator.
const
bool
fcInFreeLists
=
fc
->
is
F
ree
();
const
bool
fcInFreeLists
=
fc
->
is
_f
ree
();
assert
(
_sp
->
adaptive_freelists
(),
"Should only be used in this case."
);
assert
((
HeapWord
*
)
fc
<=
_limit
,
"sweep invariant"
);
if
(
CMSTestInFreeList
&&
fcInFreeLists
)
{
assert
(
_sp
->
verify
ChunkInFreeLists
(
fc
),
"free chunk is not in free lists"
);
assert
(
_sp
->
verify
_chunk_in_free_list
(
fc
),
"free chunk is not in free lists"
);
}
if
(
CMSTraceSweeper
)
{
...
...
@@ -8410,7 +8410,7 @@ void SweepClosure::do_post_free_or_garbage_chunk(FreeChunk* fc,
assert
(
ffc
->
size
()
==
pointer_delta
(
fc_addr
,
freeFinger
()),
"Size of free range is inconsistent with chunk size."
);
if
(
CMSTestInFreeList
)
{
assert
(
_sp
->
verify
ChunkInFreeLists
(
ffc
),
assert
(
_sp
->
verify
_chunk_in_free_list
(
ffc
),
"Chunk is not in free lists"
);
}
_sp
->
coalDeath
(
ffc
->
size
());
...
...
@@ -8459,7 +8459,7 @@ void SweepClosure::lookahead_and_flush(FreeChunk* fc, size_t chunk_size) {
" when examining fc = "
PTR_FORMAT
"("
SIZE_FORMAT
")"
,
_limit
,
_sp
->
bottom
(),
_sp
->
end
(),
fc
,
chunk_size
));
if
(
eob
>=
_limit
)
{
assert
(
eob
==
_limit
||
fc
->
is
F
ree
(),
"Only a free chunk should allow us to cross over the limit"
);
assert
(
eob
==
_limit
||
fc
->
is
_f
ree
(),
"Only a free chunk should allow us to cross over the limit"
);
if
(
CMSTraceSweeper
)
{
gclog_or_tty
->
print_cr
(
"_limit "
PTR_FORMAT
" reached or crossed by block "
"["
PTR_FORMAT
","
PTR_FORMAT
") in space "
...
...
@@ -8482,8 +8482,8 @@ void SweepClosure::flush_cur_free_chunk(HeapWord* chunk, size_t size) {
if
(
!
freeRangeInFreeLists
())
{
if
(
CMSTestInFreeList
)
{
FreeChunk
*
fc
=
(
FreeChunk
*
)
chunk
;
fc
->
set
S
ize
(
size
);
assert
(
!
_sp
->
verify
ChunkInFreeLists
(
fc
),
fc
->
set
_s
ize
(
size
);
assert
(
!
_sp
->
verify
_chunk_in_free_list
(
fc
),
"chunk should not be in free lists yet"
);
}
if
(
CMSTraceSweeper
)
{
...
...
@@ -8557,8 +8557,8 @@ void SweepClosure::do_yield_work(HeapWord* addr) {
// This is actually very useful in a product build if it can
// be called from the debugger. Compile it into the product
// as needed.
bool
debug_verify
ChunkInFreeLists
(
FreeChunk
*
fc
)
{
return
debug_cms_space
->
verify
ChunkInFreeLists
(
fc
);
bool
debug_verify
_chunk_in_free_list
(
FreeChunk
*
fc
)
{
return
debug_cms_space
->
verify
_chunk_in_free_list
(
fc
);
}
#endif
...
...
@@ -9255,7 +9255,7 @@ void ASConcurrentMarkSweepGeneration::shrink_by(size_t desired_bytes) {
size_t
chunk_at_end_old_size
=
chunk_at_end
->
size
();
assert
(
chunk_at_end_old_size
>=
word_size_change
,
"Shrink is too large"
);
chunk_at_end
->
set
S
ize
(
chunk_at_end_old_size
-
chunk_at_end
->
set
_s
ize
(
chunk_at_end_old_size
-
word_size_change
);
_cmsSpace
->
freed
((
HeapWord
*
)
chunk_at_end
->
end
(),
word_size_change
);
...
...
src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.hpp
浏览文件 @
50d03f76
...
...
@@ -25,10 +25,10 @@
#ifndef SHARE_VM_GC_IMPLEMENTATION_CONCURRENTMARKSWEEP_CONCURRENTMARKSWEEPGENERATION_HPP
#define SHARE_VM_GC_IMPLEMENTATION_CONCURRENTMARKSWEEP_CONCURRENTMARKSWEEPGENERATION_HPP
#include "gc_implementation/concurrentMarkSweep/freeBlockDictionary.hpp"
#include "gc_implementation/shared/gSpaceCounters.hpp"
#include "gc_implementation/shared/gcStats.hpp"
#include "gc_implementation/shared/generationCounters.hpp"
#include "memory/freeBlockDictionary.hpp"
#include "memory/generation.hpp"
#include "runtime/mutexLocker.hpp"
#include "runtime/virtualspace.hpp"
...
...
@@ -1106,7 +1106,7 @@ class ConcurrentMarkSweepGeneration: public CardGeneration {
ConcurrentMarkSweepGeneration
(
ReservedSpace
rs
,
size_t
initial_byte_size
,
int
level
,
CardTableRS
*
ct
,
bool
use_adaptive_freelists
,
FreeBlockDictionary
::
DictionaryChoice
);
FreeBlockDictionary
<
FreeChunk
>
::
DictionaryChoice
);
// Accessors
CMSCollector
*
collector
()
const
{
return
_collector
;
}
...
...
@@ -1328,7 +1328,7 @@ class ASConcurrentMarkSweepGeneration : public ConcurrentMarkSweepGeneration {
ASConcurrentMarkSweepGeneration
(
ReservedSpace
rs
,
size_t
initial_byte_size
,
int
level
,
CardTableRS
*
ct
,
bool
use_adaptive_freelists
,
FreeBlockDictionary
::
DictionaryChoice
FreeBlockDictionary
<
FreeChunk
>
::
DictionaryChoice
dictionaryChoice
)
:
ConcurrentMarkSweepGeneration
(
rs
,
initial_byte_size
,
level
,
ct
,
use_adaptive_freelists
,
dictionaryChoice
)
{}
...
...
src/share/vm/gc_implementation/concurrentMarkSweep/freeChunk.cpp
浏览文件 @
50d03f76
...
...
@@ -23,7 +23,8 @@
*/
#include "precompiled.hpp"
#include "gc_implementation/concurrentMarkSweep/freeBlockDictionary.hpp"
#include "gc_implementation/concurrentMarkSweep/freeChunk.hpp"
#include "memory/freeBlockDictionary.hpp"
#include "utilities/copy.hpp"
#ifndef PRODUCT
...
...
src/share/vm/gc_implementation/concurrentMarkSweep/freeChunk.hpp
浏览文件 @
50d03f76
...
...
@@ -75,20 +75,20 @@ class FreeChunk VALUE_OBJ_CLASS_SPEC {
// calls. We really want the read of _mark and _prev from this pointer
// to be volatile but making the fields volatile causes all sorts of
// compilation errors.
return
((
volatile
FreeChunk
*
)
addr
)
->
is
F
ree
();
return
((
volatile
FreeChunk
*
)
addr
)
->
is
_f
ree
();
}
bool
is
F
ree
()
const
volatile
{
bool
is
_f
ree
()
const
volatile
{
LP64_ONLY
(
if
(
UseCompressedOops
)
return
mark
()
->
is_cms_free_chunk
();
else
)
return
(((
intptr_t
)
_prev
)
&
0x1
)
==
0x1
;
}
bool
cantCoalesce
()
const
{
assert
(
is
F
ree
(),
"can't get coalesce bit on not free"
);
assert
(
is
_f
ree
(),
"can't get coalesce bit on not free"
);
return
(((
intptr_t
)
_prev
)
&
0x2
)
==
0x2
;
}
void
dontCoalesce
()
{
// the block should be free
assert
(
is
F
ree
(),
"Should look like a free block"
);
assert
(
is
_f
ree
(),
"Should look like a free block"
);
_prev
=
(
FreeChunk
*
)(((
intptr_t
)
_prev
)
|
0x2
);
}
FreeChunk
*
prev
()
const
{
...
...
@@ -103,23 +103,23 @@ class FreeChunk VALUE_OBJ_CLASS_SPEC {
LP64_ONLY
(
if
(
UseCompressedOops
)
return
mark
()
->
get_size
();
else
)
return
_size
;
}
void
set
S
ize
(
size_t
sz
)
{
void
set
_s
ize
(
size_t
sz
)
{
LP64_ONLY
(
if
(
UseCompressedOops
)
set_mark
(
markOopDesc
::
set_size_and_free
(
sz
));
else
)
_size
=
sz
;
}
FreeChunk
*
next
()
const
{
return
_next
;
}
void
link
A
fter
(
FreeChunk
*
ptr
)
{
link
N
ext
(
ptr
);
if
(
ptr
!=
NULL
)
ptr
->
link
P
rev
(
this
);
void
link
_a
fter
(
FreeChunk
*
ptr
)
{
link
_n
ext
(
ptr
);
if
(
ptr
!=
NULL
)
ptr
->
link
_p
rev
(
this
);
}
void
link
N
ext
(
FreeChunk
*
ptr
)
{
_next
=
ptr
;
}
void
link
P
rev
(
FreeChunk
*
ptr
)
{
void
link
_n
ext
(
FreeChunk
*
ptr
)
{
_next
=
ptr
;
}
void
link
_p
rev
(
FreeChunk
*
ptr
)
{
LP64_ONLY
(
if
(
UseCompressedOops
)
_prev
=
ptr
;
else
)
_prev
=
(
FreeChunk
*
)((
intptr_t
)
ptr
|
0x1
);
}
void
clear
N
ext
()
{
_next
=
NULL
;
}
void
clear
_n
ext
()
{
_next
=
NULL
;
}
void
markNotFree
()
{
// Set _prev (klass) to null before (if) clearing the mark word below
_prev
=
NULL
;
...
...
@@ -129,7 +129,7 @@ class FreeChunk VALUE_OBJ_CLASS_SPEC {
set_mark
(
markOopDesc
::
prototype
());
}
#endif
assert
(
!
is
F
ree
(),
"Error"
);
assert
(
!
is
_f
ree
(),
"Error"
);
}
// Return the address past the end of this chunk
...
...
src/share/vm/gc_implementation/concurrentMarkSweep/promotionInfo.cpp
浏览文件 @
50d03f76
...
...
@@ -121,7 +121,7 @@ void PromotionInfo::track(PromotedObject* trackOop) {
void
PromotionInfo
::
track
(
PromotedObject
*
trackOop
,
klassOop
klassOfOop
)
{
// make a copy of header as it may need to be spooled
markOop
mark
=
oop
(
trackOop
)
->
mark
();
trackOop
->
clear
N
ext
();
trackOop
->
clear
_n
ext
();
if
(
mark
->
must_be_preserved_for_cms_scavenge
(
klassOfOop
))
{
// save non-prototypical header, and mark oop
saveDisplacedHeader
(
mark
);
...
...
src/share/vm/gc_implementation/concurrentMarkSweep/promotionInfo.hpp
浏览文件 @
50d03f76
...
...
@@ -43,7 +43,7 @@ class PromotedObject VALUE_OBJ_CLASS_SPEC {
// whose position will depend on endian-ness of the platform.
// This is so that there is no interference with the
// cms_free_bit occupying bit position 7 (lsb == 0)
// when we are using compressed oops; see FreeChunk::is
F
ree().
// when we are using compressed oops; see FreeChunk::is
_f
ree().
// We cannot move the cms_free_bit down because currently
// biased locking code assumes that age bits are contiguous
// with the lock bits. Even if that assumption were relaxed,
...
...
@@ -65,7 +65,7 @@ class PromotedObject VALUE_OBJ_CLASS_SPEC {
};
public:
inline
PromotedObject
*
next
()
const
{
assert
(
!
((
FreeChunk
*
)
this
)
->
is
F
ree
(),
"Error"
);
assert
(
!
((
FreeChunk
*
)
this
)
->
is
_f
ree
(),
"Error"
);
PromotedObject
*
res
;
if
(
UseCompressedOops
)
{
// The next pointer is a compressed oop stored in the top 32 bits
...
...
@@ -85,27 +85,27 @@ class PromotedObject VALUE_OBJ_CLASS_SPEC {
}
else
{
_next
|=
(
intptr_t
)
x
;
}
assert
(
!
((
FreeChunk
*
)
this
)
->
is
F
ree
(),
"Error"
);
assert
(
!
((
FreeChunk
*
)
this
)
->
is
_f
ree
(),
"Error"
);
}
inline
void
setPromotedMark
()
{
_next
|=
promoted_mask
;
assert
(
!
((
FreeChunk
*
)
this
)
->
is
F
ree
(),
"Error"
);
assert
(
!
((
FreeChunk
*
)
this
)
->
is
_f
ree
(),
"Error"
);
}
inline
bool
hasPromotedMark
()
const
{
assert
(
!
((
FreeChunk
*
)
this
)
->
is
F
ree
(),
"Error"
);
assert
(
!
((
FreeChunk
*
)
this
)
->
is
_f
ree
(),
"Error"
);
return
(
_next
&
promoted_mask
)
==
promoted_mask
;
}
inline
void
setDisplacedMark
()
{
_next
|=
displaced_mark
;
assert
(
!
((
FreeChunk
*
)
this
)
->
is
F
ree
(),
"Error"
);
assert
(
!
((
FreeChunk
*
)
this
)
->
is
_f
ree
(),
"Error"
);
}
inline
bool
hasDisplacedMark
()
const
{
assert
(
!
((
FreeChunk
*
)
this
)
->
is
F
ree
(),
"Error"
);
assert
(
!
((
FreeChunk
*
)
this
)
->
is
_f
ree
(),
"Error"
);
return
(
_next
&
displaced_mark
)
!=
0
;
}
inline
void
clear
N
ext
()
{
inline
void
clear
_n
ext
()
{
_next
=
0
;
assert
(
!
((
FreeChunk
*
)
this
)
->
is
F
ree
(),
"Error"
);
assert
(
!
((
FreeChunk
*
)
this
)
->
is
_f
ree
(),
"Error"
);
}
debug_only
(
void
*
next_addr
()
{
return
(
void
*
)
&
_next
;
})
};
...
...
src/share/vm/gc_implementation/concurrentMarkSweep/vmStructs_cms.hpp
浏览文件 @
50d03f76
...
...
@@ -44,11 +44,11 @@
nonstatic_field(FreeChunk, _next, FreeChunk*) \
nonstatic_field(FreeChunk, _prev, FreeChunk*) \
nonstatic_field(LinearAllocBlock, _word_size, size_t) \
nonstatic_field(FreeList
,
_size, size_t) \
nonstatic_field(FreeList
,
_count, ssize_t) \
nonstatic_field(BinaryTreeDictionary
, _totalSize,
size_t) \
nonstatic_field(CompactibleFreeListSpace, _dictionary, FreeBlockDictionary
*)
\
nonstatic_field(CompactibleFreeListSpace, _indexedFreeList[0], FreeList
)
\
nonstatic_field(FreeList
<FreeChunk>,
_size, size_t) \
nonstatic_field(FreeList
<FreeChunk>,
_count, ssize_t) \
nonstatic_field(BinaryTreeDictionary
<FreeChunk>,_total_size,
size_t) \
nonstatic_field(CompactibleFreeListSpace, _dictionary, FreeBlockDictionary
<FreeChunk>*)
\
nonstatic_field(CompactibleFreeListSpace, _indexedFreeList[0], FreeList
<FreeChunk>)
\
nonstatic_field(CompactibleFreeListSpace, _smallLinearAllocBlock, LinearAllocBlock)
...
...
@@ -70,13 +70,13 @@
declare_toplevel_type(CompactibleFreeListSpace*) \
declare_toplevel_type(CMSCollector*) \
declare_toplevel_type(FreeChunk*) \
declare_toplevel_type(BinaryTreeDictionary
*)
\
declare_toplevel_type(FreeBlockDictionary
*)
\
declare_toplevel_type(FreeList
*)
\
declare_toplevel_type(FreeList
)
\
declare_toplevel_type(BinaryTreeDictionary
<FreeChunk>*)
\
declare_toplevel_type(FreeBlockDictionary
<FreeChunk>*)
\
declare_toplevel_type(FreeList
<FreeChunk>*)
\
declare_toplevel_type(FreeList
<FreeChunk>)
\
declare_toplevel_type(LinearAllocBlock) \
declare_toplevel_type(FreeBlockDictionary
)
\
declare_type(BinaryTreeDictionary
, FreeBlockDictionary
)
declare_toplevel_type(FreeBlockDictionary
<FreeChunk>)
\
declare_type(BinaryTreeDictionary
<FreeChunk>, FreeBlockDictionary<FreeChunk>
)
#define VM_INT_CONSTANTS_CMS(declare_constant) \
declare_constant(Generation::ConcurrentMarkSweep) \
...
...
src/share/vm/gc_implementation/g1/concurrentMark.cpp
浏览文件 @
50d03f76
...
...
@@ -1183,35 +1183,31 @@ void ConcurrentMark::checkpointRootsFinal(bool clear_all_soft_refs) {
g1p
->
record_concurrent_mark_remark_end
();
}
// Used to calculate the # live objects per region
// for verification purposes
class
CalcLiveObjectsClosure
:
public
HeapRegionClosure
{
CMBitMapRO
*
_bm
;
// Base class of the closures that finalize and verify the
// liveness counting data.
class
CMCountDataClosureBase
:
public
HeapRegionClosure
{
protected:
ConcurrentMark
*
_cm
;
BitMap
*
_region_bm
;
BitMap
*
_card_bm
;
size_t
_region_marked_bytes
;
intptr_t
_bottom_card_num
;
void
mark_card_num_range
(
intptr_t
start_card_num
,
intptr_t
last_card_num
)
{
assert
(
start_card_num
<=
last_card_num
,
"sanity"
);
BitMap
::
idx_t
start_idx
=
start_card_num
-
_bottom_card_num
;
BitMap
::
idx_t
last_idx
=
last_card_num
-
_bottom_card_num
;
void
set_card_bitmap_range
(
BitMap
::
idx_t
start_idx
,
BitMap
::
idx_t
last_idx
)
{
assert
(
start_idx
<=
last_idx
,
"sanity"
);
for
(
BitMap
::
idx_t
i
=
start_idx
;
i
<=
last_idx
;
i
+=
1
)
{
_card_bm
->
par_at_put
(
i
,
1
);
// Set the inclusive bit range [start_idx, last_idx].
// For small ranges (up to 8 cards) use a simple loop; otherwise
// use par_at_put_range.
if
((
last_idx
-
start_idx
)
<
8
)
{
for
(
BitMap
::
idx_t
i
=
start_idx
;
i
<=
last_idx
;
i
+=
1
)
{
_card_bm
->
par_set_bit
(
i
);
}
}
else
{
assert
(
last_idx
<
_card_bm
->
size
(),
"sanity"
);
// Note BitMap::par_at_put_range() is exclusive.
_card_bm
->
par_at_put_range
(
start_idx
,
last_idx
+
1
,
true
);
}
}
public:
CalcLiveObjectsClosure
(
CMBitMapRO
*
bm
,
ConcurrentMark
*
cm
,
BitMap
*
region_bm
,
BitMap
*
card_bm
)
:
_bm
(
bm
),
_cm
(
cm
),
_region_bm
(
region_bm
),
_card_bm
(
card_bm
),
_region_marked_bytes
(
0
),
_bottom_card_num
(
cm
->
heap_bottom_card_num
())
{
}
// It takes a region that's not empty (i.e., it has at least one
// live object in it and sets its corresponding bit on the region
// bitmap to 1. If the region is "starts humongous" it will also set
...
...
@@ -1234,6 +1230,24 @@ public:
}
}
public:
CMCountDataClosureBase
(
ConcurrentMark
*
cm
,
BitMap
*
region_bm
,
BitMap
*
card_bm
)
:
_cm
(
cm
),
_region_bm
(
region_bm
),
_card_bm
(
card_bm
)
{
}
};
// Closure that calculates the # live objects per region. Used
// for verification purposes during the cleanup pause.
class
CalcLiveObjectsClosure
:
public
CMCountDataClosureBase
{
CMBitMapRO
*
_bm
;
size_t
_region_marked_bytes
;
public:
CalcLiveObjectsClosure
(
CMBitMapRO
*
bm
,
ConcurrentMark
*
cm
,
BitMap
*
region_bm
,
BitMap
*
card_bm
)
:
CMCountDataClosureBase
(
cm
,
region_bm
,
card_bm
),
_bm
(
bm
),
_region_marked_bytes
(
0
)
{
}
bool
doHeapRegion
(
HeapRegion
*
hr
)
{
if
(
hr
->
continuesHumongous
())
{
...
...
@@ -1260,65 +1274,31 @@ public:
size_t
marked_bytes
=
0
;
// Below, the term "card num" means the result of shifting an address
// by the card shift -- address 0 corresponds to card number 0. One
// must subtract the card num of the bottom of the heap to obtain a
// card table index.
// The first card num of the sequence of live cards currently being
// constructed. -1 ==> no sequence.
intptr_t
start_card_num
=
-
1
;
// The last card num of the sequence of live cards currently being
// constructed. -1 ==> no sequence.
intptr_t
last_card_num
=
-
1
;
while
(
start
<
nextTop
)
{
oop
obj
=
oop
(
start
);
int
obj_sz
=
obj
->
size
();
// The card num of the start of the current object.
intptr_t
obj_card_num
=
intptr_t
(
uintptr_t
(
start
)
>>
CardTableModRefBS
::
card_shift
);
HeapWord
*
obj_last
=
start
+
obj_sz
-
1
;
intptr_t
obj_last_card_num
=
intptr_t
(
uintptr_t
(
obj_last
)
>>
CardTableModRefBS
::
card_shift
);
if
(
obj_card_num
!=
last_card_num
)
{
if
(
start_card_num
==
-
1
)
{
assert
(
last_card_num
==
-
1
,
"Both or neither."
);
start_card_num
=
obj_card_num
;
}
else
{
assert
(
last_card_num
!=
-
1
,
"Both or neither."
);
assert
(
obj_card_num
>=
last_card_num
,
"Inv"
);
if
((
obj_card_num
-
last_card_num
)
>
1
)
{
// Mark the last run, and start a new one.
mark_card_num_range
(
start_card_num
,
last_card_num
);
start_card_num
=
obj_card_num
;
}
}
}
// In any case, we set the last card num.
last_card_num
=
obj_last_card_num
;
BitMap
::
idx_t
start_idx
=
_cm
->
card_bitmap_index_for
(
start
);
BitMap
::
idx_t
last_idx
=
_cm
->
card_bitmap_index_for
(
obj_last
);
// Set the bits in the card BM for this object (inclusive).
set_card_bitmap_range
(
start_idx
,
last_idx
);
// Add the size of this object to the number of marked bytes.
marked_bytes
+=
(
size_t
)
obj_sz
*
HeapWordSize
;
// Find the next marked object after this one.
start
=
_bm
->
getNextMarkedWordAddress
(
start
+
1
,
nextTop
);
}
// Handle the last range, if any.
if
(
start_card_num
!=
-
1
)
{
mark_card_num_range
(
start_card_num
,
last_card_num
);
start
=
_bm
->
getNextMarkedWordAddress
(
obj_last
+
1
,
nextTop
);
}
// Mark the allocated-since-marking portion...
HeapWord
*
top
=
hr
->
top
();
if
(
nextTop
<
top
)
{
start_card_num
=
intptr_t
(
uintptr_t
(
nextTop
)
>>
CardTableModRefBS
::
card_shift
);
last_card_num
=
intptr_t
(
uintptr_t
(
top
)
>>
CardTableModRefBS
::
card_shift
);
BitMap
::
idx_t
start_idx
=
_cm
->
card_bitmap_index_for
(
nextTop
);
BitMap
::
idx_t
last_idx
=
_cm
->
card_bitmap_index_for
(
top
-
1
);
mark_card_num_range
(
start_card_num
,
last_card_num
);
set_card_bitmap_range
(
start_idx
,
last_idx
);
// This definitely means the region has live objects.
set_bit_for_region
(
hr
);
...
...
@@ -1394,17 +1374,6 @@ public:
MutexLockerEx
x
((
_verbose
?
ParGCRareEvent_lock
:
NULL
),
Mutex
::
_no_safepoint_check_flag
);
// Verify that _top_at_conc_count == ntams
if
(
hr
->
top_at_conc_mark_count
()
!=
hr
->
next_top_at_mark_start
())
{
if
(
_verbose
)
{
gclog_or_tty
->
print_cr
(
"Region %u: top at conc count incorrect: "
"expected "
PTR_FORMAT
", actual: "
PTR_FORMAT
,
hr
->
hrs_index
(),
hr
->
next_top_at_mark_start
(),
hr
->
top_at_conc_mark_count
());
}
failures
+=
1
;
}
// Verify the marked bytes for this region.
size_t
exp_marked_bytes
=
_calc_cl
.
region_marked_bytes
();
size_t
act_marked_bytes
=
hr
->
next_marked_bytes
();
...
...
@@ -1470,7 +1439,7 @@ public:
_failures
+=
failures
;
// We could stop iteration over the heap when we
// find the first v
oi
lating region by returning true.
// find the first v
io
lating region by returning true.
return
false
;
}
};
...
...
@@ -1543,62 +1512,19 @@ public:
int
failures
()
const
{
return
_failures
;
}
};
// Final update of count data (during cleanup).
// Adds [top_at_count, NTAMS) to the marked bytes for each
// region. Sets the bits in the card bitmap corresponding
// to the interval [top_at_count, top], and sets the
// liveness bit for each region containing live data
// in the region bitmap.
class
FinalCountDataUpdateClosure
:
public
HeapRegionClosure
{
ConcurrentMark
*
_cm
;
BitMap
*
_region_bm
;
BitMap
*
_card_bm
;
void
set_card_bitmap_range
(
BitMap
::
idx_t
start_idx
,
BitMap
::
idx_t
last_idx
)
{
assert
(
start_idx
<=
last_idx
,
"sanity"
);
// Set the inclusive bit range [start_idx, last_idx].
// For small ranges (up to 8 cards) use a simple loop; otherwise
// use par_at_put_range.
if
((
last_idx
-
start_idx
)
<=
8
)
{
for
(
BitMap
::
idx_t
i
=
start_idx
;
i
<=
last_idx
;
i
+=
1
)
{
_card_bm
->
par_set_bit
(
i
);
}
}
else
{
assert
(
last_idx
<
_card_bm
->
size
(),
"sanity"
);
// Note BitMap::par_at_put_range() is exclusive.
_card_bm
->
par_at_put_range
(
start_idx
,
last_idx
+
1
,
true
);
}
}
// It takes a region that's not empty (i.e., it has at least one
// live object in it and sets its corresponding bit on the region
// bitmap to 1. If the region is "starts humongous" it will also set
// to 1 the bits on the region bitmap that correspond to its
// associated "continues humongous" regions.
void
set_bit_for_region
(
HeapRegion
*
hr
)
{
assert
(
!
hr
->
continuesHumongous
(),
"should have filtered those out"
);
BitMap
::
idx_t
index
=
(
BitMap
::
idx_t
)
hr
->
hrs_index
();
if
(
!
hr
->
startsHumongous
())
{
// Normal (non-humongous) case: just set the bit.
_region_bm
->
par_set_bit
(
index
);
}
else
{
// Starts humongous case: calculate how many regions are part of
// this humongous region and then set the bit range.
G1CollectedHeap
*
g1h
=
G1CollectedHeap
::
heap
();
HeapRegion
*
last_hr
=
g1h
->
heap_region_containing_raw
(
hr
->
end
()
-
1
);
BitMap
::
idx_t
end_index
=
(
BitMap
::
idx_t
)
last_hr
->
hrs_index
()
+
1
;
_region_bm
->
par_at_put_range
(
index
,
end_index
,
true
);
}
}
// Closure that finalizes the liveness counting data.
// Used during the cleanup pause.
// Sets the bits corresponding to the interval [NTAMS, top]
// (which contains the implicitly live objects) in the
// card liveness bitmap. Also sets the bit for each region,
// containing live data, in the region liveness bitmap.
class
FinalCountDataUpdateClosure
:
public
CMCountDataClosureBase
{
public:
FinalCountDataUpdateClosure
(
ConcurrentMark
*
cm
,
BitMap
*
region_bm
,
BitMap
*
card_bm
)
:
_cm
(
cm
),
_region_bm
(
region_bm
),
_card_bm
(
card_bm
)
{
}
CMCountDataClosureBase
(
cm
,
region_bm
,
card_bm
)
{
}
bool
doHeapRegion
(
HeapRegion
*
hr
)
{
...
...
@@ -1613,26 +1539,10 @@ class FinalCountDataUpdateClosure: public HeapRegionClosure {
return
false
;
}
HeapWord
*
start
=
hr
->
top_at_conc_mark_count
();
HeapWord
*
ntams
=
hr
->
next_top_at_mark_start
();
HeapWord
*
top
=
hr
->
top
();
assert
(
hr
->
bottom
()
<=
start
&&
start
<=
hr
->
end
()
&&
hr
->
bottom
()
<=
ntams
&&
ntams
<=
hr
->
end
(),
"Preconditions."
);
if
(
start
<
ntams
)
{
// Region was changed between remark and cleanup pauses
// We need to add (ntams - start) to the marked bytes
// for this region, and set bits for the range
// [ card_idx(start), card_idx(ntams) ) in the card bitmap.
size_t
live_bytes
=
(
ntams
-
start
)
*
HeapWordSize
;
hr
->
add_to_marked_bytes
(
live_bytes
);
// Record the new top at conc count
hr
->
set_top_at_conc_mark_count
(
ntams
);
// The setting of the bits in the card bitmap takes place below
}
assert
(
hr
->
bottom
()
<=
ntams
&&
ntams
<=
hr
->
end
(),
"Preconditions."
);
// Mark the allocated-since-marking portion...
if
(
ntams
<
top
)
{
...
...
@@ -1640,8 +1550,8 @@ class FinalCountDataUpdateClosure: public HeapRegionClosure {
set_bit_for_region
(
hr
);
}
// Now set the bits for [
start
, top]
BitMap
::
idx_t
start_idx
=
_cm
->
card_bitmap_index_for
(
start
);
// Now set the bits for [
ntams
, top]
BitMap
::
idx_t
start_idx
=
_cm
->
card_bitmap_index_for
(
ntams
);
BitMap
::
idx_t
last_idx
=
_cm
->
card_bitmap_index_for
(
top
);
set_card_bitmap_range
(
start_idx
,
last_idx
);
...
...
@@ -3072,9 +2982,6 @@ class AggregateCountDataHRClosure: public HeapRegionClosure {
// Update the marked bytes for this region.
hr
->
add_to_marked_bytes
(
marked_bytes
);
// Now set the top at count to NTAMS.
hr
->
set_top_at_conc_mark_count
(
limit
);
// Next heap region
return
false
;
}
...
...
src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp
浏览文件 @
50d03f76
...
...
@@ -368,16 +368,11 @@ void YoungList::print() {
if
(
curr
==
NULL
)
gclog_or_tty
->
print_cr
(
" empty"
);
while
(
curr
!=
NULL
)
{
gclog_or_tty
->
print_cr
(
" [%08x-%08x], t: %08x, P: %08x, N: %08x, C: %08x, "
"age: %4d, y: %d, surv: %d"
,
curr
->
bottom
(),
curr
->
end
(),
curr
->
top
(),
gclog_or_tty
->
print_cr
(
" "
HR_FORMAT
", P: "
PTR_FORMAT
"N: "
PTR_FORMAT
", age: %4d"
,
HR_FORMAT_PARAMS
(
curr
),
curr
->
prev_top_at_mark_start
(),
curr
->
next_top_at_mark_start
(),
curr
->
top_at_conc_mark_count
(),
curr
->
age_in_surv_rate_group_cond
(),
curr
->
is_young
(),
curr
->
is_survivor
());
curr
->
age_in_surv_rate_group_cond
());
curr
=
curr
->
get_next_young_region
();
}
}
...
...
@@ -1253,12 +1248,13 @@ bool G1CollectedHeap::do_collection(bool explicit_gc,
IsGCActiveMark
x
;
// Timing
bool
system_gc
=
(
gc_cause
()
==
GCCause
::
_java_lang_system_gc
);
assert
(
!
system_gc
||
explicit_gc
,
"invariant"
);
assert
(
gc_cause
()
!=
GCCause
::
_java_lang_system_gc
||
explicit_gc
,
"invariant"
);
gclog_or_tty
->
date_stamp
(
G1Log
::
fine
()
&&
PrintGCDateStamps
);
TraceCPUTime
tcpu
(
G1Log
::
finer
(),
true
,
gclog_or_tty
);
TraceTime
t
(
system_gc
?
"Full GC (System.gc())"
:
"Full GC"
,
G1Log
::
fine
(),
true
,
gclog_or_tty
);
char
verbose_str
[
128
];
sprintf
(
verbose_str
,
"Full GC (%s)"
,
GCCause
::
to_string
(
gc_cause
()));
TraceTime
t
(
verbose_str
,
G1Log
::
fine
(),
true
,
gclog_or_tty
);
TraceCollectorStats
tcs
(
g1mm
()
->
full_collection_counters
());
TraceMemoryManagerStats
tms
(
true
/* fullGC */
,
gc_cause
());
...
...
@@ -3593,25 +3589,22 @@ G1CollectedHeap::do_collection_pause_at_safepoint(double target_pause_time_ms) {
// Inner scope for scope based logging, timers, and stats collection
{
char
verbose_str
[
128
];
sprintf
(
verbose_str
,
"GC pause "
);
if
(
g1_policy
()
->
gcs_are_young
())
{
strcat
(
verbose_str
,
"(young)"
);
}
else
{
strcat
(
verbose_str
,
"(mixed)"
);
}
if
(
g1_policy
()
->
during_initial_mark_pause
())
{
strcat
(
verbose_str
,
" (initial-mark)"
);
// We are about to start a marking cycle, so we increment the
// full collection counter.
increment_total_full_collections
();
}
// if the log level is "finer" is on, we'll print long statistics information
// in the collector policy code, so let's not print this as the output
// is messy if we do.
gclog_or_tty
->
date_stamp
(
G1Log
::
fine
()
&&
PrintGCDateStamps
);
TraceCPUTime
tcpu
(
G1Log
::
finer
(),
true
,
gclog_or_tty
);
char
verbose_str
[
128
];
sprintf
(
verbose_str
,
"GC pause (%s) (%s)%s"
,
GCCause
::
to_string
(
gc_cause
()),
g1_policy
()
->
gcs_are_young
()
?
"young"
:
"mixed"
,
g1_policy
()
->
during_initial_mark_pause
()
?
" (initial-mark)"
:
""
);
TraceTime
t
(
verbose_str
,
G1Log
::
fine
()
&&
!
G1Log
::
finer
(),
true
,
gclog_or_tty
);
TraceCollectorStats
tcs
(
g1mm
()
->
incremental_collection_counters
());
...
...
src/share/vm/gc_implementation/g1/g1CollectorPolicy.cpp
浏览文件 @
50d03f76
...
...
@@ -886,8 +886,9 @@ void G1CollectorPolicy::record_collection_pause_start(double start_time_sec,
size_t
start_used
)
{
if
(
G1Log
::
finer
())
{
gclog_or_tty
->
stamp
(
PrintGCTimeStamps
);
gclog_or_tty
->
print
(
"[GC pause"
);
gclog_or_tty
->
print
(
" (%s)"
,
gcs_are_young
()
?
"young"
:
"mixed"
);
gclog_or_tty
->
print
(
"[GC pause (%s) (%s)"
,
GCCause
::
to_string
(
_g1
->
gc_cause
()),
gcs_are_young
()
?
"young"
:
"mixed"
);
}
// We only need to do this here as the policy will only be applied
...
...
@@ -2459,16 +2460,10 @@ void G1CollectorPolicy::print_collection_set(HeapRegion* list_head, outputStream
while
(
csr
!=
NULL
)
{
HeapRegion
*
next
=
csr
->
next_in_collection_set
();
assert
(
csr
->
in_collection_set
(),
"bad CS"
);
st
->
print_cr
(
" [%08x-%08x], t: %08x, P: %08x, N: %08x, C: %08x, "
"age: %4d, y: %d, surv: %d"
,
csr
->
bottom
(),
csr
->
end
(),
csr
->
top
(),
csr
->
prev_top_at_mark_start
(),
csr
->
next_top_at_mark_start
(),
csr
->
top_at_conc_mark_count
(),
csr
->
age_in_surv_rate_group_cond
(),
csr
->
is_young
(),
csr
->
is_survivor
());
st
->
print_cr
(
" "
HR_FORMAT
", P: "
PTR_FORMAT
"N: "
PTR_FORMAT
", age: %4d"
,
HR_FORMAT_PARAMS
(
csr
),
csr
->
prev_top_at_mark_start
(),
csr
->
next_top_at_mark_start
(),
csr
->
age_in_surv_rate_group_cond
());
csr
=
next
;
}
}
...
...
src/share/vm/gc_implementation/g1/heapRegion.cpp
浏览文件 @
50d03f76
...
...
@@ -510,9 +510,6 @@ HeapRegion::HeapRegion(uint hrs_index,
_rem_set
=
new
HeapRegionRemSet
(
sharedOffsetArray
,
this
);
assert
(
HeapRegionRemSet
::
num_par_rem_sets
()
>
0
,
"Invariant."
);
// In case the region is allocated during a pause, note the top.
// We haven't done any counting on a brand new region.
_top_at_conc_mark_count
=
bottom
();
}
class
NextCompactionHeapRegionClosure
:
public
HeapRegionClosure
{
...
...
@@ -585,14 +582,12 @@ void HeapRegion::note_self_forwarding_removal_start(bool during_initial_mark,
// we find to be self-forwarded on the next bitmap. So all
// objects need to be below NTAMS.
_next_top_at_mark_start
=
top
();
set_top_at_conc_mark_count
(
bottom
());
_next_marked_bytes
=
0
;
}
else
if
(
during_conc_mark
)
{
// During concurrent mark, all objects in the CSet (including
// the ones we find to be self-forwarded) are implicitly live.
// So all objects need to be above NTAMS.
_next_top_at_mark_start
=
bottom
();
set_top_at_conc_mark_count
(
bottom
());
_next_marked_bytes
=
0
;
}
}
...
...
src/share/vm/gc_implementation/g1/heapRegion.hpp
浏览文件 @
50d03f76
...
...
@@ -306,9 +306,6 @@ class HeapRegion: public G1OffsetTableContigSpace {
// If a collection pause is in progress, this is the top at the start
// of that pause.
// We've counted the marked bytes of objects below here.
HeapWord
*
_top_at_conc_mark_count
;
void
init_top_at_mark_start
()
{
assert
(
_prev_marked_bytes
==
0
&&
_next_marked_bytes
==
0
,
...
...
@@ -316,7 +313,6 @@ class HeapRegion: public G1OffsetTableContigSpace {
HeapWord
*
bot
=
bottom
();
_prev_top_at_mark_start
=
bot
;
_next_top_at_mark_start
=
bot
;
_top_at_conc_mark_count
=
bot
;
}
void
set_young_type
(
YoungType
new_type
)
{
...
...
@@ -625,19 +621,6 @@ class HeapRegion: public G1OffsetTableContigSpace {
// last mark phase ended.
bool
is_marked
()
{
return
_prev_top_at_mark_start
!=
bottom
();
}
void
init_top_at_conc_mark_count
()
{
_top_at_conc_mark_count
=
bottom
();
}
void
set_top_at_conc_mark_count
(
HeapWord
*
cur
)
{
assert
(
bottom
()
<=
cur
&&
cur
<=
end
(),
"Sanity."
);
_top_at_conc_mark_count
=
cur
;
}
HeapWord
*
top_at_conc_mark_count
()
{
return
_top_at_conc_mark_count
;
}
void
reset_during_compaction
()
{
guarantee
(
isHumongous
()
&&
startsHumongous
(),
"should only be called for humongous regions"
);
...
...
@@ -733,7 +716,6 @@ class HeapRegion: public G1OffsetTableContigSpace {
_evacuation_failed
=
b
;
if
(
b
)
{
init_top_at_conc_mark_count
();
_next_marked_bytes
=
0
;
}
}
...
...
src/share/vm/gc_implementation/g1/heapRegion.inline.hpp
浏览文件 @
50d03f76
...
...
@@ -56,7 +56,6 @@ G1OffsetTableContigSpace::block_start_const(const void* p) const {
}
inline
void
HeapRegion
::
note_start_of_marking
()
{
init_top_at_conc_mark_count
();
_next_marked_bytes
=
0
;
_next_top_at_mark_start
=
top
();
}
...
...
src/share/vm/gc_implementation/shared/allocationStats.hpp
浏览文件 @
50d03f76
...
...
@@ -39,7 +39,7 @@ class AllocationStats VALUE_OBJ_CLASS_SPEC {
// We measure the demand between the end of the previous sweep and
// beginning of this sweep:
// Count(end_last_sweep) - Count(start_this_sweep)
// + split
Births(between) - splitD
eaths(between)
// + split
_births(between) - split_d
eaths(between)
// The above number divided by the time since the end of the
// previous sweep gives us a time rate of demand for blocks
// of this size. We compute a padded average of this rate as
...
...
@@ -51,34 +51,34 @@ class AllocationStats VALUE_OBJ_CLASS_SPEC {
AdaptivePaddedAverage
_demand_rate_estimate
;
ssize_t
_desired
;
// Demand stimate computed as described above
ssize_t
_coal
D
esired
;
// desired +/- small-percent for tuning coalescing
ssize_t
_coal
_d
esired
;
// desired +/- small-percent for tuning coalescing
ssize_t
_surplus
;
// count - (desired +/- small-percent),
// used to tune splitting in best fit
ssize_t
_bfr
S
urp
;
// surplus at start of current sweep
ssize_t
_prev
S
weep
;
// count from end of previous sweep
ssize_t
_before
S
weep
;
// count from before current sweep
ssize_t
_coal
B
irths
;
// additional chunks from coalescing
ssize_t
_coal
D
eaths
;
// loss from coalescing
ssize_t
_split
B
irths
;
// additional chunks from splitting
ssize_t
_split
D
eaths
;
// loss from splitting
size_t
_returned
B
ytes
;
// number of bytes returned to list.
ssize_t
_bfr
_s
urp
;
// surplus at start of current sweep
ssize_t
_prev
_s
weep
;
// count from end of previous sweep
ssize_t
_before
_s
weep
;
// count from before current sweep
ssize_t
_coal
_b
irths
;
// additional chunks from coalescing
ssize_t
_coal
_d
eaths
;
// loss from coalescing
ssize_t
_split
_b
irths
;
// additional chunks from splitting
ssize_t
_split
_d
eaths
;
// loss from splitting
size_t
_returned
_b
ytes
;
// number of bytes returned to list.
public:
void
initialize
(
bool
split_birth
=
false
)
{
AdaptivePaddedAverage
*
dummy
=
new
(
&
_demand_rate_estimate
)
AdaptivePaddedAverage
(
CMS_FLSWeight
,
CMS_FLSPadding
);
_desired
=
0
;
_coal
D
esired
=
0
;
_coal
_d
esired
=
0
;
_surplus
=
0
;
_bfr
S
urp
=
0
;
_prev
S
weep
=
0
;
_before
S
weep
=
0
;
_coal
B
irths
=
0
;
_coal
D
eaths
=
0
;
_split
B
irths
=
(
split_birth
?
1
:
0
);
_split
D
eaths
=
0
;
_returned
B
ytes
=
0
;
_bfr
_s
urp
=
0
;
_prev
_s
weep
=
0
;
_before
_s
weep
=
0
;
_coal
_b
irths
=
0
;
_coal
_d
eaths
=
0
;
_split
_b
irths
=
(
split_birth
?
1
:
0
);
_split
_d
eaths
=
0
;
_returned
_b
ytes
=
0
;
}
AllocationStats
()
{
...
...
@@ -99,12 +99,12 @@ class AllocationStats VALUE_OBJ_CLASS_SPEC {
// vulnerable to noisy glitches. In such cases, we
// ignore the current sample and use currently available
// historical estimates.
assert
(
prev
Sweep
()
+
splitBirths
()
+
coalB
irths
()
// "Total Production Stock"
>=
split
Deaths
()
+
coalD
eaths
()
+
(
ssize_t
)
count
,
// "Current stock + depletion"
assert
(
prev
_sweep
()
+
split_births
()
+
coal_b
irths
()
// "Total Production Stock"
>=
split
_deaths
()
+
coal_d
eaths
()
+
(
ssize_t
)
count
,
// "Current stock + depletion"
"Conservation Principle"
);
if
(
inter_sweep_current
>
_threshold
)
{
ssize_t
demand
=
prev
Sweep
()
-
(
ssize_t
)
count
+
splitBirths
()
+
coalB
irths
()
-
split
Deaths
()
-
coalD
eaths
();
ssize_t
demand
=
prev
_sweep
()
-
(
ssize_t
)
count
+
split_births
()
+
coal_b
irths
()
-
split
_deaths
()
-
coal_d
eaths
();
assert
(
demand
>=
0
,
err_msg
(
"Demand ("
SSIZE_FORMAT
") should be non-negative for "
PTR_FORMAT
" (size="
SIZE_FORMAT
")"
,
...
...
@@ -130,40 +130,40 @@ class AllocationStats VALUE_OBJ_CLASS_SPEC {
ssize_t
desired
()
const
{
return
_desired
;
}
void
set_desired
(
ssize_t
v
)
{
_desired
=
v
;
}
ssize_t
coal
Desired
()
const
{
return
_coalD
esired
;
}
void
set_coal
Desired
(
ssize_t
v
)
{
_coalD
esired
=
v
;
}
ssize_t
coal
_desired
()
const
{
return
_coal_d
esired
;
}
void
set_coal
_desired
(
ssize_t
v
)
{
_coal_d
esired
=
v
;
}
ssize_t
surplus
()
const
{
return
_surplus
;
}
void
set_surplus
(
ssize_t
v
)
{
_surplus
=
v
;
}
void
increment_surplus
()
{
_surplus
++
;
}
void
decrement_surplus
()
{
_surplus
--
;
}
ssize_t
bfr
Surp
()
const
{
return
_bfrS
urp
;
}
void
set_bfr
Surp
(
ssize_t
v
)
{
_bfrS
urp
=
v
;
}
ssize_t
prev
Sweep
()
const
{
return
_prevS
weep
;
}
void
set_prev
Sweep
(
ssize_t
v
)
{
_prevS
weep
=
v
;
}
ssize_t
before
Sweep
()
const
{
return
_beforeS
weep
;
}
void
set_before
Sweep
(
ssize_t
v
)
{
_beforeS
weep
=
v
;
}
ssize_t
bfr
_surp
()
const
{
return
_bfr_s
urp
;
}
void
set_bfr
_surp
(
ssize_t
v
)
{
_bfr_s
urp
=
v
;
}
ssize_t
prev
_sweep
()
const
{
return
_prev_s
weep
;
}
void
set_prev
_sweep
(
ssize_t
v
)
{
_prev_s
weep
=
v
;
}
ssize_t
before
_sweep
()
const
{
return
_before_s
weep
;
}
void
set_before
_sweep
(
ssize_t
v
)
{
_before_s
weep
=
v
;
}
ssize_t
coal
Births
()
const
{
return
_coalB
irths
;
}
void
set_coal
Births
(
ssize_t
v
)
{
_coalB
irths
=
v
;
}
void
increment_coal
Births
()
{
_coalB
irths
++
;
}
ssize_t
coal
_births
()
const
{
return
_coal_b
irths
;
}
void
set_coal
_births
(
ssize_t
v
)
{
_coal_b
irths
=
v
;
}
void
increment_coal
_births
()
{
_coal_b
irths
++
;
}
ssize_t
coal
Deaths
()
const
{
return
_coalD
eaths
;
}
void
set_coal
Deaths
(
ssize_t
v
)
{
_coalD
eaths
=
v
;
}
void
increment_coal
Deaths
()
{
_coalD
eaths
++
;
}
ssize_t
coal
_deaths
()
const
{
return
_coal_d
eaths
;
}
void
set_coal
_deaths
(
ssize_t
v
)
{
_coal_d
eaths
=
v
;
}
void
increment_coal
_deaths
()
{
_coal_d
eaths
++
;
}
ssize_t
split
Births
()
const
{
return
_splitB
irths
;
}
void
set_split
Births
(
ssize_t
v
)
{
_splitB
irths
=
v
;
}
void
increment_split
Births
()
{
_splitB
irths
++
;
}
ssize_t
split
_births
()
const
{
return
_split_b
irths
;
}
void
set_split
_births
(
ssize_t
v
)
{
_split_b
irths
=
v
;
}
void
increment_split
_births
()
{
_split_b
irths
++
;
}
ssize_t
split
Deaths
()
const
{
return
_splitD
eaths
;
}
void
set_split
Deaths
(
ssize_t
v
)
{
_splitD
eaths
=
v
;
}
void
increment_split
Deaths
()
{
_splitD
eaths
++
;
}
ssize_t
split
_deaths
()
const
{
return
_split_d
eaths
;
}
void
set_split
_deaths
(
ssize_t
v
)
{
_split_d
eaths
=
v
;
}
void
increment_split
_deaths
()
{
_split_d
eaths
++
;
}
NOT_PRODUCT
(
size_t
returned
Bytes
()
const
{
return
_returnedB
ytes
;
}
void
set_returned
Bytes
(
size_t
v
)
{
_returnedB
ytes
=
v
;
}
size_t
returned
_bytes
()
const
{
return
_returned_b
ytes
;
}
void
set_returned
_bytes
(
size_t
v
)
{
_returned_b
ytes
=
v
;
}
)
};
...
...
src/share/vm/
gc_implementation/concurrentMarkSweep
/binaryTreeDictionary.cpp
→
src/share/vm/
memory
/binaryTreeDictionary.cpp
浏览文件 @
50d03f76
此差异已折叠。
点击以展开。
src/share/vm/
gc_implementation/concurrentMarkSweep
/binaryTreeDictionary.hpp
→
src/share/vm/
memory
/binaryTreeDictionary.hpp
浏览文件 @
50d03f76
此差异已折叠。
点击以展开。
src/share/vm/
gc_implementation/concurrentMarkSweep
/freeBlockDictionary.cpp
→
src/share/vm/
memory
/freeBlockDictionary.cpp
浏览文件 @
50d03f76
...
...
@@ -23,7 +23,10 @@
*/
#include "precompiled.hpp"
#include "gc_implementation/concurrentMarkSweep/freeBlockDictionary.hpp"
#ifndef SERIALGC
#include "gc_implementation/concurrentMarkSweep/freeChunk.hpp"
#endif // SERIALGC
#include "memory/freeBlockDictionary.hpp"
#ifdef TARGET_OS_FAMILY_linux
# include "thread_linux.inline.hpp"
#endif
...
...
@@ -38,19 +41,19 @@
#endif
#ifndef PRODUCT
Mutex
*
FreeBlockDictionary
::
par_lock
()
const
{
template
<
class
Chunk
>
Mutex
*
FreeBlockDictionary
<
Chunk
>
::
par_lock
()
const
{
return
_lock
;
}
void
FreeBlockDictionary
::
set_par_lock
(
Mutex
*
lock
)
{
template
<
class
Chunk
>
void
FreeBlockDictionary
<
Chunk
>
::
set_par_lock
(
Mutex
*
lock
)
{
_lock
=
lock
;
}
void
FreeBlockDictionary
::
verify_par_locked
()
const
{
template
<
class
Chunk
>
void
FreeBlockDictionary
<
Chunk
>
::
verify_par_locked
()
const
{
#ifdef ASSERT
if
(
ParallelGCThreads
>
0
)
{
Thread
*
my
T
hread
=
Thread
::
current
();
if
(
my
T
hread
->
is_GC_task_thread
())
{
Thread
*
my
_t
hread
=
Thread
::
current
();
if
(
my
_t
hread
->
is_GC_task_thread
())
{
assert
(
par_lock
()
!=
NULL
,
"Should be using locking?"
);
assert_lock_strong
(
par_lock
());
}
...
...
@@ -58,3 +61,8 @@ void FreeBlockDictionary::verify_par_locked() const {
#endif // ASSERT
}
#endif
#ifndef SERIALGC
// Explicitly instantiate for FreeChunk
template
class
FreeBlockDictionary
<
FreeChunk
>;
#endif // SERIALGC
src/share/vm/
gc_implementation/concurrentMarkSweep
/freeBlockDictionary.hpp
→
src/share/vm/
memory
/freeBlockDictionary.hpp
浏览文件 @
50d03f76
此差异已折叠。
点击以展开。
src/share/vm/
gc_implementation/concurrentMarkSweep
/freeList.cpp
→
src/share/vm/
memory
/freeList.cpp
浏览文件 @
50d03f76
此差异已折叠。
点击以展开。
src/share/vm/
gc_implementation/concurrentMarkSweep
/freeList.hpp
→
src/share/vm/
memory
/freeList.hpp
浏览文件 @
50d03f76
此差异已折叠。
点击以展开。
src/share/vm/memory/generationSpec.cpp
浏览文件 @
50d03f76
...
...
@@ -68,7 +68,7 @@ Generation* GenerationSpec::init(ReservedSpace rs, int level,
ConcurrentMarkSweepGeneration
*
g
=
NULL
;
g
=
new
ConcurrentMarkSweepGeneration
(
rs
,
init_size
(),
level
,
ctrs
,
UseCMSAdaptiveFreeLists
,
(
FreeBlockDictionary
::
DictionaryChoice
)
CMSDictionaryChoice
);
(
FreeBlockDictionary
<
FreeChunk
>
::
DictionaryChoice
)
CMSDictionaryChoice
);
g
->
initialize_performance_counters
();
...
...
@@ -88,7 +88,7 @@ Generation* GenerationSpec::init(ReservedSpace rs, int level,
ASConcurrentMarkSweepGeneration
*
g
=
NULL
;
g
=
new
ASConcurrentMarkSweepGeneration
(
rs
,
init_size
(),
level
,
ctrs
,
UseCMSAdaptiveFreeLists
,
(
FreeBlockDictionary
::
DictionaryChoice
)
CMSDictionaryChoice
);
(
FreeBlockDictionary
<
FreeChunk
>
::
DictionaryChoice
)
CMSDictionaryChoice
);
g
->
initialize_performance_counters
();
...
...
@@ -175,7 +175,7 @@ PermGen* PermanentGenerationSpec::init(ReservedSpace rs,
}
// XXXPERM
return
new
CMSPermGen
(
perm_rs
,
init_size
,
ctrs
,
(
FreeBlockDictionary
::
DictionaryChoice
)
CMSDictionaryChoice
);
(
FreeBlockDictionary
<
FreeChunk
>
::
DictionaryChoice
)
CMSDictionaryChoice
);
}
#endif // SERIALGC
default:
...
...
src/share/vm/precompiled/precompiled.hpp
浏览文件 @
50d03f76
...
...
@@ -293,13 +293,10 @@
# include "c1/c1_globals.hpp"
#endif // COMPILER1
#ifndef SERIALGC
# include "gc_implementation/concurrentMarkSweep/binaryTreeDictionary.hpp"
# include "gc_implementation/concurrentMarkSweep/cmsOopClosures.hpp"
# include "gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.hpp"
# include "gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.hpp"
# include "gc_implementation/concurrentMarkSweep/freeBlockDictionary.hpp"
# include "gc_implementation/concurrentMarkSweep/freeChunk.hpp"
# include "gc_implementation/concurrentMarkSweep/freeList.hpp"
# include "gc_implementation/concurrentMarkSweep/promotionInfo.hpp"
# include "gc_implementation/g1/dirtyCardQueue.hpp"
# include "gc_implementation/g1/g1BlockOffsetTable.hpp"
...
...
src/share/vm/runtime/arguments.cpp
浏览文件 @
50d03f76
此差异已折叠。
点击以展开。
src/share/vm/runtime/vmStructs.cpp
浏览文件 @
50d03f76
此差异已折叠。
点击以展开。
test/runtime/7162488/Test7162488.sh
0 → 100644
浏览文件 @
50d03f76
此差异已折叠。
点击以展开。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录