As always, RTFM. Answering this and leaving it up to help others that may come across this. Per the Linux documentation project, I was using obj-m wrong:
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
Linux Kernel Module Programming Guide: 2.7. Modules Spanning Multiple Files
So, my Makefile should have read:
obj-m += kexecmod.o
kexecmod-objs := kexec.o machine_kexec.o relocate_kernel.o
Which compiled relocate_kernel.S into relocate_kernel.o
(To anyone stumbling across this trying to compile kexec as a module, I still haven't found all the dependencies, but this is a start.)