[Patch]: bfd/dwarf2.c: ignore DW_LNE_HP_source_file_correlation

Tristan Gingold gingold@adacore.com
Fri Apr 20 10:04:00 GMT 2012


Hi,

HP compilers (I think only on VMS) have added a private extended opcode to LN.
Currently, the dwarf2 reader in bfd emits an error message for unknown LNE and fails.
With this patch, it will ignore this private opcode.

No regressions while cross testing for x86_64-elf.

Ok for trunk ?

Tristan.

bfd/
2012-02-06  Tristan Gingold  <gingold@adacore.com>

	* dwarf2.c (decode_line_info): Ignore
	DW_LNE_HP_source_file_correlation.

diff --git a/bfd/dwarf2.c b/bfd/dwarf2.c
index 66fd16f..dc71073 100644
--- a/bfd/dwarf2.c
+++ b/bfd/dwarf2.c
@@ -1401,6 +1401,7 @@ decode_line_info (struct comp_unit *unit, struct dwarf2_debug *stash)
   unsigned int i, bytes_read, offset_size;
   char *cur_file, *cur_dir;
   unsigned char op_code, extended_op, adj_opcode;
+  unsigned int exop_len;
   bfd_size_type amt;
 
   if (! read_section (abfd, &stash->debug_sections[debug_line],
@@ -1604,8 +1605,8 @@ decode_line_info (struct comp_unit *unit, struct dwarf2_debug *stash)
 	  else switch (op_code)
 	    {
 	    case DW_LNS_extended_op:
-	      /* Ignore length.  */
-	      line_ptr += 1;
+              exop_len = read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
+	      line_ptr += bytes_read;
 	      extended_op = read_1_byte (abfd, line_ptr);
 	      line_ptr += 1;
 
@@ -1658,6 +1659,9 @@ decode_line_info (struct comp_unit *unit, struct dwarf2_debug *stash)
 		  (void) read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
 		  line_ptr += bytes_read;
 		  break;
+                case DW_LNE_HP_source_file_correlation:
+                  line_ptr += exop_len - 1;
+                  break;
 		default:
 		  (*_bfd_error_handler) (_("Dwarf Error: mangled line number section."));
 		  bfd_set_error (bfd_error_bad_value);



More information about the Binutils mailing list