common/
[deliverable/binutils-gdb.git] / gdb / dwarf2loc.c
index 9d0cd9ecff208c7d0e2cad0f28d788a888e8c675..6679d74bd3ad5bfd8fc08843e8eb087821135441 100644 (file)
@@ -1,6 +1,7 @@
 /* DWARF 2 location expression support for GDB.
 
-   Copyright (C) 2003, 2005, 2007, 2008, 2009 Free Software Foundation, Inc.
+   Copyright (C) 2003, 2005, 2007, 2008, 2009, 2010
+   Free Software Foundation, Inc.
 
    Contributed by Daniel Jacobowitz, MontaVista Software, Inc.
 
@@ -274,11 +275,17 @@ read_pieced_value (struct value *v)
        case DWARF_VALUE_REGISTER:
          {
            struct gdbarch *arch = get_frame_arch (frame);
-           bfd_byte regval[MAX_REGISTER_SIZE];
            int gdb_regnum = gdbarch_dwarf2_reg_to_regnum (arch,
                                                           p->v.expr.value);
-           get_frame_register (frame, gdb_regnum, regval);
-           memcpy (contents + offset, regval, p->size);
+           int reg_offset = 0;
+
+           if (gdbarch_byte_order (arch) == BFD_ENDIAN_BIG
+               && p->size < register_size (arch, gdb_regnum))
+             /* Big-endian, and we want less than full size.  */
+             reg_offset = register_size (arch, gdb_regnum) - p->size;
+
+           get_frame_register_bytes (frame, gdb_regnum, reg_offset, p->size,
+                                     contents + offset);
          }
          break;
 
@@ -345,7 +352,15 @@ write_pieced_value (struct value *to, struct value *from)
          {
            struct gdbarch *arch = get_frame_arch (frame);
            int gdb_regnum = gdbarch_dwarf2_reg_to_regnum (arch, p->v.expr.value);
-           put_frame_register (frame, gdb_regnum, contents + offset);
+           int reg_offset = 0;
+
+           if (gdbarch_byte_order (arch) == BFD_ENDIAN_BIG
+               && p->size < register_size (arch, gdb_regnum))
+             /* Big-endian, and we want less than full size.  */
+             reg_offset = register_size (arch, gdb_regnum) - p->size;
+
+           put_frame_register_bytes (frame, gdb_regnum, reg_offset, p->size,
+                                     contents + offset);
          }
          break;
        case DWARF_VALUE_MEMORY:
This page took 0.024441 seconds and 4 git commands to generate.