Porting packages to MIPS (Português) - ParabolaWiki

# Porting packages to MIPS (Português)

Esta página lista alguns problemas e possíveis soluções ao portar os pacotes do Parabola para MIPS.

## Antes de tentar corrigir algum problema

- verificar se o problema acontece com versão mais recente do pacote
- em caso de erros de compilação, verificar isto também no x86_64, normalmente, o erro acontecerá e será mais rápido para corrigir
- verificar se outras distros de suporte MIPS n32 tem patch incluido para isto
- verificar se existem correções opcionais, patches ou bugs reportados para MIPS o32, SPARC ou outras arquiteturas
- se isto é observado em tempo de execução, verifique se o pacote tem testes automatizados que da mesma forma falhe.

## Vinculando com 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 pacote que contém 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).

Nota: Como no x86_64, o mips64el exige compilar bibliotecas compartilhadas com -fPIC, mas neste caso vinculando uma biblioteca compartilhada com uma estática, anteriormente isto já foi intentado em outras situações e dava erros. Se o pacote suporta x86_64, PKGBUILD provavelmente já adiciona essa opção para todas as compilações em x86_64, permitindo também que mips64el resolvesse o problema.

Uma solução adequada seria conseguir que as bibliotecas sejam compartilhadas em vez de ser estáticas.

## Erro de bus durante a execução do pacote

Este tipo de erro é causado por acessar a dados não alinhados. Se o pacote funciona no o32 e tipicas arquiteturas de 64 bits que requere alinhamento, o problema é que os pacotes têm provavelmente o alinhado duplo com 4 bytes em vez de 8.

Use o gdb para localizar o código que está causando o problema, ou seja, fazer um ponteiro desalinhado e passá-lo ao código usando-o, como uma estrutura que contém um alinhado duplo. O problema seria corrigido adicionando estofo para fazer esta estrutura alinhada a 8 bytes.

Exemplo de relatório de bugs upstream: [1].

## Instrução "ilegal" ao executar o pacote

Use o gdb para desmontar o código. Instruções como `madd.s` causa isto quando um argumento é usado com um NaN.

Uma solução simples consiste em compilar o pacote com `-march=mips3` no CFLAGS em vez de `-march=loongson2f`, assim deste jeito as instruções não serão usadas.

Exemplo: Issue#143.

## Vinculador fora de memória

Isto é mais comum quando os símbolos de depuração estão habilitados (`-ggdb` no CFLAGS). O vinculador escreve que não pode alocar a memória, ou apenas falha com violação de segmentação.

Adicionando `-Wl,--reduce-memory-overhead -Wl,--no-keep-memory` para LDFLAGS, faz usar menos memória, corrigindo o problema em pelo menos um caso. Isto faz a vinculação mais lenta, por isso não deve ser ativado quando não for necessária.

Exemplo: Issue#91.

## `soelim` ou outro comando não encontrado por `configure`

Não há nada específico em MIPS este problema, isto é causado por pacotes Arch que foram construídos em um chroot não limpo, tendo assim, pacotes instalados que não estão especificados no `depends` ou `makedepends`.

Adicione o pacote fornecendo o comando que faltava para `makedepends`.

Às vezes, um pacote está faltando apesar de estar no grupo `base` ou `base-devel`, isto deveria estar somente instalado no chroot. Se está sendo removido por `libremakepkg -c`, então o pacote (ou dependência) deve ser adicionado ao `/etc/libretools.d/cleansystem` (e o bug deve ser comunicado).

## `config.guess` não está reconhecendo a arquitetura

Passe o argumento `--build=$CHOST` ou `--host=$CHOST` para `./configure`, dependendo da mensagem de erro. Em casos raros, o `--target=$CHOST` deve ser utilizado, mas isto é provavelmente um bug no pacote de programas já que a maioria não tem um sistema de destino (é útil apenas para compiladores).

Category:

- MIPS