O GCC tem todos os tipos de opções para controlar como funciona. Aqui estão alguns relevantes:
-nostdlib
Para omitir a ligação às bibliotecas padrão e código de inicialização-nostdinc
omitir a pesquisa de arquivos de cabeçalho nos locais padrão.-ffreestanding
Para compilar um ambiente independente (como um kernel)
Você também não precisa usar o GCC para vincular. Você pode invocar o vinculador diretamente, fornecê -lo com seu próprio mapa do vinculador, código do objeto de inicialização e qualquer outra coisa que você precisar.
A construção do kernel Linux parece, por razões arbitrárias para não usar -ffreestanding
, ele controla o estágio de vinculação e garante que o kernel seja vinculado sem puxar nenhum código do espaço do usuário.