Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Michal Ludvig <mludvig@suse.cz>
To: GDB Patches <gdb-patches@sources.redhat.com>
Subject: [RFA] Added verbosity to dwarf2*
Date: Sat, 14 Dec 2002 13:50:00 -0000	[thread overview]
Message-ID: <3DFB79B8.5030306@suse.cz> (raw)
In-Reply-To: <3DFB7943.3060702@suse.cz>

Oops, should have been [RFA], not [PATCH]. Sorry...

Michal Ludvig

Michal Ludvig wrote:
> Hi all,
> this patch adds some more verbosity to GDB's error messages. I've found 
> it very useful for bugreports, because you can locate the failing 
> testcase much faster when knowing in what objfile it fails.
> It also helps GCC developers hunting their bugs in DWARF2 generator.
> 
> OK to commit to mainline? And to 5.3 branch?
> 
> Michal Ludvig
> 
> 
> ------------------------------------------------------------------------
> 
> 2002-12-14  Michal Ludvig  <mludvig@suse.cz>
> 
> 	* dwarf2cfi.c (pointer_encoding): Added new parameter.
> 	* dwarf2cfi.c, dwarf2read.c: Changed all warnings and
> 	error messages to contain BFD filename. 
> 
> Index: dwarf2cfi.c
> ===================================================================
> RCS file: /cvs/src/src/gdb/dwarf2cfi.c,v
> retrieving revision 1.20
> diff -u -p -r1.20 dwarf2cfi.c
> --- dwarf2cfi.c	2 Nov 2002 14:59:10 -0000	1.20
> +++ dwarf2cfi.c	11 Nov 2002 15:53:44 -0000
> @@ -194,7 +194,7 @@ static LONGEST read_sleb128 (bfd *abfd, 
>  static CORE_ADDR read_pointer (bfd *abfd, char **p);
>  static CORE_ADDR read_encoded_pointer (bfd *abfd, char **p,
>  				       unsigned char encoding);
> -static enum ptr_encoding pointer_encoding (unsigned char encoding);
> +static enum ptr_encoding pointer_encoding (unsigned char encoding, struct objfile *objfile);
>  
>  static LONGEST read_initial_length (bfd *abfd, char *buf, int *bytes_read);
>  static ULONGEST read_length (bfd *abfd, char *buf, int *bytes_read,
> @@ -457,7 +457,8 @@ read_pointer (bfd *abfd, char **p)
>      case 8:
>        return read_8u (abfd, p);
>      default:
> -      error ("dwarf cfi error: unsupported target address length.");
> +      error ("dwarf cfi error: unsupported target address length [%s]", 
> +		      bfd_get_filename (abfd));
>      }
>  }
>  
> @@ -504,7 +505,8 @@ read_encoded_pointer (bfd *abfd, char **
>  
>      default:
>        internal_error (__FILE__, __LINE__,
> -		      "read_encoded_pointer: unknown pointer encoding");
> +		      "read_encoded_pointer: unknown pointer encoding [%s]",
> +		      bfd_get_filename (abfd));
>      }
>  
>    return ret;
> @@ -515,12 +517,13 @@ read_encoded_pointer (bfd *abfd, char **
>     - encoding & 0x70 : type (absolute, relative, ...)
>     - encoding & 0x80 : indirect flag (DW_EH_PE_indirect == 0x80).  */
>  enum ptr_encoding
> -pointer_encoding (unsigned char encoding)
> +pointer_encoding (unsigned char encoding, struct objfile *objfile)
>  {
>    int ret;
>  
>    if (encoding & DW_EH_PE_indirect)
> -    warning ("CFI: Unsupported pointer encoding: DW_EH_PE_indirect");
> +    warning ("CFI: Unsupported pointer encoding: DW_EH_PE_indirect [%s]",
> +		    objfile->name);
>  
>    switch (encoding & 0x70)
>      {
> @@ -532,7 +535,8 @@ pointer_encoding (unsigned char encoding
>        ret = encoding & 0x70;
>        break;
>      default:
> -      internal_error (__FILE__, __LINE__, "CFI: unknown pointer encoding");
> +      internal_error (__FILE__, __LINE__, "CFI: unknown pointer encoding [%s]", 
> +		      objfile->name);
>      }
>    return ret;
>  }
> @@ -609,8 +613,9 @@ execute_cfa_program (struct objfile *obj
>  	    fs->pc = read_encoded_pointer (objfile->obfd, &insn_ptr,
>  					   fs->addr_encoding);
>  
> -	    if (pointer_encoding (fs->addr_encoding) != PE_absptr)
> -	      warning ("CFI: DW_CFA_set_loc uses relative addressing");
> +	    if (pointer_encoding (fs->addr_encoding, objfile) != PE_absptr)
> +	      warning ("CFI: DW_CFA_set_loc uses relative addressing [%s]", 
> +			      objfile->name);
>  
>  	    break;
>  
> @@ -759,7 +764,8 @@ execute_cfa_program (struct objfile *obj
>  	    break;
>  
>  	  default:
> -	    error ("dwarf cfi error: unknown cfa instruction %d.", insn);
> +	    error ("dwarf cfi error: unknown cfa instruction %d [%s]", insn, 
> +			    objfile->name);
>  	  }
>      }
>  }
> @@ -1022,25 +1028,25 @@ execute_stack_op (struct objfile *objfil
>  
>  	case DW_OP_dup:
>  	  if (stack_elt < 1)
> -	    internal_error (__FILE__, __LINE__, "execute_stack_op error");
> +	    internal_error (__FILE__, __LINE__, "execute_stack_op error [%s]", objfile->name);
>  	  result = stack[stack_elt - 1];
>  	  break;
>  
>  	case DW_OP_drop:
>  	  if (--stack_elt < 0)
> -	    internal_error (__FILE__, __LINE__, "execute_stack_op error");
> +	    internal_error (__FILE__, __LINE__, "execute_stack_op error [%s]", objfile->name);
>  	  goto no_push;
>  
>  	case DW_OP_pick:
>  	  offset = *op_ptr++;
>  	  if (offset >= stack_elt - 1)
> -	    internal_error (__FILE__, __LINE__, "execute_stack_op error");
> +	    internal_error (__FILE__, __LINE__, "execute_stack_op error [%s]", objfile->name);
>  	  result = stack[stack_elt - 1 - offset];
>  	  break;
>  
>  	case DW_OP_over:
>  	  if (stack_elt < 2)
> -	    internal_error (__FILE__, __LINE__, "execute_stack_op error");
> +	    internal_error (__FILE__, __LINE__, "execute_stack_op error [%s]", objfile->name);
>  	  result = stack[stack_elt - 2];
>  	  break;
>  
> @@ -1049,7 +1055,7 @@ execute_stack_op (struct objfile *objfil
>  	    CORE_ADDR t1, t2, t3;
>  
>  	    if (stack_elt < 3)
> -	      internal_error (__FILE__, __LINE__, "execute_stack_op error");
> +	      internal_error (__FILE__, __LINE__, "execute_stack_op error [%s]", objfile->name);
>  	    t1 = stack[stack_elt - 1];
>  	    t2 = stack[stack_elt - 2];
>  	    t3 = stack[stack_elt - 3];
> @@ -1067,7 +1073,7 @@ execute_stack_op (struct objfile *objfil
>  	case DW_OP_plus_uconst:
>  	  /* Unary operations.  */
>  	  if (--stack_elt < 0)
> -	    internal_error (__FILE__, __LINE__, "execute_stack_op error");
> +	    internal_error (__FILE__, __LINE__, "execute_stack_op error [%s]", objfile->name);
>  	  result = stack[stack_elt];
>  
>  	  switch (op)
> @@ -1077,7 +1083,7 @@ execute_stack_op (struct objfile *objfil
>  		int len = TARGET_ADDR_BIT / TARGET_CHAR_BIT;
>  		if (len != 4 && len != 8)
>  		  internal_error (__FILE__, __LINE__,
> -				  "execute_stack_op error");
> +				  "execute_stack_op error [%s]", objfile->name);
>  		result = read_memory_unsigned_integer (result, len);
>  	      }
>  	      break;
> @@ -1087,7 +1093,7 @@ execute_stack_op (struct objfile *objfil
>  		int len = *op_ptr++;
>  		if (len != 1 && len != 2 && len != 4 && len != 8)
>  		  internal_error (__FILE__, __LINE__,
> -				  "execute_stack_op error");
> +				  "execute_stack_op error [%s]", objfile->name);
>  		result = read_memory_unsigned_integer (result, len);
>  	      }
>  	      break;
> @@ -1127,7 +1133,7 @@ execute_stack_op (struct objfile *objfil
>  	    /* Binary operations.  */
>  	    CORE_ADDR first, second;
>  	    if ((stack_elt -= 2) < 0)
> -	      internal_error (__FILE__, __LINE__, "execute_stack_op error");
> +	      internal_error (__FILE__, __LINE__, "execute_stack_op error [%s]", objfile->name);
>  	    second = stack[stack_elt];
>  	    first = stack[stack_elt + 1];
>  
> @@ -1185,7 +1191,7 @@ execute_stack_op (struct objfile *objfil
>  		result = (LONGEST) first != (LONGEST) second;
>  		break;
>  	      default:
> -		error ("execute_stack_op: Unknown DW_OP_ value");
> +		error ("execute_stack_op: Unknown DW_OP_ value [%s]", objfile->name);
>  		break;
>  	      }
>  	  }
> @@ -1198,7 +1204,7 @@ execute_stack_op (struct objfile *objfil
>  
>  	case DW_OP_bra:
>  	  if (--stack_elt < 0)
> -	    internal_error (__FILE__, __LINE__, "execute_stack_op error");
> +	    internal_error (__FILE__, __LINE__, "execute_stack_op error [%s]", objfile->name);
>  	  offset = read_2s (objfile->obfd, &op_ptr);
>  	  if (stack[stack_elt] != 0)
>  	    op_ptr += offset;
> @@ -1208,12 +1214,12 @@ execute_stack_op (struct objfile *objfil
>  	  goto no_push;
>  
>  	default:
> -	  internal_error (__FILE__, __LINE__, "execute_stack_op error");
> +	  internal_error (__FILE__, __LINE__, "execute_stack_op error [%s]", objfile->name);
>  	}
>  
>        /* Most things push a result value.  */
>        if ((size_t) stack_elt >= sizeof (stack) / sizeof (*stack))
> -	internal_error (__FILE__, __LINE__, "execute_stack_op error");
> +	internal_error (__FILE__, __LINE__, "execute_stack_op error [%s]", objfile->name);
>        stack[++stack_elt] = result;
>      no_push:;
>      }
> @@ -1221,7 +1227,7 @@ execute_stack_op (struct objfile *objfil
>    /* We were executing this program to get a value.  It should be
>       at top of stack.  */
>    if (--stack_elt < 0)
> -    internal_error (__FILE__, __LINE__, "execute_stack_op error");
> +    internal_error (__FILE__, __LINE__, "execute_stack_op error [%s]", objfile->name);
>    return stack[stack_elt];
>  }
>  
> @@ -1306,7 +1312,8 @@ update_context (struct context *context,
>  	      orig_context->reg[fs->regs.reg[i].loc.reg].loc.addr;
>  	    break;
>  	  default:
> -	    internal_error (__FILE__, __LINE__, "bad switch");
> +	    internal_error (__FILE__, __LINE__, "bad switch 0x%02X", 
> +			    orig_context->reg[fs->regs.reg[i].loc.reg].how);
>  	  }
>  	break;
>        case REG_SAVED_EXP:
> @@ -1323,7 +1330,8 @@ update_context (struct context *context,
>  	}
>  	break;
>        default:
> -	internal_error (__FILE__, __LINE__, "bad switch");
> +	internal_error (__FILE__, __LINE__, "bad switch 0x%02X",
> +			fs->regs.reg[i].how);
>        }
>    get_reg ((char *) &context->ra, context, fs->retaddr_column);
>    unwind_tmp_obstack_free ();
> @@ -1533,13 +1541,14 @@ parse_frame_info (struct objfile *objfil
>  		      cie = cie->next;
>  		    }
>  		  if (!cie)
> -		    error ("CFI: can't find CIE pointer");
> +		    error ("CFI: can't find CIE pointer [%s]", 
> +				    bfd_get_filename (abfd));
>  		}
>  
>  	      init_loc = read_encoded_pointer (abfd, &start,
>  					       cie->addr_encoding);
>  
> -	      switch (pointer_encoding (cie->addr_encoding))
> +	      switch (pointer_encoding (cie->addr_encoding, objfile))
>  		{
>  		case PE_absptr:
>  		  break;
> @@ -1549,7 +1558,8 @@ parse_frame_info (struct objfile *objfil
>  		  init_loc += curr_section_vma + start - frame_buffer;
>  		  break;
>  		default:
> -		  warning ("CFI: Unsupported pointer encoding\n");
> +		  warning ("CFI: Unsupported pointer encoding [%s]",
> +				  bfd_get_filename (abfd));
>  		}
>  
>  	      /* For relocatable objects we must add an offset telling
> @@ -1875,7 +1885,8 @@ cfi_get_saved_register (char *raw_buffer
>  	  break;
>  	default:
>  	  internal_error (__FILE__, __LINE__,
> -			  "cfi_get_saved_register: unknown register rule");
> +			  "cfi_get_saved_register: unknown register rule 0x%02X",
> +			  UNWIND_CONTEXT (frame)->reg[regnum].how);
>  	}
>      }
>  }
> Index: dwarf2read.c
> ===================================================================
> RCS file: /cvs/src/src/gdb/dwarf2read.c,v
> retrieving revision 1.75
> diff -u -p -r1.75 dwarf2read.c
> --- dwarf2read.c	11 Nov 2002 00:55:34 -0000	1.75
> +++ dwarf2read.c	11 Nov 2002 15:53:46 -0000
> @@ -1228,22 +1228,24 @@ dwarf2_build_psymtabs_hard (struct objfi
>  
>        if (cu_header.version != 2)
>  	{
> -	  error ("Dwarf Error: wrong version in compilation unit header.");
> +	  error ("Dwarf Error: wrong version in compilation unit header (is %d, should be %d) [%s]", cu_header.version, 2, bfd_get_filename (abfd));
>  	  return;
>  	}
>        if (cu_header.abbrev_offset >= dwarf_abbrev_size)
>  	{
> -	  error ("Dwarf Error: bad offset (0x%lx) in compilation unit header (offset 0x%lx + 6).",
> +	  error ("Dwarf Error: bad offset (0x%lx) in compilation unit header (offset 0x%lx + 6) [%s]",
>  		 (long) cu_header.abbrev_offset,
> -		 (long) (beg_of_comp_unit - dwarf_info_buffer));
> +		 (long) (beg_of_comp_unit - dwarf_info_buffer),
> +		 bfd_get_filename (abfd));
>  	  return;
>  	}
>        if (beg_of_comp_unit + cu_header.length + cu_header.initial_length_size
>  	  > dwarf_info_buffer + dwarf_info_size)
>  	{
> -	  error ("Dwarf Error: bad length (0x%lx) in compilation unit header (offset 0x%lx + 0).",
> +	  error ("Dwarf Error: bad length (0x%lx) in compilation unit header (offset 0x%lx + 0) [%s]",
>  		 (long) cu_header.length,
> -		 (long) (beg_of_comp_unit - dwarf_info_buffer));
> +		 (long) (beg_of_comp_unit - dwarf_info_buffer),
> +		 bfd_get_filename (abfd));
>  	  return;
>  	}
>        /* Complete the cu_header */
> @@ -3634,7 +3636,8 @@ read_partial_die (struct partial_die_inf
>    abbrev = dwarf2_lookup_abbrev (abbrev_number, cu_header);
>    if (!abbrev)
>      {
> -      error ("Dwarf Error: Could not find abbrev number %d.", abbrev_number);
> +      error ("Dwarf Error: Could not find abbrev number %d [%s]", abbrev_number,
> +		      bfd_get_filename (abfd));
>      }
>    part_die->offset = info_ptr - dwarf_info_buffer;
>    part_die->tag = abbrev->tag;
> @@ -3778,7 +3781,8 @@ read_full_die (struct die_info **diep, b
>    abbrev = dwarf2_lookup_abbrev (abbrev_number, cu_header);
>    if (!abbrev)
>      {
> -      error ("Dwarf Error: could not find abbrev number %d.", abbrev_number);
> +      error ("Dwarf Error: could not find abbrev number %d [%s]", abbrev_number, 
> +		      bfd_get_filename (abfd));
>      }
>    die = dwarf_alloc_die ();
>    die->offset = offset;
> @@ -3914,8 +3918,9 @@ read_attribute_value (struct attribute *
>        info_ptr = read_attribute_value (attr, form, abfd, info_ptr, cu_header);
>        break;
>      default:
> -      error ("Dwarf Error: Cannot handle %s in DWARF reader.",
> -	     dwarf_form_name (form));
> +      error ("Dwarf Error: Cannot handle %s in DWARF reader [%s]",
> +	     dwarf_form_name (form),
> +	     bfd_get_filename (abfd));
>      }
>    return info_ptr;
>  }
> @@ -3996,7 +4001,8 @@ read_address (bfd *abfd, char *buf, cons
>  	  break;
>  	default:
>  	  internal_error (__FILE__, __LINE__,
> -			  "read_address: bad switch, signed");
> +			  "read_address: bad switch, signed [%s]",
> +			  bfd_get_filename (abfd));
>  	}
>      }
>    else
> @@ -4014,7 +4020,8 @@ read_address (bfd *abfd, char *buf, cons
>  	  break;
>  	default:
>  	  internal_error (__FILE__, __LINE__,
> -			  "read_address: bad switch, unsigned");
> +			  "read_address: bad switch, unsigned [%s]",
> +			  bfd_get_filename (abfd));
>  	}
>      }
>  
> @@ -4129,7 +4136,8 @@ read_offset (bfd *abfd, char *buf, const
>        break;
>      default:
>        internal_error (__FILE__, __LINE__,
> -		      "read_offset: bad switch");
> +		      "read_offset: bad switch [%s]",
> +		      bfd_get_filename (abfd));
>      }
>  
>   return retval;
> @@ -4171,12 +4179,14 @@ read_indirect_string (bfd *abfd, char *b
>  
>    if (dwarf_str_buffer == NULL)
>      {
> -      error ("DW_FORM_strp used without .debug_str section");
> +      error ("DW_FORM_strp used without .debug_str section [%s]",
> +		      bfd_get_filename (abfd));
>        return NULL;
>      }
>    if (str_offset >= dwarf_str_size)
>      {
> -      error ("DW_FORM_strp pointing outside of .debug_str section");
> +      error ("DW_FORM_strp pointing outside of .debug_str section [%s]",
> +		      bfd_get_filename (abfd));
>        return NULL;
>      }
>    gdb_assert (HOST_CHAR_BIT == 8);
> @@ -5187,7 +5197,8 @@ die_type (struct die_info *die, struct o
>        type_die = follow_die_ref (ref);
>        if (!type_die)
>  	{
> -	  error ("Dwarf Error: Cannot find referent at offset %d.", ref);
> +	  error ("Dwarf Error: Cannot find referent at offset %d [%s]", 
> +			  ref, objfile->name);
>  	  return NULL;
>  	}
>      }
> @@ -5195,7 +5206,8 @@ die_type (struct die_info *die, struct o
>    if (!type)
>      {
>        dump_die (type_die);
> -      error ("Dwarf Error: Problem turning type die at offset into gdb type.");
> +      error ("Dwarf Error: Problem turning type die at offset into gdb type [%s]",
> +		      objfile->name);
>      }
>    return type;
>  }
> @@ -5219,7 +5231,8 @@ die_containing_type (struct die_info *di
>        type_die = follow_die_ref (ref);
>        if (!type_die)
>  	{
> -	  error ("Dwarf Error: Cannot find referent at offset %d.", ref);
> +	  error ("Dwarf Error: Cannot find referent at offset %d [%s]", ref, 
> +			  objfile->name);
>  	  return NULL;
>  	}
>        type = tag_type_to_type (type_die, objfile, cu_header);
> @@ -5228,7 +5241,8 @@ die_containing_type (struct die_info *di
>      {
>        if (type_die)
>  	dump_die (type_die);
> -      error ("Dwarf Error: Problem turning containing type into gdb type.");
> +      error ("Dwarf Error: Problem turning containing type into gdb type [%s]", 
> +		      objfile->name);
>      }
>    return type;
>  }
> @@ -5265,7 +5279,8 @@ tag_type_to_type (struct die_info *die, 
>        if (!die->type)
>  	{
>  	  dump_die (die);
> -	  error ("Dwarf Error: Cannot find type of die.");
> +	  error ("Dwarf Error: Cannot find type of die [%s]", 
> +			  objfile->name);
>  	}
>        return die->type;
>      }
> @@ -6437,8 +6452,8 @@ dwarf2_fundamental_type (struct objfile 
>  {
>    if (typeid < 0 || typeid >= FT_NUM_MEMBERS)
>      {
> -      error ("Dwarf Error: internal error - invalid fundamental type id %d.",
> -	     typeid);
> +      error ("Dwarf Error: internal error - invalid fundamental type id %d [%s]",
> +	     typeid, objfile->name);
>      }
>  
>    /* Look for this particular type in the fundamental type vector.  If


  reply	other threads:[~2002-12-14 18:34 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2002-12-14 10:34 [PATCH] " Michal Ludvig
2002-12-14 13:50 ` Michal Ludvig [this message]
2002-12-14 22:18   ` [RFA] " Eli Zaretskii
2002-12-16  5:58     ` Michal Ludvig
2002-12-16 10:43       ` Eli Zaretskii
2003-02-03 14:43 ` [PATCH] " Michal Ludvig
2003-02-03 15:26   ` Andrew Cagney
2003-02-03 15:49     ` Michal Ludvig
2003-02-03 15:59       ` Andrew Cagney

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=3DFB79B8.5030306@suse.cz \
    --to=mludvig@suse.cz \
    --cc=gdb-patches@sources.redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox