Ошибка SPU ячейки в C
Когда я компилирую программу SPU, я получаю следующую ошибку компиляции:
(.text+0x28): relocation truncated to fit: SPU_ADDR18 against symbol `_end' defined in *ABS* section in spu
Что это значит?
Ошибка появляется только после того, как я включил в самом начале:
#define CACHE_NAME MY_CACHE
#define CACHED_TYPE double
#define CACHELINE_LOG2SIZE 11
#define CACHE_LOG2NWAY 2
#define CACHE_LOG2NSETS 4
#include <cache-api.h>
2 ответа
Ошибка означает:
объект ссылается на символ "_end", используя режим перемещения SPU_ADDR18
фактический адрес символа '_end' слишком велик для используемого режима ссылки.
_end
является символом, традиционно определяемым в конце кода и сегмента данных. Поэтому, скорее всего, у вас больше кода и статических данных, чем в поддержке SPU. (SPU поддерживает 256 Кбайт, что составляет 18 бит адреса, поэтому я предполагаю, что тип перемещения SPU_ADDR18 является наиболее гибким).
Ошибка означает, что создаваемый вами исполняемый файл elf не помещается в память SPU; вероятно, потому что cache-api.h
заголовок определяет некоторые статические / глобальные переменные. Обратите внимание, что ваш исполняемый файл не может использовать более 251 КБ памяти (часть которого, вероятно, будет частью ядра задания, кода и данных).