gpt4 book ai didi

java - 为什么 JDK 的 BREAKPOINT 在 ARM 上定义给定的特殊值?

转载 作者:行者123 更新时间:2023-11-30 11:14:44 26 4
gpt4 key购买 nike

这里是jdk中的断点代码。

#ifdef ARM
#ifdef SOLARIS
#define BREAKPOINT __asm__ volatile (".long 0xe1200070")
#else
#define BREAKPOINT __asm__ volatile (".long 0xe7f001f0")
#endif
#else
extern "C" void breakpoint();
#define BREAKPOINT ::breakpoint()
#endif

我想知道'.long 0xe1200070'和'.long 0xe7f001f0'是否有特殊含义?

最佳答案

将 HotSpot 移植到 ARM 时,我发现内联断点比调用外部 breakpoint() 函数更有用。如果 JVM 到达这个地方,就会有一个有意义的崩溃上下文:附近的指令和相关的寄存器值。

.long 0xe7f001f0 是未定义指令的编码。 ARM 0x.7f...f. 指令空间被保留以产生未定义的指令异常。显然它没有助记符,因此是数字文字。 GDB 在 arm-eabi 上对断点使用相同的操作码。

.long 0xe1200070 是手动编码的 BKPT 操作码。我没有见过 Solaris/ARM 平台,但我想这就是断点通常在那里编码的方式。

关于java - 为什么 JDK 的 BREAKPOINT 在 ARM 上定义给定的特殊值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25799913/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com