Получить переменные адреса в файле карты компоновщика - PullRequest
0 голосов
/ 29 января 2019

В программе для микроконтроллера некоторые регионы должны находиться в специальном разделе памяти.Они были объявлены в исходном файле C как

static int Foo __attribute__((section(".ocm")));

В скрипте компоновщика этот раздел размещен по соответствующему адресу:

MEMORY {
  ram_0 : ORIGIN = 0, LENGTH = 0x100000
  ram_1 : ORIGIN = 0xFFFF0000, LENGTH = 0xFE00
}

SECTION {
.text : {
  //     here are the normal sections
  } > ram_0

.ocm (NOLOAD) : {
    __ocm_start = .;
    *(.ocm)
    __osm_end = .;
  } > ram_1
}

При такой конфигурации все символы включены вфайл карты.Но переменная Foo отсутствует.Атрибут NOLOAD можно применять, поскольку в этом разделе нет инициализированных переменных.Это было необходимо, поскольку вывод ELF подвергается последующей обработке, и этот раздел должен быть исключен из этого процесса.

Как убедить компоновщика включить символы в специальный раздел в файле карты?

1 Ответ

0 голосов
/ 29 января 2019

К сожалению, в компоновщике GNU перечислены только общедоступные символы.Если переменная объявлена ​​как static, поскольку она является закрытой для области видимости файла, она не будет указана в файле карты.Необходимо изменить код, чтобы получить его адрес в файле карты:

int Foo __attribute__((section(".ocm")));
...