Re: broken local_t on i386

Andi Kleen
2006-06-12T19:12:31Z

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