Although the build scripts are failing strangely in src/boot, manually building in that directory appears to work properly, producing an executable ("controlix") which executes properly (prints "Hello, world!" and executes several function calls linked in from different object files). The symbol-renaming trick with objcopy works great, allowing linkage of the three separately-compiled object files.
Now it is time to try making some real code. Steps:
Code up the pointer shim library.
Make up a 'fake' set of boot-time microdrivers and regular drivers for a text console (CGA 80x25 text and keyboard). The text console will be simulated with an array of ASCII characters, and the keyboard input will come from stdin. Probably use GGI/GII libs for this.
Write a barebones shell with directly-wired commands.
Write a minimal filesystem control set, which will use stdio and a native directory.
A simple shim for faking RAM and PCI bus addressing.
Basic serialized thread management using pthreads.
Ideally, once all of this stuff works, it will be simple to substitute real drivers which bang on the real hardware and boot a real OS kernel+filesystem image in VirtualBox.
Stay tuned....
Jon