我想在LLVM中创建一个函数,该函数从存储指令获取指向任意内存的指针。例如:
%x = alloca i32, align 4
%z = alloca i32*, align 8
store i32 123, i32* %x, align 4
store i32* %x, i32** %z, align 8
在这里,我想检测存储指令以使用内存指针调用一个函数,这些指针曾经是i32 *类型,一类是i32 **类型。我只需要第一个指针"记忆,我不需要取消指针或获取其类型信息。所以,我需要一个类似于C中的void指针的数据类型。
我如何在LLVM中执行此操作?
答案 0 :(得分:1)
以下是将%x
和%y
同时投放到void*
%x = alloca i32, align 4
%y = alloca i32*, align 8
store i32 123, i32* %x, align 4
store i32* %x, i32** %y, align 8
; Convert x to void*
%1 = bitcast i32* %x to i8*
call void @instrument(i8* %1)
; Convert y to void*
%2 = load i32*, i32** %y, align 8
%3 = bitcast i32* %2 to i8*
call void @instrument(i8* %3)