🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

1 total messages Started by Graeme Clark Wed, 02 Aug 1989 04:51
bug found, along with fix
#222
Author: Graeme Clark
Date: Wed, 02 Aug 1989 04:51
103 lines
3268 bytes
We found the following bug in gdb version 3.2, running on a
Sun 4 running (I believe) SunOS 4.0:

Script started on Tue Aug  1 21:42:55 1989
% cat bug.c
struct foo
  {
  };
main()
  {
  struct foo f;
  }
% gcc -g bug.c
% gdb a.out
GDB 3.2, Copyright (C) 1988 Free Software Foundation, Inc.
There is ABSOLUTELY NO WARRANTY for GDB; type "info warranty" for details.
GDB is free software and you are welcome to distribute copies of it
 under certain conditions; type "info copying" to see the conditions.
Reading symbol data from /spring/clark/a.out...done.
Type "help" for a list of commands.
(gdb) list
Reading in symbols for bug.c...Segmentation fault (core dumped)
% exit
%
script done on Tue Aug  1 21:43:38 1989

We were able to fix the problem by making the following small change
to the file dbxread.c:

% diff -c dbxread.c new_dbxread.c
*** dbxread.c	Mon Jul 10 19:38:46 1989
--- new_dbxread.c	Mon Jul 31 14:05:20 1989
***************
*** 4159,4164 ****
--- 4159,4165 ----
    char *name;
    register char *p;
    int nfields = 0;
+   int MethodFound = 0;
    register int n;
  
    register struct next_fnfieldlist *mainlist = 0;
***************
*** 4208,4214 ****
  	      break;
  	    case '1':
  	      via_virtual = 1;
! 	      break;
  	    default:
  	      error ("Invalid symbol data: bad visibility format at symtab pos %d",
  		     symnum);
--- 4209,4215 ----
  	      break;
  	    case '1':
  	      via_virtual = 1;
!               break;
  	    default:
  	      error ("Invalid symbol data: bad visibility format at symtab pos %d",
  		     symnum);
***************
*** 4273,4279 ****
--- 4274,4283 ----
  
        /* C++: Check to see if we have hit the methods yet. */
        if (p[1] == ':')
+         {
+         MethodFound = 1;
  	break;
+         }
  
        *pp = p + 1;
  
***************
*** 4341,4347 ****
       OPERATOR::*.methods, where OPERATOR is the string "operator",
       `*' holds the place for an operator name (such as `+=')
       and `.' marks the end of the operator name.  */
!   if (p[1] == ':')
      {
        /* Now, read in the methods.  To simplify matters, we
  	 "unread" the name that has been read, so that we can
--- 4345,4351 ----
       OPERATOR::*.methods, where OPERATOR is the string "operator",
       `*' holds the place for an operator name (such as `+=')
       and `.' marks the end of the operator name.  */
!   if (MethodFound)
      {
        /* Now, read in the methods.  To simplify matters, we
  	 "unread" the name that has been read, so that we can
***************
*** 4348,4353 ****
--- 4352,4358 ----
  	 start from the top.  */
  
        p = *pp;
+ 
  
        /* chill the list of fields: the last entry (at the head)
           is a partially constructed entry which we now scrub.  */
% 

Graeme Clark
clark@cs.ubc.ca
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads