2013-10-09 6 views
0

Привет Я пытаюсь определить пользовательский раздел в моем сценарии компоновки в следующем виде:Добавление раздела в GNU сценарии компоновки

.version_section(__custom_data__) : 
    { 
     KEEP (*version_info.o (.rodata* .data* .sdata*)) 
    } 

Я компиляции файл C, который содержит структуру, и я хочу эту структуру всегда сохраняться в этой версии.

version_info ver_info __attribute__ ((section(".version_section"))) = {7, 10, 2013, 17, 17, "some_type", "some_sw_version", "some_version"} ; 

Теперь, пока на этом этапе все работает нормально. Но в сгенерированном разделе есть флаги «AW», однако мне нужны флаги как «A».

Так я использую файл ассемблера, который определил этот раздел, чтобы иметь «A» флаг вроде этого:

.section .version_section,"a", @progbits 
.align 8 
.globl __custom_data__ 
.type __custom_data__, @function 

__custom_data__: 
    .word 0 
    .size __custom_data__, .-__custom_data__ 
    .space (0x1024-0x4), 0 

Но я все еще вижу флаги по умолчанию на version_section, то есть. AW in readelf

[11] .version_section PROGBITS  00011088 004088 001044 00 WA 0 0 8 

Что я здесь делаю неправильно?

+1

В этом случае означает «записываемый» W? Если это так, вы можете сделать это «A», добавив 'const' в определение структуры. – ldav1s

+0

Спасибо, чувак. Это сработало. Вы должны добавить это как ответ. –

+0

ОК. Я добавил его в качестве ответа. – ldav1s

ответ

0

Похоже, что «W» означал запись в readelf выводах, как я подозревал. Добавление квалификатора const в определение ver_info переместило его в желаемый сегмент в памяти.