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.
Contents
- 1 Antes de tentar corrigir algum problema
- 2 Vinculando com bibliotecas estáticas
- 3 Erro de bus durante a execução do pacote
- 4 Instrução "ilegal" ao executar o pacote
- 5 Vinculador fora de memória
- 6 soelim ou outro comando não encontrado por configure
- 7 config.guess não está reconhecendo a arquitetura
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).
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).