Hi,

I was hoping I could get some help to track down a problem, I need some
pointers of where to start looking in the gdb code.

I am using gdb-6.3 on a sparc-solaris-6.3 SunFireV440. My problems really
started when I installed the October patch cluster for Solaris. It seems all
signal related functionality in gdb broke.

I read the patch cluster release notes and it was stated the release broke
gdb, please use mdb instead. Undetered, I registered a defect in the gdb
defect database (2022) and started to look for a solution.

I first it just seemed to be a problem with quitting gdb (as stated by Sun)
and I devised a patch which fixed the problem and attached it to defect
2022. As I dug deeper into the other problems I found them to be signal
related too. I am sure there is a more deep rooted problem and my patch only
fixes one symptom.

For example, the test testsuite/gdb.base/signals.exp fails on Solaris10 but
not on Solaris9. I have traced through the test using gdb on both versions
of Solaris.

./gdb gdb --nx --command=gdb.cmd testsuite/gdb.base/signals

gdb.cmd
br main
r
set variable count = 0
break handler if 0
set $handler_breakpoint_number = $bpnum
next
next
next
p func1 ()
p count
condition $handler_breakpoint_number
next
next

then I issue:
p func(1)
I get message about interrupted call from gdb

The failure occurs when the backtrace is printed.

On Solaris 9 the session is:
R500.isis.279> ./gdb gdb
GNU gdb 6.3
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain
conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "sparc-sun-solaris2.9"...
Setting up the environment for debugging gdb.
Breakpoint 1 at 0x54634: file utils.c, line 849.
Breakpoint 2 at 0xa1ea8: file ./cli/cli-cmds.c, line 193.
 (top-gdb) r --nx --command=~/gdb.cmd testsuite/gdb.base/signals
Starting program:
/export/home/src_dev/R500/vobs/unxloc/sparc64-sun-solaris2.9/gdb-6.3/gdb/gdb
--nx --command=~/gdb.cmd testsuite/gdb.base/signals
GNU gdb 6.3
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain
conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "sparc-sun-solaris2.9"...
Breakpoint 1 at 0x1073c: file signals.c, line 46.

Breakpoint 1, main () at signals.c:46
46      signals.c: No such file or directory.
        in signals.c
Breakpoint 2 at 0x106b0: file signals.c, line 22.
49      in signals.c
51      in signals.c
52      in signals.c
$1 = void
$2 = 1
53      in signals.c
54      in signals.c
(gdb) p func1()

Breakpoint 2, handler (sig=14) at signals.c:22
22      in signals.c
The program being debugged stopped while in a function called from GDB.
When the function (func1) is done executing, GDB will silently
stop (instead of continuing to evaluate the expression containing
the function call).
(gdb) bt
#0  handler (sig=14) at signals.c:22
#1  <signal handler called>
#2  func1 () at signals.c:28
#3  <function called from gdb>
#4  main () at signals.c:54
(gdb)

as expected.

On Solaris10:
R500.ramses.285> ./gdb gdb
GNU gdb 6.3
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain
conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "sparc-sun-solaris2.10"...
Setting up the environment for debugging gdb.
Breakpoint 1 at 0x55994: file utils.c, line 849.
Breakpoint 2 at 0xa3314: file ./cli/cli-cmds.c, line 193.
(top-gdb) r --nx --command=~/gdb.cmd testsuite/gdb.base/signals
Starting program:
/export/home/src_dev/R500/vobs/unxloc/sparc64-sun-solaris2.10/gdb-6.3/gdb/gd
b --nx --command=~/gdb.cmd testsuite/gdb.base/signals
warning: Lowest section in /lib/libdl.so.1 is .dynamic at 00000094
GNU gdb 6.3
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain
conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "sparc-sun-solaris2.10"...
Breakpoint 1 at 0x10724: file signals.c, line 46.

Breakpoint 1, main () at signals.c:46
46      signals.c: No such file or directory.
        in signals.c
Breakpoint 2 at 0x10698: file signals.c, line 22.
49      in signals.c
51      in signals.c
52      in signals.c
$1 = void
$2 = 1
53      in signals.c
54      in signals.c
 (gdb) p func1()

Breakpoint 2, handler (sig=14) at signals.c:22
22      in signals.c
The program being debugged stopped while in a function called from GDB.
When the function (func1) is done executing, GDB will silently
stop (instead of continuing to evaluate the expression containing
the function call).
(gdb) bt
#0  handler (sig=14) at signals.c:22
#1  0xff23fed0 in __sighndlr () from /lib/libc.so.1
#2  0xff234ffc in call_user_handler () from /lib/libc.so.1
#3  0xffbff8ac in ?? ()
#4  0xffbff8ac in ?? ()
Previous frame identical to this frame (corrupt stack?)
(gdb)

Corrupt frame ??

I used the gdb to look at the call setup, it looks the same on both
machines. I also looked at the backtrace command.

On Solaris9 frame 1 has type SIGTRAMP_FRAME, on Solaris 10 frame 1 is a
normal frame.

What I need to know is how to debug the setup of the signal handler frame.
Where is it set up? and how is this code invoked?

Any help would be appreciated

Regards,
Steve Williams




_______________________________________________
Bug-gdb mailing list
Bug-gdb@gnu.org
http://lists.gnu.org/mailman/listinfo/bug-gdb

Reply via email to