X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=gdb%2Fx86-linux-nat.c;h=80be97333107d985b2c7bac6ed178d8cf1af5afa;hb=13eb081a83b6f9b07cf4447e52e1d0503bf90211;hp=ce56c2e65219164d97c676282fe29a8e8aefea79;hpb=466eeceef409597388dd2b4e8b907cf080bedcf1;p=binutils-gdb.git diff --git a/gdb/x86-linux-nat.c b/gdb/x86-linux-nat.c index ce56c2e6521..80be9733310 100644 --- a/gdb/x86-linux-nat.c +++ b/gdb/x86-linux-nat.c @@ -1,6 +1,6 @@ /* Native-dependent code for GNU/Linux x86 (i386 and x86-64). - Copyright (C) 1999-2017 Free Software Foundation, Inc. + Copyright (C) 1999-2022 Free Software Foundation, Inc. This file is part of GDB. @@ -27,7 +27,6 @@ #include #include "x86-nat.h" -#include "linux-nat.h" #ifndef __x86_64__ #include "i386-linux-nat.h" #endif @@ -36,17 +35,17 @@ #ifdef __x86_64__ #include "amd64-linux-tdep.h" #endif -#include "x86-xstate.h" +#include "gdbsupport/x86-xstate.h" #include "nat/linux-btrace.h" #include "nat/linux-nat.h" #include "nat/x86-linux.h" #include "nat/x86-linux-dregs.h" #include "nat/linux-ptrace.h" -/* linux_nat_new_fork hook. */ +/* linux_nat_target::low_new_fork implementation. */ -static void -x86_linux_new_fork (struct lwp_info *parent, pid_t child_pid) +void +x86_linux_nat_target::low_new_fork (struct lwp_info *parent, pid_t child_pid) { pid_t parent_pid; struct x86_debug_reg_state *parent_state; @@ -71,21 +70,24 @@ x86_linux_new_fork (struct lwp_info *parent, pid_t child_pid) in the end before detaching the forked off process, thus making this compatible with older Linux kernels too. */ - parent_pid = ptid_get_pid (parent->ptid); + parent_pid = parent->ptid.pid (); parent_state = x86_debug_reg_state (parent_pid); child_state = x86_debug_reg_state (child_pid); *child_state = *parent_state; } -static void (*super_post_startup_inferior) (struct target_ops *self, - ptid_t ptid); +x86_linux_nat_target::~x86_linux_nat_target () +{ +} + +/* Implement the virtual inf_ptrace_target::post_startup_inferior method. */ -static void -x86_linux_child_post_startup_inferior (struct target_ops *self, ptid_t ptid) +void +x86_linux_nat_target::post_startup_inferior (ptid_t ptid) { x86_cleanup_dregs (); - super_post_startup_inferior (self, ptid); + linux_nat_target::post_startup_inferior (ptid); } #ifdef __x86_64__ @@ -102,8 +104,8 @@ x86_linux_child_post_startup_inferior (struct target_ops *self, ptid_t ptid) /* Get Linux/x86 target description from running target. */ -static const struct target_desc * -x86_linux_read_description (struct target_ops *ops) +const struct target_desc * +x86_linux_nat_target::read_description () { int tid; int is_64bit = 0; @@ -113,10 +115,7 @@ x86_linux_read_description (struct target_ops *ops) static uint64_t xcr0; uint64_t xcr0_features_bits; - /* GNU/Linux LWP ID's are process ID's. */ - tid = ptid_get_lwp (inferior_ptid); - if (tid == 0) - tid = ptid_get_pid (inferior_ptid); /* Not a threaded program. */ + tid = inferior_ptid.pid (); #ifdef __x86_64__ { @@ -212,27 +211,29 @@ x86_linux_read_description (struct target_ops *ops) /* Enable branch tracing. */ -static struct btrace_target_info * -x86_linux_enable_btrace (struct target_ops *self, ptid_t ptid, - const struct btrace_config *conf) +struct btrace_target_info * +x86_linux_nat_target::enable_btrace (thread_info *tp, + const struct btrace_config *conf) { - struct btrace_target_info *tinfo; - - errno = 0; - tinfo = linux_enable_btrace (ptid, conf); - - if (tinfo == NULL) - error (_("Could not enable branch tracing for %s: %s."), - target_pid_to_str (ptid), safe_strerror (errno)); + struct btrace_target_info *tinfo = nullptr; + ptid_t ptid = tp->ptid; + try + { + tinfo = linux_enable_btrace (ptid, conf); + } + catch (const gdb_exception_error &exception) + { + error (_("Could not enable branch tracing for %s: %s"), + target_pid_to_str (ptid).c_str (), exception.what ()); + } return tinfo; } /* Disable branch tracing. */ -static void -x86_linux_disable_btrace (struct target_ops *self, - struct btrace_target_info *tinfo) +void +x86_linux_nat_target::disable_btrace (struct btrace_target_info *tinfo) { enum btrace_error errcode = linux_disable_btrace (tinfo); @@ -242,28 +243,25 @@ x86_linux_disable_btrace (struct target_ops *self, /* Teardown branch tracing. */ -static void -x86_linux_teardown_btrace (struct target_ops *self, - struct btrace_target_info *tinfo) +void +x86_linux_nat_target::teardown_btrace (struct btrace_target_info *tinfo) { /* Ignore errors. */ linux_disable_btrace (tinfo); } -static enum btrace_error -x86_linux_read_btrace (struct target_ops *self, - struct btrace_data *data, - struct btrace_target_info *btinfo, - enum btrace_read_type type) +enum btrace_error +x86_linux_nat_target::read_btrace (struct btrace_data *data, + struct btrace_target_info *btinfo, + enum btrace_read_type type) { return linux_read_btrace (data, btinfo, type); } /* See to_btrace_conf in target.h. */ -static const struct btrace_config * -x86_linux_btrace_conf (struct target_ops *self, - const struct btrace_target_info *btinfo) +const struct btrace_config * +x86_linux_nat_target::btrace_conf (const struct btrace_target_info *btinfo) { return linux_btrace_conf (btinfo); } @@ -312,50 +310,15 @@ x86_linux_get_thread_area (pid_t pid, void *addr, unsigned int *base_addr) } -/* Create an x86 GNU/Linux target. */ - -struct target_ops * -x86_linux_create_target (void) +void _initialize_x86_linux_nat (); +void +_initialize_x86_linux_nat () { - /* Fill in the generic GNU/Linux methods. */ - struct target_ops *t = linux_target (); - /* Initialize the debug register function vectors. */ - x86_use_watchpoints (t); x86_dr_low.set_control = x86_linux_dr_set_control; x86_dr_low.set_addr = x86_linux_dr_set_addr; x86_dr_low.get_addr = x86_linux_dr_get_addr; x86_dr_low.get_status = x86_linux_dr_get_status; x86_dr_low.get_control = x86_linux_dr_get_control; x86_set_debug_register_length (sizeof (void *)); - - /* Override the GNU/Linux inferior startup hook. */ - super_post_startup_inferior = t->to_post_startup_inferior; - t->to_post_startup_inferior = x86_linux_child_post_startup_inferior; - - /* Add the description reader. */ - t->to_read_description = x86_linux_read_description; - - /* Add btrace methods. */ - t->to_supports_btrace = linux_supports_btrace; - t->to_enable_btrace = x86_linux_enable_btrace; - t->to_disable_btrace = x86_linux_disable_btrace; - t->to_teardown_btrace = x86_linux_teardown_btrace; - t->to_read_btrace = x86_linux_read_btrace; - t->to_btrace_conf = x86_linux_btrace_conf; - - return t; -} - -/* Add an x86 GNU/Linux target. */ - -void -x86_linux_add_target (struct target_ops *t) -{ - linux_nat_add_target (t); - linux_nat_set_new_thread (t, x86_linux_new_thread); - linux_nat_set_delete_thread (t, x86_linux_delete_thread); - linux_nat_set_new_fork (t, x86_linux_new_fork); - linux_nat_set_forget_process (t, x86_forget_process); - linux_nat_set_prepare_to_resume (t, x86_linux_prepare_to_resume); }