If the ability to produce a standard 28-byte header is really useful in the real world, I might consider to add that feature to GNU ld.
It's not that bad if the module uses a magic value in its header. Then you can compare it with the beginning of the code segment and if it doesn't match, try +228 and compare again. This is what I did. I really don't want to involve vlink into my toolchain (which already consists of gcc, g++, ld, vasm and as :)).