[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