Beim Lernen des LLVM-Framework, ich versuche, eine "Optimierung" zu implementieren, die den Namen jeder Methode zur Laufzeit beim Aufruf der Methode druckt.LLVM: Zugriff auf globale Variable von Funktion Pass
ich gelesen, dass globale Variablen nur in einem Modul Pass erstellt werden sollen, und ich erstellen, um die dort Strings (eine pro-Funktion), mit
Constant* data = ConstantDataArray::getString(M.getContext(), F.getName());
GlobalVariable* gvar =
new GlobalVariable(M,
data->getType(),
true,
GlobalValue::ExternalLinkage,
data,
"fname_" + F.getName().str());
Dies funktioniert gut, sofern die Saiten gelegt richtig im Speicher in der Assemblydatei, die durch den 'optimierten' Bitcode erzeugt wird.
Ich habe jedoch keine Möglichkeit gefunden, Aufrufe einzufügen, um diese Zeichenfolgen im Funktionspass zu drucken. Ich möchte
Value* string = F.getValueSymbolTable().lookup("fname_" + F.getName().str());
CallInst* call = builder.CreateCall(emitPutS(string, builder, &TLI));
aber string
kommt zurück als NULL
verwenden. Gibt es eine bessere Möglichkeit, globale Variablen aus einer Funktion nachzuschlagen?