У меня есть следующий код 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" во всех возможных местах не заставляет компилятор не выплевывать ш». Как я могу сказать компилятору "нет, правда, это const, я не шучу"?