* i386-tdep.c (i386_get_longjmp_target): Make usable on x86-64.

* x86-64-tdep.c (x86_64_init_abi): Remove FIXME about
i386_get_longjmp_target.
This commit is contained in:
Mark Kettenis 2003-01-05 14:07:03 +00:00
parent 15a5b3eeaf
commit 28bcfd306b
3 changed files with 13 additions and 10 deletions

View File

@ -1,3 +1,9 @@
2003-01-05 Mark Kettenis <kettenis@gnu.org>
* i386-tdep.c (i386_get_longjmp_target): Make usable on x86-64.
* x86-64-tdep.c (x86_64_init_abi): Remove FIXME about
i386_get_longjmp_target.
2003-01-05 Andrew Cagney <ac131313@redhat.com>
* arm-tdep.c (prologue_cache): Change to a pointer.

View File

@ -891,15 +891,16 @@ i386_pop_frame (void)
/* Figure out where the longjmp will land. Slurp the args out of the
stack. We expect the first arg to be a pointer to the jmp_buf
structure from which we extract the address that we will land at.
This address is copied into PC. This routine returns true on
This address is copied into PC. This routine returns non-zero on
success. */
static int
i386_get_longjmp_target (CORE_ADDR *pc)
{
char buf[4];
char buf[8];
CORE_ADDR sp, jb_addr;
int jb_pc_offset = gdbarch_tdep (current_gdbarch)->jb_pc_offset;
int len = TARGET_PTR_BIT / TARGET_CHAR_BIT;
/* If JB_PC_OFFSET is -1, we have no way to find out where the
longjmp will land. */
@ -907,14 +908,14 @@ i386_get_longjmp_target (CORE_ADDR *pc)
return 0;
sp = read_register (SP_REGNUM);
if (target_read_memory (sp + 4, buf, 4))
if (target_read_memory (sp + len, buf, len))
return 0;
jb_addr = extract_address (buf, 4);
if (target_read_memory (jb_addr + jb_pc_offset, buf, 4))
jb_addr = extract_address (buf, len);
if (target_read_memory (jb_addr + jb_pc_offset, buf, len))
return 0;
*pc = extract_address (buf, 4);
*pc = extract_address (buf, len);
return 1;
}

View File

@ -967,10 +967,6 @@ x86_64_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
set_gdbarch_register_byte (gdbarch, x86_64_register_byte);
set_gdbarch_register_virtual_type (gdbarch, x86_64_register_virtual_type);
/* FIXME: kettenis/20021026: As long as we don't support longjmp,
that is, as long as we have `tdep->jb_pc_offset == -1', using
i386_get_longjmp_target is fine. */
set_gdbarch_register_convertible (gdbarch, x86_64_register_convertible);
set_gdbarch_register_convert_to_virtual (gdbarch,
x86_64_register_convert_to_virtual);