diff options
author | David S. Miller <davem@redhat.com> | 2011-10-11 19:08:58 +0000 |
---|---|---|
committer | David S. Miller <davem@redhat.com> | 2011-10-11 19:08:58 +0000 |
commit | bc49e32643c23dcc3000e1adf65ede868770859f (patch) | |
tree | 2cceb3b660f2958a99cca5ca59146feacec75c9a /gdb/jit.c | |
parent | a9eb8d5bc1789c2d8440e11c53ffec20c6b13078 (diff) | |
download | gdb-bc49e32643c23dcc3000e1adf65ede868770859f.tar.gz |
Fix jit.exp on most 32-bit targets.
* gdbarch.sh: New field 'long_long_align_bit'.
* gdbarch.c, gdbarch.h: Regenerate.
* i386-tdep.c (i386_gdbarch_init): Set long_long_align_bit to 32.
* jit.c (jit_read_code_entry): Use it to determine correct size offset.
Diffstat (limited to 'gdb/jit.c')
-rw-r--r-- | gdb/jit.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/gdb/jit.c b/gdb/jit.c index eb1bcc7d1e7..283ccdb0d31 100644 --- a/gdb/jit.c +++ b/gdb/jit.c @@ -205,10 +205,11 @@ static void jit_read_code_entry (struct gdbarch *gdbarch, CORE_ADDR code_addr, struct jit_code_entry *code_entry) { - int err; + int err, off; struct type *ptr_type; int ptr_size; int entry_size; + int align_bytes; gdb_byte *entry_buf; enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); @@ -230,8 +231,13 @@ 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[3 * ptr_size], 8, byte_order); + extract_unsigned_integer (&entry_buf[off], 8, byte_order); } /* This function registers code associated with a JIT code entry. It uses the |