* jit.c (jit_read_code_entry): Compute alignment and offset of
authorRichard Henderson <rth@redhat.com>
Thu, 22 Mar 2012 20:33:42 +0000 (20:33 +0000)
committerRichard Henderson <rth@redhat.com>
Thu, 22 Mar 2012 20:33:42 +0000 (20:33 +0000)
int64_t member before computing entry_size.

gdb/ChangeLog
gdb/jit.c

index 7c653be49fbdfdfb1f0ff8759cdb863507cc1eae..fce6934c66a1702dd2173a66dfab3405914d3f63 100644 (file)
@@ -1,3 +1,8 @@
+2012-03-22  Richard Henderson  <rth@redhat.com>
+
+       * jit.c (jit_read_code_entry): Compute alignment and offset of
+       int64_t member before computing entry_size.
+
 2012-03-22  Siva Chandra Reddy  <sivachandra@google.com>
 
        Python scripting: Add new method Value.referenced_value to
index 6920a82ed2c59dcc6b41548fb46d41ce4f3b06ce..24ab01690678cad0f4b1ef5b5d9d9229d95b2da5 100644 (file)
--- a/gdb/jit.c
+++ b/gdb/jit.c
@@ -384,7 +384,13 @@ jit_read_code_entry (struct gdbarch *gdbarch,
   /* Figure out how big the entry is on the remote and how to read it.  */
   ptr_type = builtin_type (gdbarch)->builtin_data_ptr;
   ptr_size = TYPE_LENGTH (ptr_type);
-  entry_size = 3 * ptr_size + 8;  /* Three pointers and one 64-bit int.  */
+
+  /* Figure out where the longlong value will be.  */
+  align_bytes = gdbarch_long_long_align_bit (gdbarch) / 8;
+  off = 3 * ptr_size;
+  off = (off + (align_bytes - 1)) & ~(align_bytes - 1);
+
+  entry_size = off + 8;  /* Three pointers and one 64-bit int.  */
   entry_buf = alloca (entry_size);
 
   /* Read the entry.  */
@@ -399,11 +405,6 @@ jit_read_code_entry (struct gdbarch *gdbarch,
       extract_typed_address (&entry_buf[ptr_size], ptr_type);
   code_entry->symfile_addr =
       extract_typed_address (&entry_buf[2 * ptr_size], ptr_type);
-
-  align_bytes = gdbarch_long_long_align_bit (gdbarch) / 8;
-  off = 3 * ptr_size;
-  off = (off + (align_bytes - 1)) & ~(align_bytes - 1);
-
   code_entry->symfile_size =
       extract_unsigned_integer (&entry_buf[off], 8, byte_order);
 }