Porting packages to MIPS (Galego) - ParabolaWiki

# Porting packages to MIPS (Galego)

Esta páxina mostra algúns problemas e posibles solución ao portar paquetes do Parabola para MIPS.

## 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.

## 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).

Note: Como no x86_64, o mips64el esixe compilar bibliotecas compartidas con -fPIC, pero neste caso vinculando unha biblioteca compartida con unha estática, xa foi tentado anteriormente e fallado. Se o pacote soporta x86_64, PKGBUILD probablemente xa engada esa opción para todas as compilacións en x86_64, permitindo tamén que mips64el resolvese o problema.

Unha solución adecuada seria conseguir que as bibliotecas sexan compartidas en vez de ser estáticas.

## 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].

## 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.

## 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.

## `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).

## `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).

Category:

- MIPS