【问题标题】:LLVM create function with void pointer argLLVM 使用 void 指针 arg 创建函数
【发布时间】:2017-01-11 14:11:59
【问题描述】:

我想在 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 中做到这一点?

【问题讨论】:

  • bitcast 从 i32* 到 i8*?
  • 如果没有类似 void* 的类型,那么将每个指针强制转换为 i8* 可能是最好的解决方案。你可以回答

标签: llvm


【解决方案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)

【讨论】:

    猜你喜欢
    • 2013-11-14
    • 2023-03-22
    • 2020-09-08
    • 1970-01-01
    • 2016-11-23
    • 2020-06-11
    • 1970-01-01
    • 2013-05-21
    • 1970-01-01
    相关资源
    最近更新 更多