Messages in this thread Patch in this message | | | Date | Mon, 6 Nov 2006 11:03:53 -0500 | From | Vivek Goyal <> | Subject | Re: [PATCH 7/11] i386: Kallsyms generate relocatable symbols |
| |
On Mon, Nov 06, 2006 at 03:48:57PM +0100, Haavard Skinnemoen wrote: > On Mon, 23 Oct 2006 15:37:48 -0400 > Vivek Goyal <vgoyal@in.ibm.com> wrote: > > > Add the _text symbol definitions to the architectures which don't > > define it otherwise linker will fail. > > I get lots of this when building latest -mm for avr32: > > .tmp_kallsyms2.S:643: Warning: right operand is a bignum; integer 0 > assumed > > Reverting this patch makes the warnings go away. I think it's > because on avr32, .init is the first section, not .text, so many of the > offsets become negative and kallsyms doesn't seem to handle this very > well. Here's a few lines from .tmp_kallsyms2.S: > > kallsyms_addresses: > PTR _text + 0xffffffffffff4000 > PTR _text + 0xffffffffffff4000 > > Any idea how to fix this? Could we introduce a new symbol that always > marks the start of the image perhaps? >
Hi Haavard,
Does the attached patch solve the issue for you?
Thanks Vivek
o On some platforms like avr32, section init comes before .text and not necessarily a symbol's relative position w.r.t _text is positive. In such cases assembler detects the overflow and emits warning. This patch fixes it.
Signed-off-by: Vivek Goyal <vgoyal@in.ibm.com> ---
scripts/kallsyms.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-)
diff -puN scripts/kallsyms.c~i386-reloc-kallsyms-_text-symbol-relative-address-fix scripts/kallsyms.c --- linux-2.6.19-rc4-reloc/scripts/kallsyms.c~i386-reloc-kallsyms-_text-symbol-relative-address-fix 2006-11-06 10:47:01.000000000 -0500 +++ linux-2.6.19-rc4-reloc-root/scripts/kallsyms.c 2006-11-06 10:47:01.000000000 -0500 @@ -277,8 +277,12 @@ static void write_src(void) output_label("kallsyms_addresses"); for (i = 0; i < table_cnt; i++) { if (toupper(table[i].sym[0]) != 'A') { - printf("\tPTR\t_text + %#llx\n", - table[i].addr - _text); + if (_text <= table[i].addr) + printf("\tPTR\t_text + %#llx\n", + table[i].addr - _text); + else + printf("\tPTR\t_text - %#llx\n", + _text - table[i].addr); } else { printf("\tPTR\t%#llx\n", table[i].addr); } _ - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |