Porting packages to MIPS (Galego)
Esta páxina mostra algúns problemas e posibles solución ao portar paquetes do Parabola para MIPS.
Contents
1 Antes de tentar correxilo
- Verificar se o problema ocorre coa versión máis recente do paquete
- No caso de que sexan erros de compilación, verificar isto tamén no x86_64, normalmente, o erro ocorrerá e será mais rápido para correxir
- Verificar se outras distros que soporte MIPS n32 ten un patch para él
- verificar se existen correccións opcionais, patches ou bugs reportados para MIPS o32, SPARC ou outras arquitecturas
- Se é observado en tempo de execución, verifique se o paquete ten probas automaticas que da mesma forma falle.
2 Vinculando con bibliotecas estáticas
Ocorreu o seguinte erro ao compilar um pacote:
/usr/bin/ld: /usr/lib/gcc/mips64el-unknown-linux-gnu/4.5.2/../../../libc-client.a(osdep.o): \ relocation R_MIPS_HI16 against `__gnu_local_gp' can not be used when making a shared object; recompile with -fPIC
O bug está no paquete que contén a biblioteca mencionada, neste caso o imap (pacman -Qo /usr/lib/gcc/mips64el-unknown-linux-gnu/4.5.2/../../../libc-client.a
encontra o nome do pacote).
Unha solución adecuada seria conseguir que as bibliotecas sexan compartidas en vez de ser estáticas.
3 Erro de bus durante a execución do paquete
Aceso a datos non aliñados causa ese erro. Se o paquete funciona no o32 e típicas arquitecturas de 64 bits que require aliñamento. o problema é que os paquetes teñen probablemente o dobre aliñado con 4 bytes en vez de 8.
Utilice o gdb para localizar o código que está causando o problema, e dicir, facer un punteiro desaliñado e pasalo ao código utilizando como unha estructura que contén un duplo. O problema seria correxido engadindo recheo para facer esta estructura aliñada a 8 bytes.
Exemplo de relatório de bugs upstream: [1].
4 Instrucción "ilegal" ao executar o paquete
Utilice o gdb para desmontar o código. Instrucións de como madd.s
causa isto cando é utilizado cun NaN nun argumento.
Unha solución simple consiste en compilar o paquete con-march = mips3 </ code> en vez de CFLAGS-march = <code> loongson2f </ code>, asi deste xeito as instrucións non serán utilizadas.
Exemplo: Issue#143.
5 Vinculador fora de memória
Isto é máis comun cando os símbolos de depuración estan habilitados (<code>-ggdb in CFLAGS). O vinculador escribe que non pode asignar a memória, ou apenas falla con violación de segmentación.
Engadindo -Wl,--reduce-memory-overhead -Wl,--no-keep-memory
para LDFLAGS fai utilizar menos memória, correxindo o problema en polo menos un caso. Isto fai a vinculación máis lenta, por iso non debe ser activado cando non sexa necessária.
Exemplo: Issue#91.
6 soelim
ou outro comando non encontrado por configure
Non hai nada específico en MIPS deste problema, isto é causado por paquetes Arch que foran construídos nun chroot non limpo, tendo así os paquetes instalados non especificados no depends
ou makedepends
.
Engada o pacote proporcionando o comando que faltaba para makedepends
.
Às vezes, un paquete está faltando a pesar de estar no grupo base
ou base-devel
, isto deberia esta soamente instalado no chroot. Se isto está sendo removido por libremakepkg -c
, entón o paquete (ou dependência) debe ser engadido ao /etc/libretools.d/cleansystem
(e un bug debe ser comunicado).
7 config.guess
non está recoñecendo a arquitectura
Pase o argumento --build=$CHOST
ou --host=$CHOST
para ./configure
, dependendo da mensaxe de erro. Nuns casos raros --target=$CHOST
debe ser utilizado, pero isto é probablemente un bug no paquete de programas xa que a maioria non ten un sistema de destino (apenas é util para compiladores).