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

From: Eric W. Biederman
Date: Tue Aug 01 2006 - 07:51:53 EST

Paulo Marques <pmarques@xxxxxxxxxxxx> 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 :)

To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at
Please read the FAQ at