LLVM 使用 void 指针 arg 创建函数
LLVM create function with void pointer arg
我想在 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** 类型。我只需要 "first pointer" 到内存,我不需要取消引用指针或获取其类型信息。所以,我需要一个类似于 C 中的 void 指针的数据类型。
我如何在 LLVM 中做到这一点?
这是将 %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)
我想在 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** 类型。我只需要 "first pointer" 到内存,我不需要取消引用指针或获取其类型信息。所以,我需要一个类似于 C 中的 void 指针的数据类型。
我如何在 LLVM 中做到这一点?
这是将 %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)