Skip to contentSkip to conversation

i386 relocable kernel breakes /proc/kcore debugging

BUG Eric W. Biederman 4 participants 5 messages Jul 28, 2007 – Jul 30, 2007 1 message not in the archive

Subsystems (2)
lore
Share & tools
lore
#1 lore raw
In reply to a message not in the archive
Quoted 6 lines · Maxim Levitsky

Hello,

Today I noticed that gdb gets confused when I try to load a vmlinux image. gdb 'thinks' that all kernel symbols are below 0x80000000 , while they are at 0xC000....

Quoted 7 lines

Turning CONFIG_RELOCATABLE off fixes that, so I assume that is the reason for that.

I am using 2.6.23-rc1, although I don't think that older versions are better.

Best regards,
Maxim Levitsky

Weird.

Vivek could this be related to the problem of problematic core dumps we were seeing earlier?

Eric

Quoted 14 lines

PS:
This is what gdb says:

(gdb) disassemble sys_open
Dump of assembler code for function sys_open:
0x8026fa60 <sys_open+0>: Cannot access memory at address 0x8026fa60

While real address of sys_open is:

[root@MAIN linux-2.6]# nm ./.obj/vmlinux | grep sys_open
.........
c016ea60 T sys_open

Quoted 7 lines

Strange, but gdb recordnizes the above address directly:

(gdb) disassemble 0xc016ea60
Dump of assembler code for function sys_open:

0xc016ea60 <sys_open+0>:        sub    $0x4,%esp
0xc016ea63 <sys_open+3>:        mov    0x10(%esp),%eax

...............

_______________________________________________
kexec mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/kexec

#2 lore raw
In reply to a message not in the archive
Quoted 9 lines · Maxim Levitsky

Hello,

Today I noticed that gdb gets confused when I try to load a vmlinux image. gdb 'thinks' that all kernel symbols are below 0x80000000 , while they are at 0xC000....

Turning CONFIG_RELOCATABLE off fixes that, so I assume that is the reason for that.

This is a gdb issue. I had raised it in gdb mailing list some time back.

http://sourceware.org/ml/gdb/2006-08/msg00137.html

What version of gdb you are using? I know it got fixed for gdb shipped with RHEL5. I am not sure about what upstream version of gdb it got fixed in.

I think Jan Kratochvil had put a patch to fix the issue. I am copying him on the mail and he should be able to tell which version of gdb to use.

Thanks
Vivek

#3 lore raw
Quoted 1 line · Vivek Goyal

On Sat, Jul 28, 2007 at 04:43:43AM +0300, Maxim Levitsky wrote:

...

Quoted 9 lines
Quoted 5 lines

gdb 'thinks' that all kernel symbols are below 0x80000000 , while they are at 0xC000....

Turning CONFIG_RELOCATABLE off fixes that, so I assume that is the reason for that.

This is a gdb issue. I had raised it in gdb mailing list some time back.

http://sourceware.org/ml/gdb/2006-08/msg00137.html

There was the patch post:

	http://sources.redhat.com/ml/gdb/2006-08/msg00182.html
Quoted 3 lines

What version of gdb you are using? I know it got fixed for gdb shipped with RHEL5. I am not sure about what upstream version of gdb it got fixed in.

It did not make it to the upstream as the patch above is an imperfect one. It is fixed in RH gdb-6.5-5 upwards, therefore Fedora 6 + RHEL-5.

	http://cvs.fedora.redhat.com/viewcvs/*checkout*/devel/gdb/gdb-6.5-bz203661-emit-relocs.patch?root=core

Regards,
Jan

#4 lore raw
Quoted 22 lines · Jan Kratochvil
Quoted 1 line · Vivek Goyal

On Sat, Jul 28, 2007 at 04:43:43AM +0300, Maxim Levitsky wrote:

...

Quoted 9 lines
Quoted 5 lines

gdb 'thinks' that all kernel symbols are below 0x80000000 , while they are at 0xC000....

Turning CONFIG_RELOCATABLE off fixes that, so I assume that is the reason for that.

This is a gdb issue. I had raised it in gdb mailing list some time back.

http://sourceware.org/ml/gdb/2006-08/msg00137.html

There was the patch post:

	http://sources.redhat.com/ml/gdb/2006-08/msg00182.html
Quoted 3 lines

What version of gdb you are using? I know it got fixed for gdb shipped with RHEL5. I am not sure about what upstream version of gdb it got fixed in.

Quoted 8 lines

It did not make it to the upstream as the patch above is an imperfect one. It is fixed in RH gdb-6.5-5 upwards, therefore Fedora 6 + RHEL-5.

	http://cvs.fedora.redhat.com/viewcvs/*checkout*/devel/gdb/gdb-6.5-bz203661

-emit-relocs.patch?root=core

Regards,
Jan

Hi,

I am using mandriva 2007 and gdb that come with it ( 6.3 I think) I also compiled gdb 6.6, but the same issue persist.

Thanks for the info, and I will try to apply the above patch and see if helps,

Will it make into gdb?

By the way, I had another issue with /proc/kcore.
That enabling sparse memory model instead of flat causes /proc/kcore not to work at all. I traced that to a "FIXME" in sparcemem.

/* XXX: FIXME -- wli */
#define kern_addr_valid(kaddr) (0)

Kconfig should contatin a warning for those who select sparcemem that /proc/kcore will be disabled.
or maybe this should be implemented (it is not easy since spacemem allows memory to be discontinous, and nobody wants to allow user to read reserved regions)

Except the above, /proc/kcore works fine, and it is very usefull.

Best regards,
Maxim Levitsky

Best regards,
Maxim Levitsky

#5 lore raw
In reply to Jan Kratochvil
Quoted 18 lines · Jan Kratochvil
Quoted 1 line · Vivek Goyal

On Sat, Jul 28, 2007 at 04:43:43AM +0300, Maxim Levitsky wrote:

...

Quoted 1 line
Quoted 1 line

gdb 'thinks' that all kernel symbols are below 0x80000000 , while they are

at

Quoted 3 lines
Quoted 3 lines

0xC000....

Turning CONFIG_RELOCATABLE off fixes that, so I assume that is the reason

for

Quoted 5 lines
Quoted 1 line

that.

This is a gdb issue. I had raised it in gdb mailing list some time back.

http://sourceware.org/ml/gdb/2006-08/msg00137.html

There was the patch post:

	http://sources.redhat.com/ml/gdb/2006-08/msg00182.html
Quoted 7 lines
Quoted 3 lines

What version of gdb you are using? I know it got fixed for gdb shipped with RHEL5. I am not sure about what upstream version of gdb it got fixed in.

It did not make it to the upstream as the patch above is an imperfect one. It is fixed in RH gdb-6.5-5 upwards, therefore Fedora 6 + RHEL-5.

	http://cvs.fedora.redhat.com/viewcvs/*checkout*/devel/gdb/gdb-6.5-bz203661-emit-relocs.patch?root=core

Has anyone looked at the filtering by ignoring SHTSYM_TAB? The other approach suggested? The patch above only works for ET_EXEC because we can safely ignore everything.

Eric