This is the mail archive of the gdb-prs@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug python/20077] New: gdb.Value string object has strlen of 1 after backtrace


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
(kbingham@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.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]