2008-11-24 21:19:18

by Vegard Nossum

[permalink] [raw]
Subject: v2.6.28-rc2: x86_32 relocation regression?

Hi,

I couldn't help noticing that addr2line no longer works for me since
at least v2.6.28-rc2. I get this:

EIP: 0060:[<c039e613>] EFLAGS: 00000202 CPU: 0
EIP is at strcpy+0x13/0x30

$ addr2line -e vmlinux -i c039e613
??:0

...even though the kernel was configured with CONFIG_DEBUG_INFO=y.

$ grep DEBUG_INFO .config
CONFIG_DEBUG_INFO=y

gdb too:

(gdb) disas 0xc039e613
No function contains specified address.

This is a simple x86_32 defconfig with CONFIG_DEBUG_INFO toggled.

$ nm vmlinux | grep strcpy
c12a3b90 t scsi_strcpy_devinfo
c119e600 T strcpy

It looks like everything was offset by 0xe00000:

$ addr2line -e vmlinux c119e613
arch/x86/lib/string_32.c:20

I have also this:

virtual kernel memory layout:
fixmap : 0xffc79000 - 0xfffff000 (3608 kB)
pkmap : 0xff400000 - 0xff800000 (4096 kB)
vmalloc : 0xc87f0000 - 0xff3fe000 ( 876 MB)
lowmem : 0xc0000000 - 0xc7ff0000 ( 127 MB)
.init : 0xc08ce000 - 0xc0932000 ( 400 kB)
.data : 0xc06c9a4b - 0xc08c46ec (2027 kB)
.text : 0xc0200000 - 0xc06c9a4b (4902 kB)

Any ideas?

Thanks,


Vegard

--
"The animistic metaphor of the bug that maliciously sneaked in while
the programmer was not looking is intellectually dishonest as it
disguises that the error is the programmer's own creation."
-- E. W. Dijkstra, EWD1036


2008-11-25 01:30:32

by Huang, Ying

[permalink] [raw]
Subject: Re: v2.6.28-rc2: x86_32 relocation regression?

Hi, Vegard,

On Tue, 2008-11-25 at 05:19 +0800, Vegard Nossum wrote:
[...]
> It looks like everything was offset by 0xe00000:
>
> $ addr2line -e vmlinux c119e613
> arch/x86/lib/string_32.c:20

Because relocation is supported in recent Linux kernel, it is possible
that the run-time address is different with compile-time address. In
most cases, the kernel will be loaded into 0x100000 during boot, so the
kernel run-time address range from 0xc0100000 on. But it seems that your
kernel compile-time address range from 0xc0f00000 on. Please check
CONFIG_PHYSICAL_START in your .config. In most cases, it will be set to
0x100000, so that it is same as run-time address in most cases.

Best Regards,
Huang Ying


Attachments:
signature.asc (197.00 B)
This is a digitally signed message part

2008-11-25 10:07:38

by Vegard Nossum

[permalink] [raw]
Subject: Re: v2.6.28-rc2: x86_32 relocation regression?

On Tue, Nov 25, 2008 at 2:30 AM, Huang Ying <[email protected]> wrote:
> Hi, Vegard,
>
> On Tue, 2008-11-25 at 05:19 +0800, Vegard Nossum wrote:
> [...]
>> It looks like everything was offset by 0xe00000:
>>
>> $ addr2line -e vmlinux c119e613
>> arch/x86/lib/string_32.c:20
>
> Because relocation is supported in recent Linux kernel, it is possible
> that the run-time address is different with compile-time address. In
> most cases, the kernel will be loaded into 0x100000 during boot, so the
> kernel run-time address range from 0xc0100000 on. But it seems that your
> kernel compile-time address range from 0xc0f00000 on. Please check
> CONFIG_PHYSICAL_START in your .config. In most cases, it will be set to
> 0x100000, so that it is same as run-time address in most cases.

Thanks!

It seems to be caused by this commit:

commit 5cb04df8d3f03e37a19f2502591a84156be71772
Author: Ingo Molnar <[email protected]>
Date: Sun May 4 19:49:04 2008 +0200

x86: defconfig updates

-CONFIG_PHYSICAL_START=0x100000
-# CONFIG_RELOCATABLE is not set
-CONFIG_PHYSICAL_ALIGN=0x100000
...
+CONFIG_PHYSICAL_START=0x1000000
+CONFIG_RELOCATABLE=y
+CONFIG_PHYSICAL_ALIGN=0x200000

Were all changes intentional?


Vegard

--
"The animistic metaphor of the bug that maliciously sneaked in while
the programmer was not looking is intellectually dishonest as it
disguises that the error is the programmer's own creation."
-- E. W. Dijkstra, EWD1036

2008-11-25 17:32:18

by H. Peter Anvin

[permalink] [raw]
Subject: Re: v2.6.28-rc2: x86_32 relocation regression?

Vegard Nossum wrote:
>
> Thanks!
>
> It seems to be caused by this commit:
>
> commit 5cb04df8d3f03e37a19f2502591a84156be71772
> Author: Ingo Molnar <[email protected]>
> Date: Sun May 4 19:49:04 2008 +0200
>
> x86: defconfig updates
>
> -CONFIG_PHYSICAL_START=0x100000
> -# CONFIG_RELOCATABLE is not set
> -CONFIG_PHYSICAL_ALIGN=0x100000
> ...
> +CONFIG_PHYSICAL_START=0x1000000
> +CONFIG_RELOCATABLE=y
> +CONFIG_PHYSICAL_ALIGN=0x200000
>
> Were all changes intentional?
>

Yes, but it's unacceptable that a relocatable kernel *NOT RELOCATED BY
THE BOOTLOADER* ends up with the debug information incorrect. That is a
bug, plain and simple, and needs to be fixed.

-hpa