Following an epic debate on SELF/ELF/LAR and six weeks of hacking on libpayload, I am happy to finally be able to demonstrate some of the fruits of our labor.
I give you the proof-of-concept of what I call bayou, but what you will probably call "the chooser". This code uses a special version of lar to construct a LAR consisting of multiple payloads in SELF format. That raw binary is then built into the chooser payload.
The chooser payload reads the contents of the LAR and makes them available for choosing through a curses menu. This POC code includes coreinfo and helloworld as demo payloads that can be chosen.
The Makefile in bayou/src/ is pretty self contained - if you want to add additional payloads, then add them to the list in Makefile, and rebuild builtin.lar. All the binutils nastiness should just work, but your millage will vary. You'll need all of the patches I just sent for libpayload.
Clearly there is still much to be done, and much to be debated, but I hope that this will at least whet your appetite for what we have and what we can do. This also provides a working example of the SELF format for those who want to debate that some more.
The tarball: http://coreboot.org/~jcrouse/bayou_0.1.tar.gz
And for those who don't want to compile, here is a QEMU ROM demonstrating it: http://coreboot.org/~jcrouse/bayou-demo-qemu.rom
As always, flames, comments, praise, and beer accepted.
Jordan