From: "H. Peter Anvin" <hpa@xxxxxxxxx>
Date: Fri, 25 Apr 2008 13:41:00 -0700
Yes, that should work. It's still ugly, and I have to say I find the complexity rather distasteful. I am willing to be convinced it's worth it, but I would really like to see hard numbers.
This stuff would have been a lot easier if it just worked with
normal relocations generated by the assembler, and that would
work in such a straightforward way on EVERY architecture.
The immediate instance generators could just use macros that
architectures define, which are given a range of legal values for the
immediate, and the macro emits the inline asm sequence that can
support an immediate value of that range.
Then we do a half-link of the kernel, collect the unresolved
relocations from generated by the immediate macros into a table which
gets linked into the kernel, then resolve them in the final link all
to zero or some defined initial value.
Then it's just a matter of running through the relocation handling
we already have for module loading when changing an immediate
value.
None of this crazy instruction parsing and branch following crap.
I can't believe we're seriously considering this crud. :-/