And this is bad too.
in setup_realmode_idt -- both v2 and v3 ... /* debug handler - useful to set a programmable delay between instructions if the TF bit is set upon call to real mode */ idts[1].cs = 0; idts[1].offset = 16384; memcpy((void *)16384, &debughandle, &end_debughandle - &debughandle);
So a blind memcpy over 16384. What's there?
00003fa0 T find_constructor 0000404b T constructor 000040a1 T alloc_dev 0000418b T dev_init 000041bc T dev_find_slot 000041eb T dev_find_slot_on_smbus 0000421a T dev_find_class
Oh. Our code. In fact, it's find_constructor -- which was what was blowing up.
So I'm yanking that blind memcpy, one more try, then off to bed.
We're going to need to work out a formal memory map.
ron