* dwarf2loc.c (read_pieced_value) <DWARF_VALUE_STACK>: Correctly
authorTom Tromey <tromey@redhat.com>
Tue, 23 Feb 2010 16:14:36 +0000 (16:14 +0000)
committerTom Tromey <tromey@redhat.com>
Tue, 23 Feb 2010 16:14:36 +0000 (16:14 +0000)
handle big-endian values.
(dwarf2_evaluate_loc_desc) <DWARF_VALUE_STACK>: Likewise.

gdb/ChangeLog
gdb/dwarf2loc.c

index c82bf882917ecf713391533cf8208d00a4387dec..d5fd34e30127cabcc375368774e1d2eb61bfbc2b 100644 (file)
@@ -1,3 +1,9 @@
+2010-02-23  Tom Tromey  <tromey@redhat.com>
+
+       * dwarf2loc.c (read_pieced_value) <DWARF_VALUE_STACK>: Correctly
+       handle big-endian values.
+       (dwarf2_evaluate_loc_desc) <DWARF_VALUE_STACK>: Likewise.
+
 2010-02-22  Pedro Alves  <pedro@codesourcery.com>
 
        PR9605
index 6679d74bd3ad5bfd8fc08843e8eb087821135441..1c4d057d0049c4d7cb315dd38cdc275a6021b1fb 100644 (file)
@@ -298,16 +298,14 @@ read_pieced_value (struct value *v)
 
        case DWARF_VALUE_STACK:
          {
-           gdb_byte bytes[sizeof (ULONGEST)];
            size_t n;
            int addr_size = gdbarch_addr_bit (c->arch) / 8;
-           store_unsigned_integer (bytes, addr_size,
-                                   gdbarch_byte_order (c->arch),
-                                   p->v.expr.value);
            n = p->size;
            if (n > addr_size)
              n = addr_size;
-           memcpy (contents + offset, bytes, n);
+           store_unsigned_integer (contents + offset, n,
+                                   gdbarch_byte_order (c->arch),
+                                   p->v.expr.value);
          }
          break;
 
@@ -476,19 +474,17 @@ dwarf2_evaluate_loc_desc (struct symbol *var, struct frame_info *frame,
 
        case DWARF_VALUE_STACK:
          {
-           gdb_byte bytes[sizeof (ULONGEST)];
            ULONGEST value = (ULONGEST) dwarf_expr_fetch (ctx, 0);
            bfd_byte *contents;
            size_t n = ctx->addr_size;
 
-           store_unsigned_integer (bytes, ctx->addr_size,
-                                   gdbarch_byte_order (ctx->gdbarch),
-                                   value);
            retval = allocate_value (SYMBOL_TYPE (var));
            contents = value_contents_raw (retval);
            if (n > TYPE_LENGTH (SYMBOL_TYPE (var)))
              n = TYPE_LENGTH (SYMBOL_TYPE (var));
-           memcpy (contents, bytes, n);
+           store_unsigned_integer (contents, n,
+                                   gdbarch_byte_order (ctx->gdbarch),
+                                   value);
          }
          break;