O compilador GCC 14 adiciona suporte a GNU Hurd AArch64. Enquanto o GNU Hurd continua tendo dificuldades no suporte ao x86 e o GNU Hurd x86_64 está sendo trabalhado, o compilador do GCC 14 tem desenvolvido o suporte ao compilador toolchain para o GNU Hurd AArch64.
Com o código mesclado esta semana ao GCC Git antes da próxima versão estável do GCC 14.1, agora há suporte para “aarch64-gnu” para GNU/Hurd no AArch64 para sistemas ARM de 64 bits. Emparelhado com um patch Binutils, isso permite que um toolchain possa construir com sucesso binários de trabalho visando a plataforma aarch64-gnu.
Compilador GCC 14 adiciona suporte a GNU Hurd AArch64
As notas do patch:
“Juntamente com um patch binutils correspondente, isso produz um toolchain que pode construir com sucesso binários de trabalho visando aarch64-gnu.”
Mas, dado o estado difícil do suporte de hardware GNU Hurd, este trabalho AArch64 é presumivelmente benéfico apenas no semi curto prazo para VMs ARM de 64 bits, se alguma coisa. No momento, não há nenhum GNU Hurd AArch64 funcionando para os usuários. Na atualização 2024-Q1 do Hurd foi observado:
“Da última vez, não havia nenhuma porta AArch64 do GNU Mach, e então o único teste que fiz foi executar um executável simples ligado estaticamente no Linux sob GDB, o que, no entanto, me ajudou a identificar e corrigir uma série de problemas.
Desde então, no entanto, tenho trabalhado (alguns podem dizer, incansavelmente) para preencher a peça que faltava, ou seja, portar o GNU Mach (com ajuda importante e contribuições de Luca D.). Estou feliz em informar que agora temos um port experimental do GNU Mach que constrói e funciona no AArch64! Embora isso possa parecer impressionante, observe que várias coisas sobre ele estão em um estado extremamente básico, prova de conceito, em vez de estarem seriamente prontos para produção; e também que o Mach é um kernel pequeno (na verdade, um microkernel), e foi projetado desde o início (nos anos 80) para ser portátil, então a maior parte da funcionalidade “lógica de negócios” (memória virtual, IPC, tarefas/threads/agendador) é explicitamente independente do arco.
Apesar do assustador status de “prova de conceito WIP”, há funcionalidade suficiente no Mach para executar código do espaço de usuário, lidar com exceções e syscalls, interagir com o MMU para implementar toda a semântica de memória virtual esperada, agendar/alternar tarefas e threads, e assim por diante. Além disso, todos os autotestes do espaço de usuário do GNU Mach passam!
Isso significava que havia coisas suficientes no lugar para eu tentar executar a glibc nele, e a coisa incrível é que meu executável de teste simples, o mesmo que eu testei anteriormente no Linux com GDB, apenas funcionou no Mach real sem que eu tivesse que fazer quaisquer alterações adicionais no lado glibc, ou mesmo recompilá-lo.
Mas eu não parei por aí, e eu tenho vários dos servidores Hurd núcleo funcionando! Ou seja, estes são servidores ext2fs, exec, startup, auth e proc. Todos eles, exceto ext2fs, estão ligados dinamicamente; ld aarch64.so.1 localiza e mapeia com sucesso os próprios programas e suas dependências necessárias, e páginas Mach em páginas de código e dados do ext2fs à medida que são acessadas, de forma transparente para o programa, exatamente como seria de se esperar.”
Compilador GCC 14 adiciona suporte a GNU Hurd AArch64
O GNU Hurd ainda tem um longo caminho a percorrer para ser útil, especialmente no que diz respeito ao suporte de hardware bare metal.