2016-05-14 8 views
2

Ich versuche ein GCC-Plugin zu schreiben, das einige domänenspezifische Analysen der Programme durchführt, die es kompiliert. Ich frage mich, wie die Analyseergebnisse am besten als eine Art von Metadaten (wie Debug-Informationen) in die generierten Objektdateien eingebettet werden können.Wie man Metadaten in die Objektdatei von GCC-Plugin einbetten

Idealerweise sollten einige Metadaten (in meinem Fall Text) in jede Objektdatei eingebettet sein, der Linker sollte die Daten aller Objekte behalten, die er verbindet, und schließlich sollte ich eine Möglichkeit haben, auf alle Metadaten zuzugreifen endgültige binäre Verwendung objdump, readelf oder ähnlich.

Meine aktuelle Idee ist, zu versuchen, ein eindeutiger Namen globalen String-Variable für jede Übersetzungseinheit hinzufügen, indem sie sie an dem GIMPLE AST Zugabe. Ich frage mich jedoch, ob es einen "disziplinierteren" Weg gibt; Wie können Plugins Debug-Informationen oder andere solche Metadaten erzeugen?

Antwort

0

ich mir eine vorläufige Antwort gäbe, auf der Grundlage dieser Antwort, wie eine globale Variable zu erstellen: Insert global variable declaration whit a gcc plugin

Dieser Code scheint nur für das Einbetten einen String my_string der Länge size als variable varname im binären zu arbeiten :

// make a char array type 
type = build_array_type_nelts(char_type_node, size); 

// create the variable and set its name 
var = add_new_static_var(type); 
name = get_identifier(varname); 
DECL_NAME(var) = name; 

// make sure this is a definition (otherwise GCC optimizes it away!) 
TREE_PUBLIC(var) = 1; 

// initialize the variable to a string value 
initializer = build_string_literal(size, my_string); 
DECL_INITIAL(var) = initializer;