Я пытаюсь создать цель Synthetic Linux с помощью ECOS. Моя программная среда:
- Ubuntu 11.4
- GCC 4.5.2
- ECOS 3.0
В Config Tool я настроил цель Linux Sythetic со всеми пакетами. При нажатии F7 (сборка) начинается компиляция, но позже она говорит:
/ опт / ЭКОС / ЭКОС-3,0 / пакеты / гал / синт / i386linux / v3_0 / SRC / системный вызов-i386linux-1.0.S:
Ассемблер сообщений: make: Leaving
каталог `/ opt / ecos / linux_build '
/opt/ecos/ecos-3.0/packages/hal/synth/i386linux/v3_0/src/syscall-i386-linux-1.0.S:457:
Ошибка: .size выражение для
__restore_rt не оценивает константу
/ опт / ЭКОС / ЭКОС-3,0 / пакеты / гал / синт / i386linux / v3_0 / SRC / системный вызов-i386linux-1.0.S: 457:
Ошибка: .size выражение для __restore
не оценивает константу
делать:
[src / syscall-i386-linux-1.0.o.d] Ошибка 1 make: [build] Ошибка 2
Содержимое файла / opt / ecos / ecos-3.0 / packages / hal / synth / i386linux / v3_0 / src / syscall-i386-linux-1.0.S из строки 434 это:
// ----------------------------------------------------------------------------
// Special support for returning from a signal handler. In theory no special
// action is needed, but with some versions of the kernel on some
// architectures that is not good enough. Instead returning has to happen
// via another system call.
.align 16
.global cyg_hal_sys_restore_rt
cyg_hal_sys_restore_rt:
movl $SYS_rt_sigreturn, %eax
int $0x80
1:
.type __restore_rt,@function
.size __restore_rt,1b - __restore_rt
.align 8
.global cyg_hal_sys_restore
cyg_hal_sys_restore:
popl %eax
movl $SYS_sigreturn, %eax
int $0x80
1:
.type __restore,@function
.size __restore,1b - __restore
Таким образом, __ restore и __ restore_rt не определены.
Я пытался закомментировать эту часть и удалить пакеты, связанные с сигналами (там написано, что это обработчик сигналов), но, похоже, это базовая часть ядра ECOS; сборка кажется успешной, когда части закомментированы, но когда я компилирую примеры приложений, возникает ошибка компоновщика из-за отсутствующих символов (cyg_hal_sys_restore).
Глупая идея, но я пытался заменить "__restore" на "cyg_hal_sys_restore"
и "... rt" таким же образом, просто для исключения undefs (не очень надеясь, что неправильный код не вызовет ошибок), и результат таков: сборка в порядке (так как нет undefs), компиляция примера в порядке ( как отсутствующие символы), но пример a.out выбрасывает segfault как раз в тот святой момент, когда я его запускаю.
Хэлп, пожалуйста, я не знаком ни с inline asm, ни с ECOS.