GNU ld supports linking an ET_EXEC as if it were an ET_REL. This is an
extremely rare feature, but we can implement it with just one more line.
As a real world use case, the final link phase of seabios does:
ld -N -T out/romlayout32flat.lds out/rom16.strip.o out/rom32seg.strip.o out/code32flat.o -o out/rom.o
out/rom16.strip.o and out/rom32seg.strip.o are ET_EXEC created by previous steps.
romlayout32flat.lds collects the pieces and produces rom.o which
contains code of all x86 memory models.
With this lld patch and two seabios patches, I manage to link seabios with lld.
I wonder if we want a comment here.