Я изучаю код ядра Linux и наткнулся на эту строку кода:
#define __init_task_data __attribute__((__section__(".data..init_task"))).
Я знаю, что-то вроде:
int x __attribute__((__section__("section"))) = 10;
- это атрибут gcc, который помещает символ x в раздел "section" скомпилированного образа процесса. Однако, когда я пытаюсь указать «.data..init_task» в качестве раздела, моя переменная помещается в раздел .data. Вот мой код:
int apple __attribute__((__section__(".data..init_task"))) = 10;
Составлено с:
gcc test.c
Разобрано с помощью:
objdump -D a.out
Моя переменная "apple" появляется под разделом .data, там нет раздела ".data..init_task", что поставило меня в тупик.