kieranbingham at gmail dot com
2016-05-12 08:38:36 UTC
https://sourceware.org/bugzilla/show_bug.cgi?id=20077
Bug ID: 20077
Summary: gdb.Value string object has strlen of 1 after
backtrace
Product: gdb
Version: HEAD
Status: NEW
Severity: normal
Priority: P2
Component: python
Assignee: unassigned at sourceware dot org
Reporter: kieranbingham at gmail dot com
Target Milestone: ---
So this is an odd bug to reproduce.
As part of integrating extra debug commands into the Linux Kernel, we created
an lx-version command. It's simple enough and just finds, and displays the
version string from the kernel.
http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/scripts/gdb/linux/proc.py
However, if you run a backtrace, before you use the python lx-version command,
then the string returned prints only one character.
It actually has a strlen of 0 - but I traced through the gdb.Value code, and
found that somewhere it gets +1 added to it, which means it prints just one
char.
(gdb) bt
#0 cpu_v7_do_idle () at .../linux/arch/arm/mm/proc-v7.S:74
#1 0xc0308728 in arch_cpu_idle () at .../linux/arch/arm/kernel/process.c:72
#2 0xc0376b28 in cpuidle_idle_call () at .../linux/kernel/sched/idle.c:151
#3 cpu_idle_loop () at .../linux/kernel/sched/idle.c:242
#4 cpu_startup_entry (state=<optimized out>) at
.../linux/kernel/sched/idle.c:291
#5 0xc0ae8a30 in rest_init () at .../linux/init/main.c:408
#6 0xc0f00c5c in start_kernel () at .../linux/init/main.c:661
#7 0x8020807c in ?? ()
Backtrace stopped: previous frame identical to this frame (corrupt stack?)
(gdb) lx-version
L(gdb) print linux_banner #### Note the 'L' at the beginning of the line
####
$1 = 0xc0b00074 <linux_banner> "Linux version 4.6.0-rc1
(***@CookieMonster) (gcc version 5.2.1 20151010 (Ubuntu 5.2.1-22ubuntu1) )
#13 SMP Thu Mar 31 10:33:19 BST 2016\n"
(gdb) print &linux_banner
$2 = (const char (*)[]) 0xc0b00074 <linux_banner>
(gdb) lx-version
L(gdb)
If however, upon connecting to the target, you run 'lx-version', *then* 'bt',
both operate as expected.
Perhaps the string / value gets cached somewhere?
/me is puzzled :D
Bug ID: 20077
Summary: gdb.Value string object has strlen of 1 after
backtrace
Product: gdb
Version: HEAD
Status: NEW
Severity: normal
Priority: P2
Component: python
Assignee: unassigned at sourceware dot org
Reporter: kieranbingham at gmail dot com
Target Milestone: ---
So this is an odd bug to reproduce.
As part of integrating extra debug commands into the Linux Kernel, we created
an lx-version command. It's simple enough and just finds, and displays the
version string from the kernel.
http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/scripts/gdb/linux/proc.py
However, if you run a backtrace, before you use the python lx-version command,
then the string returned prints only one character.
It actually has a strlen of 0 - but I traced through the gdb.Value code, and
found that somewhere it gets +1 added to it, which means it prints just one
char.
(gdb) bt
#0 cpu_v7_do_idle () at .../linux/arch/arm/mm/proc-v7.S:74
#1 0xc0308728 in arch_cpu_idle () at .../linux/arch/arm/kernel/process.c:72
#2 0xc0376b28 in cpuidle_idle_call () at .../linux/kernel/sched/idle.c:151
#3 cpu_idle_loop () at .../linux/kernel/sched/idle.c:242
#4 cpu_startup_entry (state=<optimized out>) at
.../linux/kernel/sched/idle.c:291
#5 0xc0ae8a30 in rest_init () at .../linux/init/main.c:408
#6 0xc0f00c5c in start_kernel () at .../linux/init/main.c:661
#7 0x8020807c in ?? ()
Backtrace stopped: previous frame identical to this frame (corrupt stack?)
(gdb) lx-version
L(gdb) print linux_banner #### Note the 'L' at the beginning of the line
####
$1 = 0xc0b00074 <linux_banner> "Linux version 4.6.0-rc1
(***@CookieMonster) (gcc version 5.2.1 20151010 (Ubuntu 5.2.1-22ubuntu1) )
#13 SMP Thu Mar 31 10:33:19 BST 2016\n"
(gdb) print &linux_banner
$2 = (const char (*)[]) 0xc0b00074 <linux_banner>
(gdb) lx-version
L(gdb)
If however, upon connecting to the target, you run 'lx-version', *then* 'bt',
both operate as expected.
Perhaps the string / value gets cached somewhere?
/me is puzzled :D
--
You are receiving this mail because:
You are on the CC list for the bug.
You are receiving this mail because:
You are on the CC list for the bug.