Como sempre, RTFM. Respondendo isso e deixando para ajudar os outros que podem se deparar com isso. De acordo com o projeto de documentação do Linux, eu estava usando o obj-m errado:
Sometimes it makes sense to divide a kernel module between several source files. Here's an example of such a kernel module.
[ Source files ... ]
And finally, the makefile:
Example 2-10. Makefile
obj-m += hello-1.o obj-m += hello-2.o obj-m += hello-3.o obj-m += hello-4.o obj-m += hello-5.o obj-m += startstop.o startstop-objs := start.o stop.o
all: make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean: make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
Guia de programação do módulo Linux Kernel: 2.7. Módulos que abrangem vários arquivos
Então, meu Makefile deveria ter lido:
obj-m += kexecmod.o kexecmod-objs := kexec.o machine_kexec.o relocate_kernel.o
Qual compilado relocate_kernel.S em relocate_kernel.o
(Para alguém que esta tentando compilar o kexec como um módulo, eu ainda não encontrei todas as dependências, mas isso é um começo.)