GCC produces object files, it's the linking utility that produces the final executable. Inventing a new executable format is a dauting task on it's own, why not reuse an existing one?
Here is a link you should investigate:
The OSKit Project[
^] - played around with it years ago, didn't amount to much, but it WAS FUN!
Regards
Espen Harlinn