Java 为什么JDK';断点在ARM上定义给定的特殊值?

Java 为什么JDK';断点在ARM上定义给定的特殊值?,java,jvm,breakpoints,Java,Jvm,Breakpoints,以下是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 ::breakpoin

以下是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”是否有特殊含义?

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

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

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