Messages in this thread | | | From | Andi Kleen <> | Subject | Re: broken local_t on i386 | Date | Mon, 12 Jun 2006 20:11:52 +0200 |
| |
On Monday 12 June 2006 20:59, Christoph Lameter wrote: > On Mon, 12 Jun 2006, Andi Kleen wrote: > > Possible, but is it worth reinventing the linker? > > How would that work?
Either changing the linker and telling everybody to upgrade or writing a mini linker that works at kernel boot time.
Upgrading binutils is imho not acceptable and doing the runtime relocation would be a lot of code for questionable gain.
> IMHO The linker cannot help with virtual to physical address translations. > A linker that will link per processor would be amazing. What happens if > the process is rescheduled? We dynamically relink to the new processor? > > I thought you had some funky segment registers on i386 and x86_64. Cant > they be switched on context switch? If an inc/dec could work relative to > those then you would not need a virtual mapping.
The segment register needs an offset. So you need the linker to generate the offset from the base of the per cpu segment somehow. At compile time the address is not known so it cannot be done then.
To work around this we do it at runtime.
User space TLS has some specialized relocations for this, but they are so hack^wspecialized that they are not usable for the kernel.
-Andi - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |