"неопределенная ссылка на _spill": что такое _spill и почему gcc хочет получить к нему доступ?

Я занимаюсь разработкой на собственной встроенной платформе с пользовательской версией gcc, основанной на gcc-2.8.0 (egcs-2.91.02), Да, он старый. Это для ядра CoolRISC C816.

Иногда я сталкиваюсь со странной ошибкой, когда во время ссылки моего встроенного C-проекта gcc выдает мне эту ошибку:

неопределенная ссылка на _spill

Действительно, при просмотре временного файла *.s, сгенерированного gcc при компиляции исходных файлов в этих конкретных случаях, я вижу такую ​​инструкцию:

MOVE __spill + 4,% a

Я удивлен, потому что эта ошибка _spill происходит только время от времени, на нескольких больших проектах (20k+ LOC) нет никаких признаков этой ошибки, и нет никаких ссылок на _spill в файлах *.s.

У меня уже есть исправление, состоящее в выделении _spill в моем файле начальной сборки, но я хотел бы узнать больше об этом.

Что такое "_spill" и зачем оно мне? Кроме того, если мне нужно статически выделить его, как узнать, какой размер я должен дать?

Изменить: Как советовали в комментариях, я посмотрел на соответствующий код C и строка, которая кажется источником пакета инструкций, содержащих _spill, это:

pStruct->psConst->puRegister[CONST_VALUE] = 0x00;

куда pStruct это указатель на структуру typedef (называемую Foo), объявленную локально так: Foo *pStruct = &MyStruct, с MyStruct внешняя переменная типа Foo это в другом файле. psConst является константным указателем на другую структуру typedef (назовите ее Bar). puRegister является членом Бар объявлен типа volatile uint8_t * И наконец, CONST_VALUE является постоянным значением из перечисления.

Следовательно, это может быть проблемой, которая возникает только тогда, когда имеется много разыменований в строке или что-то связанное.

0 ответов

Другие вопросы по тегам