From 205c306f8020479681add9d274b2c261acc48318 Mon Sep 17 00:00:00 2001 From: "David S. Miller" Date: Tue, 11 Oct 2011 19:08:59 +0000 Subject: 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. --- gdb/jit.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'gdb/jit.c') diff --git a/gdb/jit.c b/gdb/jit.c index eb1bcc7..283ccdb 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 -- cgit v1.1