Ошибка 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 КБ памяти (часть которого, вероятно, будет частью ядра задания, кода и данных).

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