2004-02-23 David Mosberger <davidm@hpl.hp.com>
Committed by Kevin Buettner <kevinb@redhat.com>. * ia64-tdep.h (ia64_write_pc, ia64_linux_write_pc): Declare. * ia64-tdep.c (ia64_write_pc): Make it a global function. (ia64_gdbarch_init): For Linux targets, use ia64_linux_write_pc() instead of ia64_write_pc(). * ia64-linux-tdep.c (regcache.h): Include. (ia64_linux_write_pc): New function.
This commit is contained in:
parent
9b1f5ff99b
commit
54a5c8d8da
4 changed files with 37 additions and 2 deletions
|
@ -1,3 +1,14 @@
|
|||
2004-02-23 David Mosberger <davidm@hpl.hp.com>
|
||||
|
||||
Committed by Kevin Buettner <kevinb@redhat.com>.
|
||||
|
||||
* ia64-tdep.h (ia64_write_pc, ia64_linux_write_pc): Declare.
|
||||
* ia64-tdep.c (ia64_write_pc): Make it a global function.
|
||||
(ia64_gdbarch_init): For Linux targets, use ia64_linux_write_pc()
|
||||
instead of ia64_write_pc().
|
||||
* ia64-linux-tdep.c (regcache.h): Include.
|
||||
(ia64_linux_write_pc): New function.
|
||||
|
||||
2004-02-23 Roland McGrath <roland@redhat.com>
|
||||
|
||||
* auxv.c (info_auxv_command): Fix typos in error messages.
|
||||
|
@ -59,6 +70,7 @@
|
|||
* breakpoint.c (print_one_breakpoint): Do not output spaces
|
||||
after printing <PENDING> for a pending breakpoint.
|
||||
|
||||
>>>>>>> 1.5456
|
||||
2004-02-23 Jeff Johnston <jjohnstn@redhat.com>
|
||||
|
||||
* printcmd.c (print_scalar_formatted): Initialize val_long
|
||||
|
|
|
@ -23,6 +23,7 @@
|
|||
#include "ia64-tdep.h"
|
||||
#include "arch-utils.h"
|
||||
#include "gdbcore.h"
|
||||
#include "regcache.h"
|
||||
|
||||
/* The sigtramp code is in a non-readable (executable-only) region
|
||||
of memory called the ``gate page''. The addresses in question
|
||||
|
@ -94,3 +95,20 @@ ia64_linux_sigcontext_register_address (CORE_ADDR sp, int regno)
|
|||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
ia64_linux_write_pc (CORE_ADDR pc, ptid_t ptid)
|
||||
{
|
||||
ia64_write_pc (pc, ptid);
|
||||
|
||||
/* We must be careful with modifying the instruction-pointer: if we
|
||||
just interrupt a system call, the kernel would ordinarily try to
|
||||
restart it when we resume the inferior, which typically results
|
||||
in SIGSEGV or SIGILL. We prevent this by clearing r10, which
|
||||
will tell the kernel that r8 does NOT contain a valid error code
|
||||
and hence it will skip system-call restart.
|
||||
|
||||
The clearing of r10 is safe as long as ia64_write_pc() is only
|
||||
called as part of setting up an inferior call. */
|
||||
write_register_pid (IA64_GR10_REGNUM, 0, ptid);
|
||||
}
|
||||
|
|
|
@ -628,7 +628,7 @@ ia64_read_pc (ptid_t ptid)
|
|||
return pc_value | (slot_num * SLOT_MULTIPLIER);
|
||||
}
|
||||
|
||||
static void
|
||||
void
|
||||
ia64_write_pc (CORE_ADDR new_pc, ptid_t ptid)
|
||||
{
|
||||
int slot_num = (int) (new_pc & 0xf) / SLOT_MULTIPLIER;
|
||||
|
@ -3338,7 +3338,10 @@ ia64_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
|
|||
set_gdbarch_memory_remove_breakpoint (gdbarch, ia64_memory_remove_breakpoint);
|
||||
set_gdbarch_breakpoint_from_pc (gdbarch, ia64_breakpoint_from_pc);
|
||||
set_gdbarch_read_pc (gdbarch, ia64_read_pc);
|
||||
set_gdbarch_write_pc (gdbarch, ia64_write_pc);
|
||||
if (info.osabi == GDB_OSABI_LINUX)
|
||||
set_gdbarch_write_pc (gdbarch, ia64_linux_write_pc);
|
||||
else
|
||||
set_gdbarch_write_pc (gdbarch, ia64_write_pc);
|
||||
|
||||
/* Settings for calling functions in the inferior. */
|
||||
set_gdbarch_push_dummy_call (gdbarch, ia64_push_dummy_call);
|
||||
|
|
|
@ -25,5 +25,7 @@
|
|||
extern CORE_ADDR ia64_linux_sigcontext_register_address (CORE_ADDR, int);
|
||||
extern CORE_ADDR ia64_aix_sigcontext_register_address (CORE_ADDR, int);
|
||||
extern unsigned long ia64_linux_getunwind_table (void *, size_t);
|
||||
extern void ia64_write_pc (CORE_ADDR, ptid_t);
|
||||
extern void ia64_linux_write_pc (CORE_ADDR, ptid_t);
|
||||
|
||||
#endif /* IA64_TDEP_H */
|
||||
|
|
Loading…
Reference in a new issue