gpt4 book ai didi

c - 如何摆脱 C 代码中的 gcc 汇编器警告 "setting incorrect section attributes for .init"?

转载 作者:太空宇宙 更新时间:2023-11-04 02:20:24 29 4
gpt4 key购买 nike

我有以下 C 代码:

struct myStruct_t
{
const char m_name[60];
const uint32_t m_data;
};

const struct myStruct_t myStruct
__attribute__(( __aligned__( 64 ), section(".init") )) =
{
"myName",
(uint32_t)&someOtherStruct
};

当我在 gcc 4.1.1(适用于 PS3)中编译时,我收到警告:

1>c:/t/ccy6.s: Assembler messages:
1>c:/t/ccy6.s(106): Warning: setting incorrect section attributes for .init

警告指向的汇编代码是下面的“.section”子句:

            .section              .init,"aw",@progbits
.align 6
.type myStruct , @object
.size myStruct , 64
myStruct :
.ascii "myName"
.long someOtherStruct

它不喜欢标志的“w”(可写)部分,因为 .init 中的内容是只读的,并且所有可能位置的“const”不会强制编译器不吐出“w”。我如何告诉编译器“不,真的,它是 const,我不是在开玩笑”?

最佳答案

这是 GCC 自动指定 .section 指令参数的问题。幸运的是,部分名称参数被直接复制到程序集输出中,让您可以解决这个问题。

这个指令:

__attribute__ ((section(".init")))

生成这个程序集:

.section .init,"aw",@progbits

要删除警告,您可以像这样指定属性:

__attribute__ ((section(".init,\"ar\",@progbits ;")))

这将生成:

.section .init,"ar",@progbits ;"aw",@progbits

分号将行的其余部分标记为注释,因此汇编程序会忽略它。

关于c - 如何摆脱 C 代码中的 gcc 汇编器警告 "setting incorrect section attributes for .init"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/745213/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com