Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_hotspot
提交
170a4dca
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看板
提交
170a4dca
编写于
5月 16, 2013
作者:
K
kevinw
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
6313816: SA: jstack -m fails on Win32 : UnalignedAddressException
Reviewed-by: sla, poonam
上级
fc34a84b
变更
4
显示空白变更内容
内联
并排
Showing
4 changed file
with
36 addition
and
22 deletion
+36
-22
agent/src/share/classes/sun/jvm/hotspot/debugger/windbg/WindbgCDebugger.java
...sses/sun/jvm/hotspot/debugger/windbg/WindbgCDebugger.java
+4
-4
agent/src/share/classes/sun/jvm/hotspot/debugger/windows/amd64/WindowsAMD64CFrame.java
...vm/hotspot/debugger/windows/amd64/WindowsAMD64CFrame.java
+15
-8
agent/src/share/classes/sun/jvm/hotspot/debugger/windows/x86/WindowsX86CFrame.java
...un/jvm/hotspot/debugger/windows/x86/WindowsX86CFrame.java
+15
-8
make/sa.files
make/sa.files
+2
-2
未找到文件。
agent/src/share/classes/sun/jvm/hotspot/debugger/windbg/WindbgCDebugger.java
浏览文件 @
170a4dca
...
...
@@ -28,10 +28,10 @@ import java.io.*;
import
java.util.*
;
import
sun.jvm.hotspot.debugger.*
;
import
sun.jvm.hotspot.debugger.cdbg.*
;
import
sun.jvm.hotspot.debugger.cdbg.basic.x86.*
;
import
sun.jvm.hotspot.debugger.cdbg.basic.amd64.*
;
import
sun.jvm.hotspot.debugger.x86.*
;
import
sun.jvm.hotspot.debugger.amd64.*
;
import
sun.jvm.hotspot.debugger.windows.x86.*
;
import
sun.jvm.hotspot.debugger.windows.amd64.*
;
import
sun.jvm.hotspot.utilities.AddressOps
;
class
WindbgCDebugger
implements
CDebugger
{
...
...
@@ -75,14 +75,14 @@ class WindbgCDebugger implements CDebugger {
if
(
ebp
==
null
)
return
null
;
Address
pc
=
context
.
getRegisterAsAddress
(
X86ThreadContext
.
EIP
);
if
(
pc
==
null
)
return
null
;
return
new
X86CFrame
(
this
,
ebp
,
pc
);
return
new
WindowsX86CFrame
(
dbg
,
ebp
,
pc
);
}
else
if
(
dbg
.
getCPU
().
equals
(
"amd64"
))
{
AMD64ThreadContext
context
=
(
AMD64ThreadContext
)
thread
.
getContext
();
Address
rbp
=
context
.
getRegisterAsAddress
(
AMD64ThreadContext
.
RBP
);
if
(
rbp
==
null
)
return
null
;
Address
pc
=
context
.
getRegisterAsAddress
(
AMD64ThreadContext
.
RIP
);
if
(
pc
==
null
)
return
null
;
return
new
AMD64CFrame
(
this
,
rbp
,
pc
);
return
new
WindowsAMD64CFrame
(
dbg
,
rbp
,
pc
);
}
else
{
// unsupported CPU!
return
null
;
...
...
agent/src/share/classes/sun/jvm/hotspot/debugger/
cdbg/basic/amd64/
AMD64CFrame.java
→
agent/src/share/classes/sun/jvm/hotspot/debugger/
windows/amd64/Windows
AMD64CFrame.java
浏览文件 @
170a4dca
...
...
@@ -22,26 +22,26 @@
*
*/
package
sun.jvm.hotspot.debugger.
cdbg.basic
.amd64
;
package
sun.jvm.hotspot.debugger.
windows
.amd64
;
import
sun.jvm.hotspot.debugger.*
;
import
sun.jvm.hotspot.debugger.amd64.*
;
import
sun.jvm.hotspot.debugger.cdbg.*
;
import
sun.jvm.hotspot.debugger.cdbg.basic.*
;
import
sun.jvm.hotspot.debugger.windbg.*
;
/** Basic AMD64 frame functionality providing sender() functionality. */
public
class
AMD64CFrame
extends
BasicCFrame
{
public
class
WindowsAMD64CFrame
extends
BasicCFrame
{
private
Address
rbp
;
private
Address
pc
;
private
static
final
int
ADDRESS_SIZE
=
8
;
/** Constructor for topmost frame */
public
AMD64CFrame
(
C
Debugger
dbg
,
Address
rbp
,
Address
pc
)
{
super
(
dbg
);
public
WindowsAMD64CFrame
(
Windbg
Debugger
dbg
,
Address
rbp
,
Address
pc
)
{
super
(
dbg
.
getCDebugger
()
);
this
.
rbp
=
rbp
;
this
.
pc
=
pc
;
this
.
dbg
=
dbg
;
}
public
CFrame
sender
(
ThreadProxy
thread
)
{
...
...
@@ -52,15 +52,20 @@ public class AMD64CFrame extends BasicCFrame {
return
null
;
}
// Check alignment of rbp
if
(
dbg
.
getAddressValue
(
rbp
)
%
ADDRESS_SIZE
!=
0
)
{
return
null
;
}
Address
nextRBP
=
rbp
.
getAddressAt
(
0
*
ADDRESS_SIZE
);
if
(
nextRBP
==
null
)
{
if
(
nextRBP
==
null
||
nextRBP
.
lessThanOrEqual
(
rbp
)
)
{
return
null
;
}
Address
nextPC
=
rbp
.
getAddressAt
(
1
*
ADDRESS_SIZE
);
if
(
nextPC
==
null
)
{
return
null
;
}
return
new
AMD64CFrame
(
dbg
()
,
nextRBP
,
nextPC
);
return
new
WindowsAMD64CFrame
(
dbg
,
nextRBP
,
nextPC
);
}
public
Address
pc
()
{
...
...
@@ -70,4 +75,6 @@ public class AMD64CFrame extends BasicCFrame {
public
Address
localVariableBase
()
{
return
rbp
;
}
private
WindbgDebugger
dbg
;
}
agent/src/share/classes/sun/jvm/hotspot/debugger/
cdbg/basic/x86/
X86CFrame.java
→
agent/src/share/classes/sun/jvm/hotspot/debugger/
windows/x86/Windows
X86CFrame.java
浏览文件 @
170a4dca
...
...
@@ -22,26 +22,26 @@
*
*/
package
sun.jvm.hotspot.debugger.
cdbg.basic
.x86
;
package
sun.jvm.hotspot.debugger.
windows
.x86
;
import
sun.jvm.hotspot.debugger.*
;
import
sun.jvm.hotspot.debugger.x86.*
;
import
sun.jvm.hotspot.debugger.cdbg.*
;
import
sun.jvm.hotspot.debugger.cdbg.basic.*
;
import
sun.jvm.hotspot.debugger.windbg.*
;
/** Basic X86 frame functionality providing sender() functionality. */
public
class
X86CFrame
extends
BasicCFrame
{
public
class
WindowsX86CFrame
extends
BasicCFrame
{
private
Address
ebp
;
private
Address
pc
;
private
static
final
int
ADDRESS_SIZE
=
4
;
/** Constructor for topmost frame */
public
X86CFrame
(
C
Debugger
dbg
,
Address
ebp
,
Address
pc
)
{
super
(
dbg
);
public
WindowsX86CFrame
(
Windbg
Debugger
dbg
,
Address
ebp
,
Address
pc
)
{
super
(
dbg
.
getCDebugger
()
);
this
.
ebp
=
ebp
;
this
.
pc
=
pc
;
this
.
dbg
=
dbg
;
}
public
CFrame
sender
(
ThreadProxy
thread
)
{
...
...
@@ -52,15 +52,20 @@ public class X86CFrame extends BasicCFrame {
return
null
;
}
// Check alignment of ebp
if
(
dbg
.
getAddressValue
(
ebp
)
%
ADDRESS_SIZE
!=
0
)
{
return
null
;
}
Address
nextEBP
=
ebp
.
getAddressAt
(
0
*
ADDRESS_SIZE
);
if
(
nextEBP
==
null
)
{
if
(
nextEBP
==
null
||
nextEBP
.
lessThanOrEqual
(
ebp
)
)
{
return
null
;
}
Address
nextPC
=
ebp
.
getAddressAt
(
1
*
ADDRESS_SIZE
);
if
(
nextPC
==
null
)
{
return
null
;
}
return
new
X86CFrame
(
dbg
()
,
nextEBP
,
nextPC
);
return
new
WindowsX86CFrame
(
dbg
,
nextEBP
,
nextPC
);
}
public
Address
pc
()
{
...
...
@@ -70,4 +75,6 @@ public class X86CFrame extends BasicCFrame {
public
Address
localVariableBase
()
{
return
ebp
;
}
private
WindbgDebugger
dbg
;
}
make/sa.files
浏览文件 @
170a4dca
...
...
@@ -48,8 +48,6 @@ $(AGENT_SRC_DIR)/sun/jvm/hotspot/debugger/bsd/amd64/*.java \
$(AGENT_SRC_DIR)/sun/jvm/hotspot/debugger/bsd/x86/*.java \
$(AGENT_SRC_DIR)/sun/jvm/hotspot/debugger/cdbg/*.java \
$(AGENT_SRC_DIR)/sun/jvm/hotspot/debugger/cdbg/basic/*.java \
$(AGENT_SRC_DIR)/sun/jvm/hotspot/debugger/cdbg/basic/x86/*.java \
$(AGENT_SRC_DIR)/sun/jvm/hotspot/debugger/cdbg/basic/amd64/*.java \
$(AGENT_SRC_DIR)/sun/jvm/hotspot/debugger/dummy/*.java \
$(AGENT_SRC_DIR)/sun/jvm/hotspot/debugger/linux/*.java \
$(AGENT_SRC_DIR)/sun/jvm/hotspot/debugger/linux/amd64/*.java \
...
...
@@ -70,6 +68,8 @@ $(AGENT_SRC_DIR)/sun/jvm/hotspot/debugger/win32/coff/*.java \
$(AGENT_SRC_DIR)/sun/jvm/hotspot/debugger/windbg/*.java \
$(AGENT_SRC_DIR)/sun/jvm/hotspot/debugger/windbg/amd64/*.java \
$(AGENT_SRC_DIR)/sun/jvm/hotspot/debugger/windbg/x86/*.java \
$(AGENT_SRC_DIR)/sun/jvm/hotspot/debugger/windows/x86/*.java \
$(AGENT_SRC_DIR)/sun/jvm/hotspot/debugger/windows/amd64/*.java \
$(AGENT_SRC_DIR)/sun/jvm/hotspot/debugger/x86/*.java \
$(AGENT_SRC_DIR)/sun/jvm/hotspot/gc_implementation/g1/*.java \
$(AGENT_SRC_DIR)/sun/jvm/hotspot/gc_implementation/parallelScavenge/*.java \
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录