Re: [PATCH 8/33] kallsyms.c: Generate relocatable symbols.

Eric W. Biederman
2006-08-01T11:54:05Z

Paulo Marques <pmarques@grupopie.com> writes:

> Eric W. Biederman wrote:
>> Print the addresses of non-absolute symbols relative to _text
>> so that ld will generate relocations. Allowing a relocatable
>> kernel to relocate them. We can't actually use the symbol names
>> because kallsyms includes static symbols that are not exported
>> from their object files.
>> [...]
>> output_label("kallsyms_addresses");
>> for (i = 0; i < table_cnt; i++) {
>> - printf("\tPTR\t%#llx\n", table[i].addr);
>> + if (toupper(table[i].sym[0]) != 'A') {
>> + printf("\tPTR\t_text + %#llx\n",
>> + table[i].addr - _text);
>> + } else {
>> + printf("\tPTR\t%#llx\n", table[i].addr);
>> + }
>
> Doesn't this break kallsyms for almost everyone?
>
> kallsyms addresses aren't used just for displaying, but also to find symbols
> from their addresses (from the stack trace, etc.).
>
> Am I missing something?

Yes, you are missing something. This fixes the addresses in the table.

All this does is to put the same values in kallsyms that we have now
but it creates relocations for them. So on a kernel where we process
relocations before loading (because we are running the kernel at a
different virtual address). The processing of the relocations will
fix kallsyms to match the running kernel.

If we don't do this we will have the problems you are worried about.

Of course I would be overjoyed if you could point out a bug like
you are worried about so I could fix it :)

Eric