Создание именованных разделов для каждой переменной? - PullRequest
0 голосов
/ 26 июля 2011

предположим, у меня есть переменные:

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

Какой самый простой способ сделать это?

Обновление:

Got:

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

вместе с

target_asm_named_section()` 

для генерации:


    .global
    a: 
       .long 1

Это здорово, но есть две проблемы.

Во-первых, если списки не упорядочены по разным разделам, вы получите повторные разделы.

так


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

это хорошо, но


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

плохо, потому что .mmm появится дважды.

Вторая проблема в том, что я уже использую атрибуты для

`__attribute__((global))`

, который, в меру моих попыток, не может быть объединен с предыдущим атрибутом.

Есть ли простой способ решить одну из этих двух проблем?

1 Ответ

0 голосов
/ 03 августа 2011

Решение: Первое использование:

#define MMR <strong>__<em>attribute</em>__</strong>((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 - это фраза, которую вы создали внутри section (""). Затем сопоставьте его с тем, что вы хотите.

Я использую флаги, например:

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

Установленный флаг был целью исходного атрибута _ _ , и теперь, когда это можно сделать с помощью атрибута section, обе цели достигаются с помощью атрибут

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...