LLVM使用void指针arg创建函数

时间:2016-09-03 17:46:01

标签: llvm

我想在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中执行此操作?

1 个答案:

答案 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)