This is the mail archive of the
gdb@sourceware.org
mailing list for the GDB project.
Re: cannot find bounds of function error
- From: vijay nag <vijunag at gmail dot com>
- To: Jan Kratochvil <jan dot kratochvil at redhat dot com>
- Cc: "gdb at sourceware dot org" <gdb at sourceware dot org>
- Date: Tue, 13 Aug 2013 14:29:28 +0530
- Subject: Re: cannot find bounds of function error
- References: <CAKhyrx8aDzz78UgWjUN78q7pWZ0=-Y3KH8oOkFb3P2RCK+F52Q at mail dot gmail dot com> <20130724123924 dot GB4376 at host2 dot jankratochvil dot net> <CAKhyrx_LP-rqJMN_CoJ_Hy9X8+1or9CTQab=ioHBfnFBVjQ-nQ at mail dot gmail dot com> <CAKhyrx85ALN2119ZE3mzgp9uxTej=vVcQoxeX7245ZVF6cMR8w at mail dot gmail dot com>
On Wed, Jul 24, 2013 at 6:58 PM, vijay nag <vijunag@gmail.com> wrote:
> On Wed, Jul 24, 2013 at 6:19 PM, vijay nag <vijunag@gmail.com> wrote:
>>
>>
>> On Wednesday, July 24, 2013, Jan Kratochvil <jan.kratochvil@redhat.com>
>> wrote:
>>> On Wed, 24 Jul 2013 11:44:15 +0200, vijay nag wrote:
>>>> My latest gdb-7.5 barfs out "cannot find bounds of current function"
>>>> error when it encounters GNU_IFUNC while executing one line of code at
>>>> a time using "next" command
>>>
>>> Sorry I did not analyze exactly your case but ensure your glibc contains
>>> this
>>> patch fixing how GDB deals with gnu-ifuncs:
>>>
>>> commit f85fa27058eb7d4b56b8deaf885064cf8d730f68
>>> Author: H.J. Lu <hjl.tools@gmail.com>
>>> Date: Thu Aug 9 16:04:37 2012 -0700
>>> Avoid DWARF definition DIE on ifunc symbols
>>>
>>> Besides that there is already stable gdb-7.6 but I do not know about any
>>> specific change there for gnu-ifunc.
>>>
>>>
>>> Jan
>>>
>> Nice to hear from you again and I appreciate your quick turn-around. I shall
>> patch the changes to my glibc and check if that is just enough for the
>> gdb-7.5 to get going.
>>
>> Thanks
>
>
> I do see the patch in my glibc-2.17. What could be the issue here ?
Jan,
First of all, glibc-2.17 seems to be having the fix that you mentioned.
Second of all, I upgraded gdb to 7.6 and still encountering the same problem.
Gdb is confused when the program jumps to PLT in-order to execute
GNU-IFUNC and any number of "Next" command will not make the program
proceed any further.
(gdb) p $eip
$1 = (void (*)()) 0x8048430
(gdb) n
Cannot find bounds of current function
(gdb) n
Cannot find bounds of current function
(gdb) n
Cannot find bounds of current function
(gdb) display $eip
1: $eip = (void (*)()) 0x8048430
(gdb)
(gdb) n
Cannot find bounds of current function
(gdb) n
Cannot find bounds of current function
(gdb) n
Cannot find bounds of current function
(gdb) n
Cannot find bounds of current function
(gdb) p $eip
$2 = (void (*)()) 0x8048430
(gdb)
I was looking the code diff of "step_once" function in the version 7.6 and 6.3
infcmd.c
const char *name;
if (find_pc_partial_function (pc, &name,
&tp->control.step_range_start,
&tp->control.step_range_end) == 0)
error (_("Cannot find bounds of current function"));
target_terminal_ours ();
printf_filtered (_("Single stepping until exit from function %s,"
"\nwhich has no line number information.\n"),
name);
}
Earlier version had a plain printf for the error line, where as in
the newer versions it has been replaced by error_() which seems to be
unwinding the current gdb stack by doing a long-jump. Any statements
after error() are superfluously existing without any effect.