如何使用llvm内部函数@ llvm.read_register? [英] how to use llvm intrinsics @llvm.read_register?
问题描述
我注意到 llvm.read_register()
可以读取堆栈指针的值,以及 llvm.write_register()
可以设置堆栈指针的值.我将主要功能添加到 stackpointer.ll
中,该功能可以在llvm src中找到:
I noticed that llvm.read_register()
could read the value of stack pointer, as well as llvm.write_register()
could set the value of stack pointer. I add main function to the stackpointer.ll
which could be found in the llvm src:
;stackpointer.ll
define i32 @get_stack() nounwind {
%sp = call i32 @llvm.read_register.i32(metadata !0)
ret i32 %sp
}
declare i32 @llvm.read_register.i32(metadata) nounwind
!0 = metadata !{metadata !"sp\00"}
define i32 @main() {
%1 = call i32 @get_stack()
ret i32 %1
}
我在运行ubuntu 11.04的armv7板上进行了测试:
I tested on an armv7 board running ubuntu 11.04:
lli stackpointer.ll
然后,我得到了一个堆栈转储:
then, I get a stack dump:
ARMCodeEmitter::emitPseudoInstruction
UNREACHABLE executed at ARMCodeEmitter.cpp:847!
Stack dump:
0. Program arguments: lli stackpointer.ll
1. Running pass 'ARM Machine Code Emitter' on function '@main'
Aborted
我也尝试过llc:
llc stackpointer.ll -o stackpointer.s
错误消息:
Can't get register for value!
UNREACHABLE executed at ARMCodeEmitter.cpp:1183!
Stack dump:
0. Program arguments: llc stackpointer.ll -o stackpointer.s
1. Running pass 'Function Pass Manager' on moulude 'stackpointer.ll'
2. Running pass 'ARM Instruction Selection' on function '@get_stack'
Aborted
我也在x86-64平台上尝试过,但是没有用.使用这些内在函数的正确方法是什么?
I also tried on x86-64 platform, it didn't work. What is the correct way to use these intrinsics?
推荐答案
我的lli不喜欢您的元数据定义.
My lli didn't like your metadata definition.
我喜欢你的
!0 =元数据!{metadata!"sp \ 00"}
到
!0 = !{!"sp\00"}
它奏效了.(好吧,因为我使用的是x86-64,所以我也到处都将i32更改为i64,将sp更改为rsp.)
And it worked. (Well, since I'm on x86-64, I have also changed everywhere i32 to i64 and sp to rsp).
此外,您的格式中有错误的空格符号,但我认为这可能是由于StackOverflow/html或其他原因造成的.
Plus there were bad whitespace symbols in your formatting, but I think it might be due to StackOverflow/html or something).
这篇关于如何使用llvm内部函数@ llvm.read_register?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!