bool supports_z_point_type (char z_type) override;
+ bool supports_tracepoints () override;
+
+ bool supports_fast_tracepoints () override;
+
+ int install_fast_tracepoint_jump_pad
+ (CORE_ADDR tpoint, CORE_ADDR tpaddr, CORE_ADDR collector,
+ CORE_ADDR lockaddr, ULONGEST orig_size, CORE_ADDR *jump_entry,
+ CORE_ADDR *trampoline, ULONGEST *trampoline_size,
+ unsigned char *jjump_pad_insn, ULONGEST *jjump_pad_insn_size,
+ CORE_ADDR *adjusted_insn_addr, CORE_ADDR *adjusted_insn_addr_end,
+ char *err) override;
+
+ int get_min_fast_tracepoint_insn_len () override;
+
+ struct emit_ops *emit_ops () override;
+
protected:
void low_arch_setup () override;
int low_remove_point (raw_bkpt_type type, CORE_ADDR addr,
int size, raw_breakpoint *bp) override;
+
+ bool low_stopped_by_watchpoint () override;
+
+ CORE_ADDR low_stopped_data_address () override;
+
+ bool low_siginfo_fixup (siginfo_t *native, gdb_byte *inf,
+ int direction) override;
+
+ arch_process_info *low_new_process () override;
+
+ void low_delete_process (arch_process_info *info) override;
+
+ void low_new_thread (lwp_info *) override;
+
+ void low_delete_thread (arch_lwp_info *) override;
+
+ void low_new_fork (process_info *parent, process_info *child) override;
+
+ void low_prepare_to_resume (lwp_info *lwp) override;
+
+ int low_get_thread_area (int lwpid, CORE_ADDR *addrp) override;
};
/* The singleton target ops object. */
"is not implemented by the target");
}
+void
+aarch64_target::low_prepare_to_resume (lwp_info *lwp)
+{
+ aarch64_linux_prepare_to_resume (lwp);
+}
+
/* Per-process arch-specific data we want to keep. */
struct arch_process_info
return ret;
}
-/* Implementation of linux_target_ops method "stopped_data_address". */
+/* Implementation of linux target ops method "low_stopped_data_address". */
-static CORE_ADDR
-aarch64_stopped_data_address (void)
+CORE_ADDR
+aarch64_target::low_stopped_data_address ()
{
siginfo_t siginfo;
int pid, i;
return (CORE_ADDR) 0;
}
-/* Implementation of linux_target_ops method "stopped_by_watchpoint". */
+/* Implementation of linux target ops method "low_stopped_by_watchpoint". */
-static int
-aarch64_stopped_by_watchpoint (void)
+bool
+aarch64_target::low_stopped_by_watchpoint ()
{
- if (aarch64_stopped_data_address () != 0)
- return 1;
- else
- return 0;
+ return (low_stopped_data_address () != 0);
}
/* Fetch the thread-local storage pointer for libthread_db. */
is_64bit_tdesc ());
}
-/* Implementation of linux_target_ops method "siginfo_fixup". */
+/* Implementation of linux target ops method "low_siginfo_fixup". */
-static int
-aarch64_linux_siginfo_fixup (siginfo_t *native, gdb_byte *inf, int direction)
+bool
+aarch64_target::low_siginfo_fixup (siginfo_t *native, gdb_byte *inf,
+ int direction)
{
/* Is the inferior 32-bit? If so, then fixup the siginfo object. */
if (!is_64bit_tdesc ())
aarch64_siginfo_from_compat_siginfo (native,
(struct compat_siginfo *) inf);
- return 1;
+ return true;
}
- return 0;
+ return false;
}
-/* Implementation of linux_target_ops method "new_process". */
+/* Implementation of linux target ops method "low_new_process". */
-static struct arch_process_info *
-aarch64_linux_new_process (void)
+arch_process_info *
+aarch64_target::low_new_process ()
{
struct arch_process_info *info = XCNEW (struct arch_process_info);
return info;
}
-/* Implementation of linux_target_ops method "delete_process". */
+/* Implementation of linux target ops method "low_delete_process". */
-static void
-aarch64_linux_delete_process (struct arch_process_info *info)
+void
+aarch64_target::low_delete_process (arch_process_info *info)
{
xfree (info);
}
-/* Implementation of linux_target_ops method "linux_new_fork". */
+void
+aarch64_target::low_new_thread (lwp_info *lwp)
+{
+ aarch64_linux_new_thread (lwp);
+}
-static void
-aarch64_linux_new_fork (struct process_info *parent,
- struct process_info *child)
+void
+aarch64_target::low_delete_thread (arch_lwp_info *arch_lwp)
+{
+ aarch64_linux_delete_thread (arch_lwp);
+}
+
+/* Implementation of linux target ops method "low_new_fork". */
+
+void
+aarch64_target::low_new_fork (process_info *parent,
+ process_info *child)
{
/* These are allocated by linux_add_process. */
gdb_assert (parent->priv != NULL
return ®s_info_aarch64;
}
-/* Implementation of linux_target_ops method "supports_tracepoints". */
+/* Implementation of target ops method "supports_tracepoints". */
-static int
-aarch64_supports_tracepoints (void)
+bool
+aarch64_target::supports_tracepoints ()
{
if (current_thread == NULL)
- return 1;
+ return true;
else
{
/* We don't support tracepoints on aarch32 now. */
}
}
-/* Implementation of linux_target_ops method "get_thread_area". */
+/* Implementation of linux target ops method "low_get_thread_area". */
-static int
-aarch64_get_thread_area (int lwpid, CORE_ADDR *addrp)
+int
+aarch64_target::low_get_thread_area (int lwpid, CORE_ADDR *addrp)
{
struct iovec iovec;
uint64_t reg;
aarch64_ftrace_insn_reloc_others,
};
-/* Implementation of linux_target_ops method
+bool
+aarch64_target::supports_fast_tracepoints ()
+{
+ return true;
+}
+
+/* Implementation of target ops method
"install_fast_tracepoint_jump_pad". */
-static int
-aarch64_install_fast_tracepoint_jump_pad (CORE_ADDR tpoint,
- CORE_ADDR tpaddr,
- CORE_ADDR collector,
- CORE_ADDR lockaddr,
- ULONGEST orig_size,
- CORE_ADDR *jump_entry,
- CORE_ADDR *trampoline,
- ULONGEST *trampoline_size,
- unsigned char *jjump_pad_insn,
- ULONGEST *jjump_pad_insn_size,
- CORE_ADDR *adjusted_insn_addr,
- CORE_ADDR *adjusted_insn_addr_end,
- char *err)
+int
+aarch64_target::install_fast_tracepoint_jump_pad
+ (CORE_ADDR tpoint, CORE_ADDR tpaddr, CORE_ADDR collector,
+ CORE_ADDR lockaddr, ULONGEST orig_size, CORE_ADDR *jump_entry,
+ CORE_ADDR *trampoline, ULONGEST *trampoline_size,
+ unsigned char *jjump_pad_insn, ULONGEST *jjump_pad_insn_size,
+ CORE_ADDR *adjusted_insn_addr, CORE_ADDR *adjusted_insn_addr_end,
+ char *err)
{
uint32_t buf[256];
uint32_t *p = buf;
aarch64_emit_ge_got,
};
-/* Implementation of linux_target_ops method "emit_ops". */
+/* Implementation of target ops method "emit_ops". */
-static struct emit_ops *
-aarch64_emit_ops (void)
+emit_ops *
+aarch64_target::emit_ops ()
{
return &aarch64_emit_ops_impl;
}
-/* Implementation of linux_target_ops method
+/* Implementation of target ops method
"get_min_fast_tracepoint_insn_len". */
-static int
-aarch64_get_min_fast_tracepoint_insn_len (void)
+int
+aarch64_target::get_min_fast_tracepoint_insn_len ()
{
return 4;
}
struct linux_target_ops the_low_target =
{
- aarch64_stopped_by_watchpoint,
- aarch64_stopped_data_address,
- NULL, /* collect_ptrace_register */
- NULL, /* supply_ptrace_register */
- aarch64_linux_siginfo_fixup,
- aarch64_linux_new_process,
- aarch64_linux_delete_process,
- aarch64_linux_new_thread,
- aarch64_linux_delete_thread,
- aarch64_linux_new_fork,
- aarch64_linux_prepare_to_resume,
- NULL, /* process_qsupported */
- aarch64_supports_tracepoints,
- aarch64_get_thread_area,
- aarch64_install_fast_tracepoint_jump_pad,
- aarch64_emit_ops,
- aarch64_get_min_fast_tracepoint_insn_len,
aarch64_supports_range_stepping,
aarch64_supports_hardware_single_step,
aarch64_get_syscall_trapinfo,