* next/step after main() function's return
@ 2010-12-27 22:34 Edjunior Barbosa Machado
2010-12-28 5:21 ` Joel Brobecker
2010-12-28 23:05 ` Michael Snyder
0 siblings, 2 replies; 11+ messages in thread
From: Edjunior Barbosa Machado @ 2010-12-27 22:34 UTC (permalink / raw)
To: gdb
Hello,
when issuing a next or step after main() function's return statement, gdb drops to __libc_start_main() from libc on x86 (or generic_start_main() on ppc and so on, depending on the arch if I'm not mistaken). Is it considered a bug or it's just the expected behavior?
Thanks,
--
Edjunior
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: next/step after main() function's return
2010-12-27 22:34 next/step after main() function's return Edjunior Barbosa Machado
@ 2010-12-28 5:21 ` Joel Brobecker
2010-12-28 8:24 ` Jan Kratochvil
2010-12-28 23:05 ` Michael Snyder
1 sibling, 1 reply; 11+ messages in thread
From: Joel Brobecker @ 2010-12-28 5:21 UTC (permalink / raw)
To: Edjunior Barbosa Machado; +Cc: gdb
> when issuing a next or step after main() function's return statement,
> gdb drops to __libc_start_main() from libc on x86 (or
> generic_start_main() on ppc and so on, depending on the arch if I'm
> not mistaken). Is it considered a bug or it's just the expected
> behavior?
I'd say that this is expected behavior. `main' is called by
__libc_start_main, so "next"-ing out of main will land in that function.
--
Joel
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: next/step after main() function's return
2010-12-28 5:21 ` Joel Brobecker
@ 2010-12-28 8:24 ` Jan Kratochvil
2010-12-28 23:02 ` Michael Snyder
0 siblings, 1 reply; 11+ messages in thread
From: Jan Kratochvil @ 2010-12-28 8:24 UTC (permalink / raw)
To: Joel Brobecker; +Cc: Edjunior Barbosa Machado, gdb
On Tue, 28 Dec 2010 06:20:55 +0100, Joel Brobecker wrote:
> > when issuing a next or step after main() function's return statement,
> > gdb drops to __libc_start_main() from libc on x86 (or
> > generic_start_main() on ppc and so on, depending on the arch if I'm
> > not mistaken). Is it considered a bug or it's just the expected
> > behavior?
>
> I'd say that this is expected behavior. `main' is called by
> __libc_start_main, so "next"-ing out of main will land in that function.
With default `set backtrace past-main off' the user may expect it to behave
differently. Still the atexit functions could be "next"ed so GDB would have
to identify somehow their calls.
Regards,
Jan
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: next/step after main() function's return
2010-12-28 8:24 ` Jan Kratochvil
@ 2010-12-28 23:02 ` Michael Snyder
2010-12-29 2:26 ` Joel Brobecker
0 siblings, 1 reply; 11+ messages in thread
From: Michael Snyder @ 2010-12-28 23:02 UTC (permalink / raw)
To: Jan Kratochvil; +Cc: Joel Brobecker, Edjunior Barbosa Machado, gdb
Jan Kratochvil wrote:
> On Tue, 28 Dec 2010 06:20:55 +0100, Joel Brobecker wrote:
>>> when issuing a next or step after main() function's return statement,
>>> gdb drops to __libc_start_main() from libc on x86 (or
>>> generic_start_main() on ppc and so on, depending on the arch if I'm
>>> not mistaken). Is it considered a bug or it's just the expected
>>> behavior?
>> I'd say that this is expected behavior. `main' is called by
>> __libc_start_main, so "next"-ing out of main will land in that function.
>
> With default `set backtrace past-main off' the user may expect it to behave
> differently. Still the atexit functions could be "next"ed so GDB would have
> to identify somehow their calls.
I'm guessing this happens because libc_start_main is compiled with -g.
Otherwise, gdb would continue executing "in the woods" until exit.
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: next/step after main() function's return
2010-12-27 22:34 next/step after main() function's return Edjunior Barbosa Machado
2010-12-28 5:21 ` Joel Brobecker
@ 2010-12-28 23:05 ` Michael Snyder
2010-12-29 3:58 ` Edjunior Barbosa Machado
1 sibling, 1 reply; 11+ messages in thread
From: Michael Snyder @ 2010-12-28 23:05 UTC (permalink / raw)
To: Edjunior Barbosa Machado; +Cc: gdb
Edjunior Barbosa Machado wrote:
> Hello,
>
> when issuing a next or step after main() function's return statement, gdb drops to __libc_start_main() from libc on x86 (or generic_start_main() on ppc and so on, depending on the arch if I'm not mistaken). Is it considered a bug or it's just the expected behavior?
Does the "ending-run.exp" test case pass or fail on this system?
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: next/step after main() function's return
2010-12-28 23:02 ` Michael Snyder
@ 2010-12-29 2:26 ` Joel Brobecker
2010-12-29 2:37 ` Jan Kratochvil
2010-12-29 19:26 ` Michael Snyder
0 siblings, 2 replies; 11+ messages in thread
From: Joel Brobecker @ 2010-12-29 2:26 UTC (permalink / raw)
To: Michael Snyder; +Cc: Jan Kratochvil, Edjunior Barbosa Machado, gdb
> I'm guessing this happens because libc_start_main is compiled with -g.
> Otherwise, gdb would continue executing "in the woods" until exit.
Actually, off-by-one error :-). __libc_start_main is not compiled with
debugging info, but main is. When you do a "next" in main, GDB takes
the debugging info, and computes the address range that we need to
step out of. So, when main returns back to __libc_start_main, we're
done, and tell the user where we are. What you are describing, however,
happens once we land inside __libc_start_main, since there is no line
info to help us compute the next/step range.
--
Joel
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: next/step after main() function's return
2010-12-29 2:26 ` Joel Brobecker
@ 2010-12-29 2:37 ` Jan Kratochvil
2010-12-29 2:49 ` Joel Brobecker
2010-12-29 19:26 ` Michael Snyder
1 sibling, 1 reply; 11+ messages in thread
From: Jan Kratochvil @ 2010-12-29 2:37 UTC (permalink / raw)
To: Joel Brobecker; +Cc: Michael Snyder, Edjunior Barbosa Machado, gdb
On Wed, 29 Dec 2010 03:26:09 +0100, Joel Brobecker wrote:
> > I'm guessing this happens because libc_start_main is compiled with -g.
> > Otherwise, gdb would continue executing "in the woods" until exit.
>
> Actually, off-by-one error :-). __libc_start_main is not compiled with
> debugging info,
It can be, depending on the OS:
7 return 0;
(gdb) next
8 }
(gdb) next
__libc_start_main (main=0x4004c4 <main>, argc=1, ubp_av=0x7fffffffdf08, init=<value optimized out>, fini=<value optimized out>, rtld_fini=<value optimized out>, stack_end=0x7fffffffdef8) at libc-start.c:258
258 exit (result);
(gdb) list
253 #else
254 /* Nothing fancy, just call the function. */
255 result = main (argc, argv, __environ MAIN_AUXVEC_PARAM);
256 #endif
257
258 exit (result);
259 }
(gdb) info source
Current source file is libc-start.c
Compilation directory is /usr/src/debug/glibc-2.12-232-gdbb0472/csu
Located in /usr/src/debug/glibc-2.12-232-gdbb0472/csu/libc-start.c
Contains 259 lines.
Source language is c.
Compiled with DWARF 2 debugging format.
Does not include preprocessor macro info.
(gdb) _
fedora-release-14-1.noarch
glibc-debuginfo-2.12.90-21.x86_64
Regards,
Jan
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: next/step after main() function's return
2010-12-29 2:37 ` Jan Kratochvil
@ 2010-12-29 2:49 ` Joel Brobecker
2010-12-29 3:07 ` Jan Kratochvil
0 siblings, 1 reply; 11+ messages in thread
From: Joel Brobecker @ 2010-12-29 2:49 UTC (permalink / raw)
To: Jan Kratochvil; +Cc: Michael Snyder, Edjunior Barbosa Machado, gdb
> It can be, depending on the OS:
[...]
> fedora-release-14-1.noarch
> glibc-debuginfo-2.12.90-21.x86_64
Indeed! Does glic come with debug info by default on Fedora?
--
Joel
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: next/step after main() function's return
2010-12-29 2:49 ` Joel Brobecker
@ 2010-12-29 3:07 ` Jan Kratochvil
0 siblings, 0 replies; 11+ messages in thread
From: Jan Kratochvil @ 2010-12-29 3:07 UTC (permalink / raw)
To: Joel Brobecker; +Cc: Michael Snyder, Edjunior Barbosa Machado, gdb
On Wed, 29 Dec 2010 03:49:40 +0100, Joel Brobecker wrote:
> > It can be, depending on the OS:
> [...]
> > fedora-release-14-1.noarch
> > glibc-debuginfo-2.12.90-21.x86_64
>
> Indeed! Does glic come with debug info by default on Fedora?
Not in a default installation but `debuginfo-install glibc' will provide it.
In fact `debuginfo-install any package' will always provide also glibc due to
the obvious package dependencies.
Also in Fedora GDB there is a rpm-specific patch
http://pkgs.fedoraproject.org/gitweb/?p=gdb.git;a=blob_plain;f=gdb-6.6-buildid-locate-rpm.patch;hb=master
on top of
[patch 1/2] build id
http://sourceware.org/ml/gdb-patches/2010-11/msg00353.html
providing a suggestion:
gdb-7.2-26.fc14.x86_64
$ echo 'main(){}' | gcc -x c -; gdb -q ./a.out -ex start
Temporary breakpoint 1, 0x0000000000400478 in main ()
Missing separate debuginfos, use: debuginfo-install glibc-2.12.90-21.x86_64
(gdb) _
and therefore I guess users may have it commonly installed.
Thanks,
Jan
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: next/step after main() function's return
2010-12-28 23:05 ` Michael Snyder
@ 2010-12-29 3:58 ` Edjunior Barbosa Machado
0 siblings, 0 replies; 11+ messages in thread
From: Edjunior Barbosa Machado @ 2010-12-29 3:58 UTC (permalink / raw)
To: Michael Snyder; +Cc: gdb
On 12/28/2010 09:05 PM, Michael Snyder wrote:
> Does the "ending-run.exp" test case pass or fail on this system?
>
I had the same results from gdb upstream on both systems (i686 running Debian squeeze/sid and ppc64 running RHEL5.4):
# of expected passes 19
# of unsupported tests 1
with UNSUPPORTED: gdb.base/ending-run.exp: continue after exit
Thanks,
--
Edjunior
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: next/step after main() function's return
2010-12-29 2:26 ` Joel Brobecker
2010-12-29 2:37 ` Jan Kratochvil
@ 2010-12-29 19:26 ` Michael Snyder
1 sibling, 0 replies; 11+ messages in thread
From: Michael Snyder @ 2010-12-29 19:26 UTC (permalink / raw)
To: Joel Brobecker; +Cc: Jan Kratochvil, Edjunior Barbosa Machado, gdb
Joel Brobecker wrote:
>> I'm guessing this happens because libc_start_main is compiled with -g.
>> Otherwise, gdb would continue executing "in the woods" until exit.
>
> Actually, off-by-one error :-). __libc_start_main is not compiled with
> debugging info, but main is. When you do a "next" in main, GDB takes
> the debugging info, and computes the address range that we need to
> step out of. So, when main returns back to __libc_start_main, we're
> done, and tell the user where we are. What you are describing, however,
> happens once we land inside __libc_start_main, since there is no line
> info to help us compute the next/step range.
>
Hmm, yes, and that's when I would expect us to keep stepping, looking
for a line range, until eventually we exit.
^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2010-12-29 19:26 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-12-27 22:34 next/step after main() function's return Edjunior Barbosa Machado
2010-12-28 5:21 ` Joel Brobecker
2010-12-28 8:24 ` Jan Kratochvil
2010-12-28 23:02 ` Michael Snyder
2010-12-29 2:26 ` Joel Brobecker
2010-12-29 2:37 ` Jan Kratochvil
2010-12-29 2:49 ` Joel Brobecker
2010-12-29 3:07 ` Jan Kratochvil
2010-12-29 19:26 ` Michael Snyder
2010-12-28 23:05 ` Michael Snyder
2010-12-29 3:58 ` Edjunior Barbosa Machado
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox