2011-07-26 18 views
0

は、私は、変数があるとします。変数ごとに名前付きセクションを作成しますか?

int global a = 1; 

int banana b = 2; 

int mango c = 3; 

私はGCCは彼らがそのようなことを生成したい:

.global 
a .long 1 
.banana 
b .long 2 
.mango 
c .long 3 

それを行うための最も簡単な方法は何ですか?

更新:

ガット:

target_asm_named_section()`

とともに

 __attribute__ ((section ("mmm"))) int a = 432;`

生成する:

 

    .global 
    a: 
     .long 1 

素晴らしいですが、2つの問題があります。

リストが異なるセクションに注文されていない限り、リピートセクションが表示されます。

ので

 

    __attribute__ ((section ("mmm"))) int a = 432; 
    __attribute__ ((section ("mmm"))) int b = 432; 
    __attribute__ ((section ("global"))) int c = 432; 

は良いですが、.MMMが2回表示されますので、

 

    __attribute__ ((section ("mmm"))) int a = 432; 
    __attribute__ ((section ("global"))) int c = 432; 
    __attribute__ ((section ("mmm"))) int b = 432; 

は、悪いです。

第二の問題は、私はすでに私の試みの最高に以前の属性と組み合わせることはできません、

`__attribute__((global))`

を行うには、属性を使用しているということです。

これらの2つの問題のいずれかを解決する簡単な方法はありますか?

答えて

0

ソリューション: 最初の使用:

#define MMR __attribute__((section ("section mmr")))

その後、経由して文字列に

#define TARGET_ENCODE_SECTION_INFO
ナビゲートを定義関数内:

#define ATTRIBUTES(decl) \ 
     (TYPE_P (decl)) ? TYPE_ATTRIBUTES (decl) \ 
        : DECL_ATTRIBUTES (decl) \ 
         ? (DECL_ATTRIBUTES (decl)) \ 
       : TYPE_ATTRIBUTES (TREE_TYPE (decl)) 
    tree attr = ATTRIBUTES(decl); 
    char* section_name = TREE_STRING_POINTER(TREE_VALUE(TREE_VALUE(attr))); 

そしてヴィオラ、SECTION_NAMEあなたはセクション内で作成フレーズです( "")。それから、あなたがやりたいことに合ってください。

私は、たとえばフラグを使用

if(strcmp(section_name, "apple") == 0) 
    { 
    flags |= SYMBOL_FLAG_APPLE; 
    } 

設定されているフラグは、元の目標_ 属性 _だった、と今ではセクション属性を使用して行うことができること、両方の目標であります1つの属性を使用して達成される。

関連する問題