__section_begin(".section")
и __section_end(".section")
будут 0, если ни одна часть раздела .section
не включена в окончательный двоичный файл. В вашем случае вы сначала должны убедиться, что раздел .test_case_entries
не пустой, т.е. какой-то модуль в вашем проекте помещает данные в этот раздел. Затем вам нужно заставить компоновщик включить эти данные в окончательный двоичный файл. Это можно сделать, указав ссылку на данные в каком-либо модуле (__section_begin
и __section_end
не учитываются), объявив данные как __root
, или используя --keep
в командной строке компоновщика.
Тестовая программа, которая работает на моем компьютере, включена ниже. Обратите внимание, что файл .icf не является полным, так как большая его часть зависит от вашей целевой системы.
test. c:
#include <stdio.h>
// Make the compiler recognize .section as a section for __section_begin and
// __section_end.
#pragma section = ".section"
void main(void)
{
// Find the start and end address of .section
int *start = __section_begin(".section");
int *stop = __section_end(".section");
printf("section start = %x \n", start);
printf("section end = %x \n", stop);
}
// Put data in .section and make the data root to ensure is is included.
// This can be in a different file.
#pragma location=".section"
__root int data[100];
Часть test.icf
define symbol TEST_start = (0x10080000);
define symbol TEST_end = (0x100DFFFF);
define region TEST_region = mem:[from TEST_start to TEST_end];
place at start of TEST_region {section .section};