Is GDB 4.16 the recommended version for egcs 1.0.2 ?
Martin Baulig
norwegen@home-of-linux.org
Wed Apr 8 17:25:00 GMT 1998
Hi,
I've got some strange problems with gdb. I'm using
binutils-2.8.1.0.23 (compiled with egcs), egcs 1.0.2 (recompiled
with itself), glibc 2.0.7 (compiled with gcc 2.8.1) and gdb 4.16
(compiled with egcs) on a Linux box.
I'm writing a library called libgtop and an example program
'first' that uses that libray. This example program is
statically linked with that library (libgtop.so and
libgtop_common.so are both part of that library, glibtop_open
and glibtop_read are defined in glibtop.so):
norwegen:~/src/libgtop - 115 > ldd ~/INSTALL/bin/first
libgtop.so.0 => /home/norwegen/INSTALL/lib/libgtop.so.0 (0x40000000)
libgtop_common.so.0 => /home/norwegen/INSTALL/lib/libgtop_common.so.0 (0x40004000)
libc.so.6 => /lib/libc.so.6 (0x4000b000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x00000000)
The problem is with the next two functions glibtop_open and
glibtop_read:
void
glibtop_open (glibtop *server, const char *program_name)
{
char version [BUFSIZ], buffer [BUFSIZ];
memset (server, 0, sizeof (glibtop));
server->name = program_name;
if (pipe (server->input) || pipe (server->output))
glibtop_error (server, _("cannot make a pipe: %s\n"), strerror (errno));
server->pid = fork ();
if (server->pid < 0) {
glibtop_error (server, _("%s: fork failed: %s\n"), strerror (errno));
} else if (server->pid == 0) {
close (0); close (1); /* close (2); */
close (server->input [0]); close (server->output [1]);
dup2 (server->input [1], 1); /* dup2 (server->input [1], 2); */
dup2 (server->output [0], 0);
execl (GTOP_SERVER, NULL);
_exit (2);
}
close (server->input [1]);
close (server->output [0]);
sprintf (version, "%s server %s ready.\n", PACKAGE, VERSION);
glibtop_read (server, strlen (version), buffer);
if (memcmp (version, buffer, strlen (version)))
glibtop_error (server, _("server version is not %s"), VERSION);
}
void
glibtop_read (glibtop *server, size_t size, void *buf)
{
size_t ssize;
if (read (server->input [0], &ssize, sizeof (size_t)) < 0)
glibtop_error (server, _("read size: %s"), strerror (errno));
fprintf (stderr, "Server returned %d bytes; requested %d.\n", ssize, size);
if (size != ssize)
glibtop_error (server, _("got %d bytes but requested %d"), ssize, size);
if (read (server->input [0], buf, size) < 0)
glibtop_error (server, _("read %d bytes: %s"), size, strerror (errno));
}
I use the statically linked version of the example program, set
a breakpoint at glibtop_open and try to single step that
function:
(gdb) break glibtop_open
Breakpoint 1 at 0x8048c77: file open.c, line 31.
(gdb) r
Starting program:
/home/norwegen/src/libgtop/examples/first_static
Breakpoint 1, glibtop_open (server=0xbffff42c, program_name=0xbffff5b4
"/home/norwegen/src/libgtop/examples/first_static") at open.c:31
31 memset (server, 0, sizeof (glibtop));
(gdb) s
33 server->name = program_name;
(gdb)
35 if (pipe (server->input) || pipe (server->output))
(gdb)
38 server->pid = fork ();
(gdb)
40 if (server->pid < 0) {
(gdb)
51 close (server->input [1]);
(gdb)
52 close (server->output [0]);
(gdb)
54 sprintf (version, "%s server %s ready.\n", PACKAGE, VERSION);
(gdb) bt
#0 glibtop_open (server=0xbffff42c, program_name=0xbffff5b4
"/home/norwegen/src/libgtop/examples/first_static") at open.c:54
#1 0x8048a49 in main (argc=1, argv=0xbffff464) at first.c:40
(gdb) s
Server returned -1073753136 bytes; requested 27.
/home/norwegen/src/libgtop/examples/first_static: got -1073753136 bytes but requested 27
Program exited with code 01.
Well, this error message is generated in glibtop_read (if (ssize != size)),
but when I start the same program without the debugger, it works
fine!
Any ideas? The full source code of that library is at:
http://www.home-of-linux.org/gnome/libgtop/
Martin
----------------------------------------------------------------
Martin Baulig - Angewandte Mathematik - Universitaet Trier
baulig@castor.uni-trier.de, http://www.home-of-linux.com/
Key: 1024-bit key with ID C8178435 created 1997/01/24
ID: 67 C1 84 A0 47 F5 11 C5 5F 68 4C 84 99 05 C3 92
Finger baulig@math38 or fetch mykey.asc from the url above
-----------------------------------------------------------------
--
-----BEGIN PGP SIGNATURE-----
Version: 2.6.3i
iQEVAwUBNSumRb1qLpmpm+NRAQGSMQgAvb735IKY3S9ObgJ0YQa5EXJHZgeGSaXX
cofdJjeaI6VugSn04MyTZy5Id2/mF2FYS8pTRqKDTAbqIPtw55peSUNZiDN5Ggjz
emQUcrX+pTo9gSXVTpdPMf42Nl0EV+7tgoBXEa7rFiZzyelUzymkROM7nGlT2l3t
xXKdQj/8VM8lwvf+rvup76TsKnEidSmDryBboOYjsctXGDiTgyUVH1jdpTZkzB4h
KfMaZGgVT8Z2onOdrmWpbBU9RAn8zRVYi7WvyI0IOOc1HAOZ9G2orklbr8NeXkEK
MdN07WNsmdQsDPJcCI6kbujHyOz5UuzPum5n7PK82WXBooco+LoUCw==
=DLTH
-----END PGP SIGNATURE-----
More information about the Gcc
mailing list