X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdbserver%2Flinux-aarch64-low.cc;h=08208ae4f4524a579b5f1bd7ea5afd2c103c9e24;hb=a816ba1897ae6939518d628cb58d6281c9b64a4f;hp=56bf027b888b1769fbebb8acefeea31076f7e5f8;hpb=a5b5da9258db39b9b15ae2796ab637c73ba20422;p=deliverable%2Fbinutils-gdb.git diff --git a/gdbserver/linux-aarch64-low.cc b/gdbserver/linux-aarch64-low.cc index 56bf027b88..08208ae4f4 100644 --- a/gdbserver/linux-aarch64-low.cc +++ b/gdbserver/linux-aarch64-low.cc @@ -65,6 +65,22 @@ public: 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; @@ -105,6 +121,14 @@ protected: 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; + + bool low_supports_range_stepping () override; + + bool low_supports_catch_syscall () override; + + void low_get_syscall_trapinfo (regcache *regcache, int *sysno) override; }; /* The singleton target ops object. */ @@ -715,13 +739,13 @@ aarch64_target::get_regs_info () 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. */ @@ -729,10 +753,10 @@ aarch64_supports_tracepoints (void) } } -/* 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; @@ -748,10 +772,16 @@ aarch64_get_thread_area (int lwpid, CORE_ADDR *addrp) return 0; } -/* Implementation of linux_target_ops method "get_syscall_trapinfo". */ +bool +aarch64_target::low_supports_catch_syscall () +{ + return true; +} + +/* Implementation of linux target ops method "low_get_syscall_trapinfo". */ -static void -aarch64_get_syscall_trapinfo (struct regcache *regcache, int *sysno) +void +aarch64_target::low_get_syscall_trapinfo (regcache *regcache, int *sysno) { int use_64bit = register_size (regcache->tdesc, 0) == 8; @@ -1958,23 +1988,23 @@ static const struct aarch64_insn_visitor visitor = 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; @@ -3075,29 +3105,29 @@ static struct emit_ops aarch64_emit_ops_impl = 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; } -/* Implementation of linux_target_ops method "supports_range_stepping". */ +/* Implementation of linux target ops method "low_supports_range_stepping". */ -static int -aarch64_supports_range_stepping (void) +bool +aarch64_target::low_supports_range_stepping () { - return 1; + return true; } /* Implementation of target ops method "sw_breakpoint_from_kind". */ @@ -3137,26 +3167,6 @@ aarch64_target::breakpoint_kind_from_current_state (CORE_ADDR *pcptr) return arm_breakpoint_kind_from_current_state (pcptr); } -/* Support for hardware single step. */ - -static int -aarch64_supports_hardware_single_step (void) -{ - return 1; -} - -struct linux_target_ops the_low_target = -{ - 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, -}; - /* The linux target ops object. */ linux_process_target *the_linux_target = &the_aarch64_target;