From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 29400 invoked by alias); 14 Dec 2002 18:34:35 -0000 Mailing-List: contact gdb-patches-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Received: (qmail 29391 invoked from network); 14 Dec 2002 18:34:34 -0000 Received: from unknown (HELO kerberos.suse.cz) (195.47.106.10) by sources.redhat.com with SMTP; 14 Dec 2002 18:34:34 -0000 Received: from chimera.suse.cz (chimera.suse.cz [10.20.0.2]) by kerberos.suse.cz (SuSE SMTP server) with ESMTP id 41F3A59D34D for ; Sat, 14 Dec 2002 19:34:33 +0100 (CET) Received: from suse.cz (naga.suse.cz [10.20.1.16]) by chimera.suse.cz (8.11.0/8.11.0/SuSE Linux 8.11.0-0.4) with ESMTP id gBEIYXX18469 for ; Sat, 14 Dec 2002 19:34:33 +0100 X-Authentication-Warning: chimera.suse.cz: Host naga.suse.cz [10.20.1.16] claimed to be suse.cz Message-ID: <3DFB79B8.5030306@suse.cz> Date: Sat, 14 Dec 2002 13:50:00 -0000 From: Michal Ludvig Organization: SuSE CR User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.2.1) Gecko/20021130 X-Accept-Language: cs, cz, en MIME-Version: 1.0 To: GDB Patches Subject: [RFA] Added verbosity to dwarf2* References: <3DFB7943.3060702@suse.cz> In-Reply-To: <3DFB7943.3060702@suse.cz> Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit X-SW-Source: 2002-12/txt/msg00448.txt.bz2 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 > > * 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