Ошибка обработки раздела памяти - PullRequest
8 голосов
/ 16 апреля 2010

Я получаю ошибку времени ссылки:

WARNING: /home/gulevich/development/camac-fedorov/camac/linux/k0607-lsi6/camac-k0607-lsi6.o (.ctors): unexpected non-allocatable section.
Did you forget to use "ax"/"aw" in a .S file?
Note that for example <linux/init.h> contains
section definitions for use in .S files.

Код, вызвавший ошибку (сборка в источнике C):

# if   defined(__ELF__)
#  define __SECTION_FLAGS ", \"aw\" , @progbits"
 /* writable flag needed for ld ".[cd]tors" sections bug workaround) */
# elif defined(__COFF__)
#  define __SECTION_FLAGS ", \"dr\""
 /* untested, may be writable flag needed */
# endif


asm
(
 ".section .ctors" __SECTION_FLAGS "\n"
 ".globl __ctors_begin__\n"
 "__ctors_begin__:\n"
 ".previous\n"
);

Есть ли способ это исправить? Идея состоит в том, чтобы поместить varaible __ctors_begin__ в начале определенного раздела памяти. Этот код является наследием, которое отлично работало, используя другую систему сборки и старый компилятор.

Значение этого кода сборки объяснено в ответе на мой предыдущий вопрос .

Ответы [ 4 ]

1 голос
/ 25 апреля 2010

очень длинный выстрел, но раздел .ctors определен так, как вы хотите в скрипте компоновщика? В ld iirc есть подробный параметр для отображения сценария компоновщика.

0 голосов
/ 20 июля 2010

Разделы работают нормально. Поэтому я проигнорирую это предупреждение.

0 голосов
/ 22 апреля 2010

Я хотел бы проверить значение __SECTION_FLAGS, чтобы убедиться, что оно действительно содержит топор или aw. Я также был бы уверен, что __COFF__ не определено, а __ELF__. Если это не удастся, возможно, настало время получить (возможно) предыдущую или будущую версию компилятора / компоновщика и посмотреть, решит ли это вашу проблему. Возможно, вы могли бы скомпилировать свой код как C ++ и как-нибудь позволить скрипту компилятора / линкера / ссылки делать то, что они должны делать? Не знаю полностью, но это то, с чего я бы начал.

0 голосов
/ 20 апреля 2010

Длинный выстрел: Возможно, ваш компоновщик ожидает формат ELF (вместо COFF), и по какой-то причине __ELF__ не определен? Вы проверили вывод препроцессора для этой конкретной сборки?

...