Commit 79e7fd4f authored by Yao Qi's avatar Yao Qi
Browse files

Implement get_syscall_trapinfo for arm-linux

gdb/gdbserver:

2016-06-28  Yao Qi  <yao.qi@linaro.org>

	* linux-arm-low.c (arm_get_syscall_trapinfo): New function.
	(the_low_target): Install arm_get_syscall_trapinfo.
parent 061fc021
2016-06-28 Yao Qi <yao.qi@linaro.org>
* linux-arm-low.c (arm_get_syscall_trapinfo): New function.
(the_low_target): Install arm_get_syscall_trapinfo.
2016-06-28 Yao Qi <yao.qi@linaro.org>
 
* linux-aarch64-low.c (aarch64_get_syscall_trapinfo): New
......
......@@ -951,6 +951,40 @@ arm_supports_hardware_single_step (void)
return 0;
}
/* Implementation of linux_target_ops method "get_syscall_trapinfo". */
static void
arm_get_syscall_trapinfo (struct regcache *regcache, int *sysno)
{
if (arm_is_thumb_mode ())
collect_register_by_name (regcache, "r7", sysno);
else
{
unsigned long pc;
unsigned long insn;
collect_register_by_name (regcache, "pc", &pc);
if ((*the_target->read_memory) (pc - 4, (unsigned char *) &insn, 4))
*sysno = UNKNOWN_SYSCALL;
else
{
unsigned long svc_operand = (0x00ffffff & insn);
if (svc_operand)
{
/* OABI */
*sysno = svc_operand - 0x900000;
}
else
{
/* EABI */
collect_register_by_name (regcache, "r7", sysno);
}
}
}
}
/* Register sets without using PTRACE_GETREGSET. */
static struct regset_info arm_regsets[] = {
......@@ -1031,7 +1065,8 @@ struct linux_target_ops the_low_target = {
NULL, /* get_min_fast_tracepoint_insn_len */
NULL, /* supports_range_stepping */
arm_breakpoint_kind_from_current_state,
arm_supports_hardware_single_step
arm_supports_hardware_single_step,
arm_get_syscall_trapinfo,
};
void
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment