es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo crear una variable global como “dso_local” en el generador de LLVM IR para C++?

Estoy tratando de crear una variable global que se vea como sigue utilizando el constructor de IR de LLVM en C++:

@test = dso_local global i8* null, align 8

El problema es cuando creo una variable global usando el siguiente código en C++:

c++
auto global_variable = TheModule->getOrInsertGlobal("gvar", llvm::Type::getInt8PtrTy(TheContext))

No hay opciones que me permitan establecer la variable global en la sintaxis deseada. Me gustaría saber cómo puedo crear esa variable global utilizando el constructor de IR de LLVM en C++.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para crear una variable global con la sintaxis deseada utilizando el generador LLVM IR para C++, puedes usar el siguiente código:

    “`c++
    // Crear el valor nulo
    llvm::Constant* initializer = llvm::Constant::getNullValue(llvm::Type::getInt8PtrTy(TheContext));
    // Crear la variable global con el nombre, tipo e inicializador deseado
    auto global_variable = new llvm::GlobalVariable(*TheModule, llvm::Type::getInt8PtrTy(TheContext), false, llvm::GlobalValue::LinkageTypes::ExternalLinkage, initializer, “@test”);
    // Establecer la alineación en 8
    global_variable->setAlignment(llvm::MaybeAlign(8));
    // Establecer la bandera DSO local
    global_variable->setDSOLocal(true);


    Este código utiliza el método `llvm::Constant::getNullValue` para crear el valor nulo para el tipo `i8*`, el cual es el inicializador de la variable global. Luego crea la variable global utilizando el constructor `llvm::GlobalVariable`, el cual recibe como argumentos el módulo LLVM, el tipo, el enlace, el inicializador y el nombre. Establece la alineación en 8 utilizando el método `setAlignment`, y establece la bandera DSO local utilizando el método `setDSOLocal`. Esto debería crear una variable global con la sintaxis deseada: ```llvm @test = dso_local global i8* null, align 8

Comments are closed.