Gcc 是否为每个变量创建命名节?

Gcc 是否为每个变量创建命名节?,gcc,compiler-construction,Gcc,Compiler Construction,假设我有变量: 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 最简单的方法是什么 更新: 得到: __属性a=432` 连同 target_asm_named_section()` 目标_asm_命名为_section()` 生成: .global a: .long 1

假设我有变量:

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
最简单的方法是什么

更新:

得到:

__属性a=432` 连同

target_asm_named_section()` 目标_asm_命名为_section()` 生成:

.global a: .long 1 .全球 a: .long 1 这很好,但有两个问题

一个是,除非列表针对不同的部分进行排序,否则您将得到重复的部分

所以

__属性a=432; __属性(节(“mmm”))int b=432; __属性(节(“全局”))int c=432; 很好,但是

__attribute__ ((section ("mmm"))) int a = 432; __attribute__ ((section ("global"))) int c = 432; __attribute__ ((section ("mmm"))) int b = 432; __属性a=432; __属性(节(“全局”))int c=432; __属性(节(“mmm”))int b=432; 不好,因为.mmm将出现两次

第二个问题是,我已经在使用属性来

`__attribute__((global))` `__属性(全局)` 尽我所能,它不能与前一个属性组合

有什么简单的方法可以解决这两个问题中的任何一个吗?

解决方案: 首次使用: #define MMR __attribute__((section ("section mmr"))) 而viola,section_名称是您在section(“”)中创建的短语。然后将它与您希望它做的事情相匹配

我使用标志,例如:

  if(strcmp(section_name, "apple") == 0)
  {
     flags |= SYMBOL_FLAG_APPLE;
  }
设置的标志是原始\u属性的目标,现在可以使用section属性进行设置,使用一个属性即可实现两个目标

#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)));
  if(strcmp(section_name, "apple") == 0)
  {
     flags |= SYMBOL_FLAG_APPLE;
  }