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;
}