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