2016-05-14 11 views
2

コンパイルするプログラムのドメイン固有の分析を行うGCCプラグインを作成しようとしています。私は、生成されたオブジェクトファイルにある種のメタデータ(デバッグ情報など)として解析結果を埋め込む最良の方法については疑問に思っています。GCCプラグインからオブジェクトファイルにメタデータを埋め込む方法

理想的には、各オブジェクトファイルにいくつかのメタデータ(私の場合はテキスト)を埋め込む必要があります。リンカーはリンクしているすべてのオブジェクトのデータを保持する必要があります。最終バイナリはobjdump,readelfまたはそれに類するものを使用します。

私の現在のアイデアは、GIMPLE ASTに追加することで、各コンパイル単位に一意の名前のグローバル文字列変数を追加しようとしています。しかし、もっと規律のある方法があるのだろうかと思っています。プラグインはデバッグ情報や他のそのようなメタデータをどのように生成できますか?

答えて

0

私はグローバル変数を作成する方法については、この回答に基づいて、自分自身に予備的な答えを与えている:Insert global variable declaration whit a gcc plugin

このコードは、単にバイナリで変数varnameとして長さsizeの文字列my_stringを埋め込むために動作するようです:

// 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; 
関連する問題