仅发出长跳转指令而不是 LLVM 的短跳转指令
Emit only long jump instructions instead of short jump instructions for LLVM
有什么简单的方法可以让 LLVM 不发出 1 字节位移 的短跳转指令,比如
75 30 JNE +30
、eb 1a JMP +1a
等;
而是只发出 4 字节位移 带有 3 字节零填充的跳转指令,比如
0f 85 30 00 00 00 JNE +30
、e9 1a 00 00 00 JMPQ +1a
等,
在 x86_64 架构下?
显然,这会增加代码大小。
在X86AsmBackend.cpp
中有一个函数fixupNeedsRelaxation
。如果你总是 return true 在这里它应该总是放松 e.g.改为全排量。
有什么简单的方法可以让 LLVM 不发出 1 字节位移 的短跳转指令,比如
75 30 JNE +30
、eb 1a JMP +1a
等;
而是只发出 4 字节位移 带有 3 字节零填充的跳转指令,比如
0f 85 30 00 00 00 JNE +30
、e9 1a 00 00 00 JMPQ +1a
等,
在 x86_64 架构下?
显然,这会增加代码大小。
在X86AsmBackend.cpp
中有一个函数fixupNeedsRelaxation
。如果你总是 return true 在这里它应该总是放松 e.g.改为全排量。