Attualmente sto lavorando a uno strumento che identifica il carico e memorizza gli accessi su variabili globali e di campo su programmi arbitrari. Inoltre, le variabili accessibili dovrebbero essere identificate dai loro nomi/identificatori del livello sorgente. Per ottenere ciò, compilo il codice sorgente del programma sotto diagnosi in LLVM IR con informazioni di debug. Fin qui tutto bene, i nodi di metadati generati contengono gli identificatori del livello di origine desiderati. Tuttavia, non sono in grado di tracciare connessioni con alcuni identificatori IR LLVM e le informazioni nei metadati.IR LLVM: identificazione di variabili con nodi di metadati
Ad esempio, si consideri un membro satic di una classe:
class TestClass {
public:
static int Number;
};
La corrispondente LLVM IR si presenta così:
@_ZN12TestClass6NumberE = external global i32, align 4
...
!15 = !DIDerivedType(tag: DW_TAG_member, name: "Number", scope: !"_ZTS12TestClass", file: !12, line: 5, baseType: !16, flags: DIFlagPublic | DIFlagStaticMember)
In questo esempio controllato so che "@ _ZN12TestClass6NumberE" è un identificatore per "Numero". Tuttavia, in generale, non riesco a vedere come posso scoprire quali identificatori IR corrispondono a quali metadati.
Qualcuno può darmi una mano?