Porting packages to MIPS (Português)

From ParabolaWiki
Jump to: navigation, search

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

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

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

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

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

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

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

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