* values.c (value_primitive_field): Account for offset when
authorPeter Schauer <Peter.Schauer@mytum.de>
Sat, 9 Aug 1997 08:51:41 +0000 (08:51 +0000)
committerPeter Schauer <Peter.Schauer@mytum.de>
Sat, 9 Aug 1997 08:51:41 +0000 (08:51 +0000)
extracting the value of a bitfield.
From Paul Hilfinger <hilfingr@CS.Berkeley.EDU>.

gdb/ChangeLog
gdb/values.c

index bf426892b37d88758fa467e628c51d927939017d..c6eeebfa3cfda7a9d7202041ada7dfd762eeedf5 100644 (file)
@@ -1,3 +1,9 @@
+Sat Aug  9 01:50:14 1997  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)
+
+       * values.c (value_primitive_field):  Account for offset when
+       extracting the value of a bitfield.
+       From Paul Hilfinger <hilfingr@CS.Berkeley.EDU>.
+
 Fri Aug  8 21:35:44 1997  Mark Alexander  <marka@cygnus.com>
 
 start-sanitize-tic80
index 6f631acdc42cee96f0a4b070d2e7f1ef240238e4..0ffd5a63cb3fa2209fdad2f8da6d87ddd1b6afd4 100644 (file)
@@ -1,5 +1,5 @@
 /* Low level packing and unpacking of values for GDB, the GNU Debugger.
-   Copyright 1986, 1987, 1989, 1991, 1993, 1994, 1995, 1996
+   Copyright 1986, 1987, 1989, 1991, 1993, 1994, 1995, 1996, 1997
    Free Software Foundation, Inc.
 
 This file is part of GDB.
@@ -761,13 +761,13 @@ value_primitive_field (arg1, offset, fieldno, arg_type)
 
   /* Handle packed fields */
 
-  offset += TYPE_FIELD_BITPOS (arg_type, fieldno) / 8;
   if (TYPE_FIELD_BITSIZE (arg_type, fieldno))
     {
       v = value_from_longest (type,
-                          unpack_field_as_long (arg_type,
-                                                VALUE_CONTENTS (arg1),
-                                                fieldno));
+                             unpack_field_as_long (arg_type,
+                                                   VALUE_CONTENTS (arg1)
+                                                     + offset,
+                                                   fieldno));
       VALUE_BITPOS (v) = TYPE_FIELD_BITPOS (arg_type, fieldno) % 8;
       VALUE_BITSIZE (v) = TYPE_FIELD_BITSIZE (arg_type, fieldno);
     }
@@ -777,14 +777,17 @@ value_primitive_field (arg1, offset, fieldno, arg_type)
       if (VALUE_LAZY (arg1))
        VALUE_LAZY (v) = 1;
       else
-       memcpy (VALUE_CONTENTS_RAW (v), VALUE_CONTENTS_RAW (arg1) + offset,
+       memcpy (VALUE_CONTENTS_RAW (v),
+               VALUE_CONTENTS_RAW (arg1) + offset
+                 + TYPE_FIELD_BITPOS (arg_type, fieldno) / 8,
                TYPE_LENGTH (type));
     }
   VALUE_LVAL (v) = VALUE_LVAL (arg1);
   if (VALUE_LVAL (arg1) == lval_internalvar)
     VALUE_LVAL (v) = lval_internalvar_component;
   VALUE_ADDRESS (v) = VALUE_ADDRESS (arg1);
-  VALUE_OFFSET (v) = offset + VALUE_OFFSET (arg1);
+  VALUE_OFFSET (v) = VALUE_OFFSET (arg1) + offset
+                    + TYPE_FIELD_BITPOS (arg_type, fieldno) / 8;
   return v;
 }
 
This page took 0.026966 seconds and 4 git commands to generate.