У меня есть следующий код 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, я не шучу»?