This is the mail archive of the
gdb@sourceware.org
mailing list for the GDB project.
Re: Wrong address for static function in linux module
Hi Daniel,
See below.
Jean-Rene Peulvé
At 15:11 11/04/06, Daniel Jacobowitz wrote:
On Tue, Apr 11, 2006 at 11:01:13AM +0200, Jean-Rene Peulve wrote:
> Hi,
> I am debugging a linux module on a Coldfire and I encounter the following
> problem:
> -functions which have the static attribut are always relocated at offset 0
> of the .text section with the break command when the display command at
> the
> right address disassemble the right static function.
This is normally supposed to be handled in
symfile_relocate_debug_section. Are the bad functions really in
".text", or in another named text section?
Both functions horloge_read and HorlogeCheck are in the .text section.
Does the debug section
have proper relocations for that .debug_info entry (readelf -r)?
Here the output of m68k-elf-readelf -s horloge.o (using binutils-2.16.1):
I am not familiar with the following output. static functions does not show
up in this list.
Relocation section '.rela.text' at offset 0x20060 contains 59 entries:
Offset Info Type Sym.Value Sym. Name + Addend
00000006 00000401 R_68K_32 00000000 .bss + 8
0000000c 00001e01 R_68K_32 00000000 jiffies + 0
00000012 00000301 R_68K_32 00000000 .data + 14
0000001a 00000201 R_68K_32 00000000 .text + 32
00000020 00000401 R_68K_32 00000000 .bss + 10
0000002a 00001f01 R_68K_32 00000000 add_timer + 0
00000038 00000301 R_68K_32 00000000 .data + 18
0000003e 00000301 R_68K_32 00000000 .data + 18
0000005c 00001c01 R_68K_32 00000008 horlogeWq + 0
00000062 00002001 R_68K_32 00000000 __wake_up + 0
00000068 00000201 R_68K_32 00000000 .text + 0
0000007e 00002101 R_68K_32 00000000 kmalloc + 0
00000096 00000301 R_68K_32 00000000 .data + 18
0000009c 00000301 R_68K_32 00000000 .data + 18
000000a4 00000301 R_68K_32 00000000 .data + 18
000000b0 00000301 R_68K_32 00000000 .data + 18
000000ba 00000301 R_68K_32 00000000 .data + 18
000000c4 00000301 R_68K_32 00000000 .data + 14
000000f2 00002201 R_68K_32 00000000 kfree + 0
000000f8 00000301 R_68K_32 00000000 .data + 18
00000100 00000301 R_68K_32 00000000 .data + 18
00000110 00000301 R_68K_32 00000000 .data + 18
00000116 00000301 R_68K_32 00000000 .data + 18
0000011e 00000401 R_68K_32 00000000 .bss + 0
00000124 00002301 R_68K_32 00000000 del_timer + 0
0000014c 00001c01 R_68K_32 00000008 horlogeWq + 0
00000152 00002401 R_68K_32 00000000 interruptible_sleep_on + 0
00000188 00001c01 R_68K_32 00000008 horlogeWq + 0
0000019c 00002501 R_68K_32 00000000 __pollwait + 0
000001c6 00000301 R_68K_32 00000000 .data + 14
000001f2 00002601 R_68K_32 00000000 _ramend + 0
000001fc 00002701 R_68K_32 00000000 is_in_rom + 0
0000020a 00002701 R_68K_32 00000000 is_in_rom + 0
00000224 00000501 R_68K_32 00000000 .rodata + 5
0000022a 00002801 R_68K_32 00000000 printk + 0
0000023e 00002601 R_68K_32 00000000 _ramend + 0
00000248 00002701 R_68K_32 00000000 is_in_rom + 0
00000256 00002701 R_68K_32 00000000 is_in_rom + 0
00000270 00000501 R_68K_32 00000000 .rodata + 2b
00000276 00002801 R_68K_32 00000000 printk + 0
000002a0 00002901 R_68K_32 00000000 memcpy + 0
000002bc 00000501 R_68K_32 00000000 .rodata + 52
000002c2 00002801 R_68K_32 00000000 printk + 0
000002d6 00000301 R_68K_32 00000000 .data + 14
000002e8 00000301 R_68K_32 00000000 .data + 14
000002fc 00002901 R_68K_32 00000000 memcpy + 0
00000306 00000301 R_68K_32 00000000 .data + 14
0000030e 00000401 R_68K_32 00000000 .bss + 0
00000314 00002301 R_68K_32 00000000 del_timer + 0
0000031a 00000201 R_68K_32 00000000 .text + 0
00000330 00000301 R_68K_32 00000000 .data + 20
00000336 00000501 R_68K_32 00000000 .rodata + 66
00000340 00002a01 R_68K_32 00000000 register_chrdev + 0
00000346 00000401 R_68K_32 00000000 .bss + 4
0000034c 00000401 R_68K_32 00000000 .bss + 0
0000035c 00000501 R_68K_32 00000000 .rodata + 66
00000366 00002b01 R_68K_32 00000000 unregister_chrdev + 0
0000036c 00000401 R_68K_32 00000000 .bss + 0
00000372 00002301 R_68K_32 00000000 del_timer + 0
Relocation section '.rela.data' at offset 0x20324 contains 10 entries:
Offset Info Type Sym.Value Sym. Name + Addend
0000000c 00001c01 R_68K_32 00000008 horlogeWq + 4
00000010 00001c01 R_68K_32 00000008 horlogeWq + 4
00000018 00000301 R_68K_32 00000000 .data + 18
0000001c 00000301 R_68K_32 00000000 .data + 18
00000020 00001d01 R_68K_32 00000000 __this_module + 0
00000028 00000201 R_68K_32 00000000 .text + 136
00000034 00000201 R_68K_32 00000000 .text + 174
00000038 00000201 R_68K_32 00000000 .text + 1b4
00000040 00000201 R_68K_32 00000000 .text + 70
00000048 00000201 R_68K_32 00000000 .text + ce
Relocation section '.rela.stab' at offset 0x2039c contains 41 entries:
Offset Info Type Sym.Value Sym. Name + Addend
00000014 00000201 R_68K_32 00000000 .text + 0
00000020 00000201 R_68K_32 00000000 .text + 0
00002b40 00000601 R_68K_32 00000000 .modinfo + 0
00002c48 00000601 R_68K_32 00000000 .modinfo + 78
00002c60 00000301 R_68K_32 00000000 .data + 14
00002c6c 00000301 R_68K_32 00000000 .data + 18
00002c78 00000301 R_68K_32 00000000 .data + 20
00002c84 00000201 R_68K_32 00000000 .text + 0
00002cd8 00000201 R_68K_32 00000000 .text + 32
00002d14 00000201 R_68K_32 00000000 .text + 3c
00002d2c 00000201 R_68K_32 00000000 .text + 3c
00002d74 00000201 R_68K_32 00000000 .text + 4e
00002d8c 00000201 R_68K_32 00000000 .text + 4e
00002e40 00000201 R_68K_32 00000000 .text + 70
00002eac 00000201 R_68K_32 00000000 .text + 94
00002f48 00000201 R_68K_32 00000000 .text + be
00003044 00000201 R_68K_32 00000000 .text + ce
0000308c 00000201 R_68K_32 00000000 .text + de
000030ec 00000201 R_68K_32 00000000 .text + ea
0000311c 00000201 R_68K_32 00000000 .text + fc
00003134 00000201 R_68K_32 00000000 .text + fe
00003158 00000201 R_68K_32 00000000 .text + 10a
00003170 00000201 R_68K_32 00000000 .text + 10a
00003188 00000201 R_68K_32 00000000 .text + 10e
000031ac 00000201 R_68K_32 00000000 .text + 10e
000032e4 00000201 R_68K_32 00000000 .text + 136
000033f8 00000201 R_68K_32 00000000 .text + 174
00003434 00000201 R_68K_32 00000000 .text + 186
0000347c 00000201 R_68K_32 00000000 .text + 1a0
00003524 00000201 R_68K_32 00000000 .text + 1b4
000035b4 00000201 R_68K_32 00000000 .text + 1ea
00003620 00000201 R_68K_32 00000000 .text + 21e
0000365c 00000201 R_68K_32 00000000 .text + 236
000036c8 00000201 R_68K_32 00000000 .text + 26a
00003968 00000201 R_68K_32 00000000 .text + 32a
00003998 00000201 R_68K_32 00000000 .text + 344
000039c8 00000201 R_68K_32 00000000 .text + 350
00003a28 00000201 R_68K_32 00000000 .text + 356
00003a94 00002e01 R_68K_32 0000037a HorlogeCheck + 0
00003ac4 00000401 R_68K_32 00000000 .bss + 0
00003ad0 00000201 R_68K_32 00000000 .text + 382
Output of m68k-elf-readelf -s horloge.o:
Symbol table '.symtab' contains 47 entries:
..
12: 00000136 62 FUNC LOCAL DEFAULT 1 horloge_read
..
46: 0000037a 8 FUNC GLOBAL DEFAULT 1 HorlogeCheck
More details from maint print commands.
from the output of maint print symbols symbols.txt
int horloge_read(struct file *, char *, size_t, loff_t *); block object
0x83a54f0, 0x790060..0x79009e section .text
block #006, object at 0x83a54f0 under 0x83bdc54, 8 syms/buckets in
0x790060..0x79009e, function horloge_read, compiled with gcc2
from the output of maint print psymbols psymbols.txt
`horloge_read', function, 0x790196
from the output of maint print msymbols msymbols.txt
[ 9] t 0x790196 horloge_read section .text
gdb302bdi> x/i 0x791196
0x791196 <horloge_read at horloge.c:503>: linkw %fp,#0
Remark: the line number 503 is wrong as well !
gdb302bdi> x/i horloge_read
0x791060 <exit_horloge at horloge.c:589>: linkw %fp,#0
--
Daniel Jacobowitz
CodeSourcery