[Lsb-messages] /var/www/bzr/lsb/devel/misc-test r2349: improve elfchk handling of dwarf sections (bug 3701)

Mats Wichmann mats at linuxfoundation.org
Fri Jan 25 14:28:29 UTC 2013


------------------------------------------------------------
revno: 2349
committer: Mats Wichmann <mats at linuxfoundation.org>
branch nick: misc-test
timestamp: Fri 2013-01-25 07:28:29 -0700
message:
  improve elfchk handling of dwarf sections (bug 3701)
modified:
  elfchk/dwarf.c
  elfchk/dwarf.h
  package/Makefile
-------------- next part --------------
=== modified file 'elfchk/dwarf.c'
--- a/elfchk/dwarf.c	2012-04-27 12:23:39 +0000
+++ b/elfchk/dwarf.c	2013-01-25 14:28:29 +0000
@@ -388,7 +388,6 @@
 	}
 	break;
 
-#ifdef notdef
     case DW_CFA_expression:
 	if (elfchk_debug & DEBUG_DWARF_CONTENTS) {
 	    fprintf(stderr, "DW_CFA_expression\n");
@@ -399,7 +398,33 @@
 	ptr += numused;
 	used += numused;
 	break;
-#endif
+
+    case DW_CFA_def_cfa_expression:
+	if (elfchk_debug & DEBUG_DWARF_CONTENTS) {
+	    fprintf(stderr, "DW_CFA_def_cfa_expression\n");
+	}
+
+	/* Operand 1 - DW_FORM_block */
+	tmp = decode_uleb128(ptr, &numused);
+	ptr += numused;
+	used += numused;
+	break;
+
+    case DW_CFA_val_expression:
+	if (elfchk_debug & DEBUG_DWARF_CONTENTS) {
+	    fprintf(stderr, "DW_CFA_val_expression\n");
+	}
+
+	/* Operand 1 - ULEB128 register */
+	tmp = decode_uleb128(ptr, &numused);
+	ptr += numused;
+	used += numused;
+
+	/* Operand 2 - DW_FORM_block */
+	tmp = decode_uleb128(ptr, &numused);
+	ptr += numused;
+	used += numused;
+	break;
 
     case DW_CFA_offset_extended_sf:
 	if (elfchk_debug & DEBUG_DWARF_CONTENTS) {
@@ -417,7 +442,38 @@
 	used += numused;
 	break;
 
-#ifdef notdef
+    case DW_CFA_val_offset:
+	if (elfchk_debug & DEBUG_DWARF_CONTENTS) {
+	    fprintf(stderr, "DW_CFA_val_offset\n");
+	}
+
+	/* Operand 1 - ULEB128 register */
+	tmp = decode_uleb128(ptr, &numused);
+	ptr += numused;
+	used += numused;
+
+	/* Operand 2 - ULEB128 offset */
+	tmp = decode_uleb128(ptr, &numused);
+	ptr += numused;
+	used += numused;
+	break;
+
+    case DW_CFA_val_offset_sf:
+	if (elfchk_debug & DEBUG_DWARF_CONTENTS) {
+	    fprintf(stderr, "DW_CFA_val_offset_sf\n");
+	}
+
+	/* Operand 1 - ULEB128 register */
+	tmp = decode_uleb128(ptr, &numused);
+	ptr += numused;
+	used += numused;
+
+	/* Operand 2 - SLEB128 offset */
+	tmp = decode_sleb128(ptr, &numused);
+	ptr += numused;
+	used += numused;
+	break;
+
     case DW_CFA_def_cfa_sf:
 	if (elfchk_debug & DEBUG_DWARF_CONTENTS) {
 	    fprintf(stderr, "DW_CFA_def_cfa_sf\n");
@@ -433,9 +489,7 @@
 	ptr += numused;
 	used += numused;
 	break;
-#endif
 
-#ifdef notdef
     case DW_CFA_def_cfa_offset_sf:
 	if (elfchk_debug & DEBUG_DWARF_CONTENTS) {
 	    fprintf(stderr, "DW_CFA_def_cfa_offset_sf\n");
@@ -446,14 +500,21 @@
 	ptr += numused;
 	used += numused;
 	break;
-#endif
 
     default:
 	if (elfchk_debug & DEBUG_DWARF_CONTENTS) {
-	    fprintf(stderr,
-		    "********** Unexpected CFI opcode %x **\n", rawop);
-	}
-	*error = 1;
+	    if ((opcode >= DW_CFA_low_user) && (opcode <= DW_CFA_high_user)) {
+		fprintf(stderr,
+			"********** Unknown user-defined CFI opcode %x **\n", rawop);
+	    }
+	    else {
+		fprintf(stderr,
+			"********** Unexpected CFI opcode %x **\n", rawop);
+	    }
+	}
+	if ((opcode < DW_CFA_low_user) || (opcode > DW_CFA_high_user)) {
+	    *error = 1;
+	}
     }
     return used;
 

=== modified file 'elfchk/dwarf.h'
--- a/elfchk/dwarf.h	2006-07-28 00:19:28 +0000
+++ b/elfchk/dwarf.h	2013-01-25 14:28:29 +0000
@@ -85,6 +85,7 @@
 #define DW_CFA_def_cfa		0x0C
 #define DW_CFA_def_cfa_register	0x0D
 #define DW_CFA_def_cfa_offset	0x0E
+#define DW_CFA_def_cfa_expression 0x0F
 
 /* Extra v3 instructions */
 
@@ -92,11 +93,18 @@
 #define DW_CFA_offset_extended_sf  0x11
 #define DW_CFA_def_cfa_sf          0x12
 #define DW_CFA_def_cfa_offset_sf   0x13
+#define DW_CFA_val_offset          0x14
+#define DW_CFA_val_offset_sf       0x15
+#define DW_CFA_val_expression      0x16
 
 /* GNU Stuff */
 #define DW_CFA_GNU_args_size                0x2e
 #define DW_CFA_GNU_negative_offset_extended 0x2f
 
+/* Limits for user-defined values */
+#define DW_CFA_low_user   0x1c
+#define DW_CFA_high_user  0x3f
+
 /* DWARF Exception Header Encoding - Taken from LSB v1.3 */
 
 /* DWARF Exception Header value format */

=== modified file 'package/Makefile'
--- a/package/Makefile	2013-01-17 22:40:09 +0000
+++ b/package/Makefile	2013-01-25 14:28:29 +0000
@@ -20,7 +20,7 @@
 # Release number of package relative to specification version
 # Should have leading "."
 # a big number (80-99) is leading up to the next minor spec
-SUB_VERSION=.3
+SUB_VERSION=.4
 
 # We define this here instead of directly in the spec file as
 # we need to be able to work out what the produced rpm files will be called



More information about the lsb-messages mailing list