Re: managing kallsyms_addresses



On Thu 31 Jan 2008 12:27, Paulo Marques pondered:
Robin Getz wrote:
When the kernel needs to find out what symbol is at a specific address, it
uses kallsyms_lookup() This seems to work pretty well - almost.

The problem is today, we don't to remove the symbols from the init section
when the init section is freed. There is invalid data in
kallsyms_addresses.
[...]
There would be two solutions:
- when freeing the init section, remove all the init labels from the
kallsyms_addresses, and resort/pack it.

This should be doable, but to be worth it, we would need to use
different structures for the init symbols, that would be stored in
__initdata.

Then, ideally we would have separate functions in the __init section to
look up symbols in those structures that would only be called until we
released the init sections.

On the plus side, this would avoid the "repacking" the kallsyms
structures to remove the init labels.

I think this would be a good long term thing, but would require restructuring
of all the kallsyms scripts, as well as everything in the kernel...

- if the init section is unloaded, have is_kernel_inittext always
return 0.

This is by far the simplest solution. I even STR a patch floating around
to do this, by I can't seem to locate it now... :(

I can put something together if Rusty agrees this is the way to go.

I assume that similar things need to be handled for module init too, but I
have not run into that yet.

It seems that at least the last solution should be easy enough to
implement there.

Thoughts?

I think that the simplest solution (the second one) is probably the best
for now.

One thing that did cross my mind though, is stuff like lockdep.

Hmmm - I would need to defer to Ingo to understand the dependencies in lockdep
and init labels/addresses in kallsyms_addresses.

If we run a locking sequence that is called from init code, and later a
different locking sequence is used when we already freed init data, how
can the debug information show the names of the functions that generated
the previous locking sequence?

Maybe the lockdep needs to keep track of the label, not the address.

It seems that the only "correct" approach would be to store a "before
freeing init sections" flag together with the function pointer, and then
have a kallsyms interface that could receive this flag to know where to
look.

In that case, the first solution can not be used at all (because we need
to keep the init symbols anyway) and the second solution could be simply
implemented by having a default value for the flag that is the "current
state" for that flag...

That seems a little cumbersome to me...

-Robin
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/



Relevant Pages

  • Re: changevalue and newvalue
    ... I forgot to mention initializing it in Init. ... Note that the var declaration needs to be placed above the event ... flag logical ...
    (comp.databases.paradox)
  • Re: switchcase problem in R12 v6.1
    ... the error message tells you what's wrong: ode15s gives t, c, and flag ... > prompt using ode15s, but i get a error saying unknown flag 'init'. ...
    (comp.soft-sys.matlab)
  • Re: managing kallsyms_addresses
    ... we don't to remove the symbols from the init section when the init section is freed. ... If we run a locking sequence that is called from init code, and later a different locking sequence is used when we already freed init data, how can the debug information show the names of the functions that generated the previous locking sequence? ... It seems that the only "correct" approach would be to store a "before freeing init sections" flag together with the function pointer, and then have a kallsyms interface that could receive this flag to know where to look. ... the first solution can not be used at all and the second solution could be simply implemented by having a default value for the flag that is the "current state" for that flag... ...
    (Linux-Kernel)
  • Re: Making a Part of code to be executed once
    ... making this will execute the code only once and i'm never going to ... change the flag to true ... i can't use the init() method... ... repercusion overall. ...
    (microsoft.public.dotnet.languages.csharp)