Opa amigo, o primeiro código Assembly a ser executado no CoffeaOS é justamente o arquivo arch/x86/loader.s.
Quem executa ele, é o GRUB. O arquivo simplesmente escreve alguns cabeçalhos do GRUB na memória para que o mesmo identifique como um arquivo compatível com o multiboot.
Assim que ele identifica, o controle é passado para meu loader. E lá é onde eu inicializo a pilha do Kernel (importante para passar argumentos para C via cdecl) e logo após, passo o controle para minha função kmain em C.