У меня есть небольшая программа, написанная на go, и я пытаюсь выполнить кросс-компиляцию для работы на машине с архитектурой MIPS.Я пытался выполнить кросс-компиляцию с использованием библиотеки кросс-компиляции XGO, но у меня был ограниченный успех при запуске моей программы (https://github.com/karalabe/xgo).
Вот cpuinfo устройства, которое в настоящее время работает под управлением версии openwrt.
system type : Qualcomm Atheros QCA9533 ver 2 rev 0
machine : GL.iNet GL-AR750
processor : 0
cpu model : MIPS 24Kc V7.4
BogoMIPS : 432.53
wait instruction : yes
microsecond timers : yes
tlb_entries : 16
extra interrupt vector : yes
hardware watchpoint : yes, count: 4, address/irw mask: [0x0ffc, 0x0ffc, 0x0ffb, 0x0ffb]
isa : mips1 mips2 mips32r1 mips32r2
ASEs implemented : mips16
shadow register sets : 1
kscratch registers : 0
package : 0
core : 0
VCED exceptions : not available
VCEI exceptions : not available
При запуске программы я получаю недопустимую инструкцию SIGILL из следующего:
Program terminated with signal SIGILL, Illegal instruction.
#0 0x008274a8 in __sigsetjmp_aux ()
Я вижу, что здесь определена __sigsetjmp_aux ()
/usr/lib/gcc-cross/mips-linux-gnu/5/../../../../mips-linux-gnu/lib/../lib/libc.a(setjmp_aux.o): definition of __sigsetjmp_aux
Как я могу убедиться, что все мои зависимости скомпилированы с использованием SOFTFLOAT?
Я передаю xgo следующие переменные окружения, но кажется, что GLIBC не компилируется как soft-float
CC=mips-linux-gnu-gcc-5 CXX=mips-linux-gnu-g++-5 GOOS=linux GOARCH=mips GOMIPS=softfloat CGO_ENABLED=1 CFLAGS=msoft-float
Спасибо за любую помощь, спасибо!
РЕДАКТИРОВАТЬ Вот схема asm
0x8274a4 <__sigsetjmp_aux+4> addiu gp,gp,-19312 │
>│0x8274a8 <__sigsetjmp_aux+8> sdc1 $f20,56(a0) │
│0x8274ac <__sigsetjmp_aux+12> sdc1 $f22,64(a0)