Re: [PATCH 1/3] x86: record relocation offset

Arnaldo Carvalho de Melo
2009-12-31T00:31:12Z

Em Wed, Dec 30, 2009 at 03:46:03PM -0800, H. Peter Anvin escreveu:
> On 12/30/2009 03:41 PM, James Bottomley wrote:
> > On Wed, 2009-12-30 at 15:26 -0800, H. Peter Anvin wrote:
> >> The statement that a _text-based relocation is insufficient is false.
> >> The entire x86-32 monolithic kernel is relocated as a unit. The
> >> x86-64 kernel, too, is relocated as a unit, but using the page tables,
> >> which means it always runs at the compile-time-selected virtual
> >> address.
> >
> > Confused now ... you just repeated what I said in the second paragraph,
> > but made it sound like you are disagreeing?
>
> We might have a bit of a context mismatch.
>
> The first I saw of this thread was a proposed patch that would give the
> relocation offset of the monolithic kernel, both on 32 and 64 bits,
> without any explanation of the usage model. As such, from my point of
> view this has always been about the monolithic kernel, until your post
> mentioned modules (which the proposed patch would have done nothing about.)
>
> The monolithic kernel offset is a single scalar constant; each module,
> of course, is completely different.

Conclusion: at 'perf record' time store the address of a well know
symbol (_text) into the perf.data header. Later, at perf report time, if
using a vmlinux file, calculate the relocation by subtracting the same
well known symbol from the one stored in the header.

So no need for ioctl or boot stuff.

I'll do that tomorrow, if Xiao doesn't beats me to it :-)

- Arnaldo