gdbserver/linux-low: turn 'arch_setup' into a method

gdbserver/ChangeLog:
2020-04-02  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>

	Turn the 'arch_setup' linux target op into a method of
	linux_process_target.

	* linux-low.h (struct linux_target_ops) <arch_setup>: Delete.
	(class linux_process_target) <arch_setup_thread>
	<low_arch_setup>: New declarations.
	* linux-low.cc (linux_arch_setup): Delete.
	(linux_arch_setup_thread): Turn into...
	(linux_process_target::arch_setup_thread): ... this.

	Update the callers below.

	(linux_process_target::handle_extended_wait)
	(linux_process_target::post_create_inferior)
	(linux_process_target::filter_event)

	* linux-x86-low.cc (class x86_target) <low_arch_setup>: New
	declaration.
	(x86_linux_update_xmltarget): Turn into...
	(x86_target::update_xmltarget): ...this.
	(x86_linux_process_qsupported): Update the call to
	x86_linux_update_xmltarget.
	(x86_arch_setup): Turn into ...
	(x86_target::low_arch_setup): ...this.
	(the_low_target): Remove the op field.
	* linux-aarch64-low.cc (class aarch64_target) <low_arch_setup>: New
	declaration.
	(aarch64_arch_setup): Turn into ...
	(aarch64_target::low_arch_setup): ...this.
	(the_low_target): Remove the op field.
	* linux-arm-low.cc (class arm_target) <low_arch_setup>: New
	declaration.
	(arm_arch_setup): Turn into ...
	(arm_target::low_arch_setup): ...this.
	(the_low_target): Remove the op field.
	* linux-bfin-low.cc (class bfin_target) <low_arch_setup>: New
	declaration.
	(bfin_arch_setup): Turn into ...
	(bfin_target::low_arch_setup): ...this.
	(the_low_target): Remove the op field.
	* linux-cris-low.cc (class cris_target) <low_arch_setup>: New
	declaration.
	(cris_arch_setup): Turn into ...
	(cris_target::low_arch_setup): ...this.
	(the_low_target): Remove the op field.
	* linux-crisv32-low.cc (class crisv32_target) <low_arch_setup>: New
	declaration.
	(crisv32_arch_setup): Turn into ...
	(crisv32_target::low_arch_setup): ...this.
	(the_low_target): Remove the op field.
	* linux-ia64-low.cc (class ia64_target) <low_arch_setup>: New
	declaration.
	(ia64_arch_setup): Turn into ...
	(ia64_target::low_arch_setup): ...this.
	(the_low_target): Remove the op field.
	* linux-m32r-low.cc (class m32r_target) <low_arch_setup>: New
	declaration.
	(m32r_arch_setup): Turn into ...
	(m32r_target::low_arch_setup): ...this.
	(the_low_target): Remove the op field.
	* linux-m68k-low.cc (class m68k_target) <low_arch_setup>: New
	declaration.
	(m68k_arch_setup): Turn into ...
	(m68k_target::low_arch_setup): ...this.
	(the_low_target): Remove the op field.
	* linux-mips-low.cc (class mips_target) <low_arch_setup>: New
	declaration.
	(mips_arch_setup): Turn into ...
	(mips_target::low_arch_setup): ...this.
	(the_low_target): Remove the op field.
	* linux-nios2-low.cc (class nios2_target) <low_arch_setup>: New
	declaration.
	(nios2_arch_setup): Turn into ...
	(nios2_target::low_arch_setup): ...this.
	(the_low_target): Remove the op field.
	* linux-ppc-low.cc (class ppc_target) <low_arch_setup>: New
	declaration.
	(ppc_arch_setup): Turn into ...
	(ppc_target::low_arch_setup): ...this.
	(the_low_target): Remove the op field.
	* linux-riscv-low.cc (class riscv_target) <low_arch_setup>: New
	declaration.
	(riscv_arch_setup): Turn into ...
	(riscv_target::low_arch_setup): ...this.
	(the_low_target): Remove the op field.
	* linux-s390-low.cc (class s390_target) <low_arch_setup>: New
	declaration.
	(s390_arch_setup): Turn into ...
	(s390_target::low_arch_setup): ...this.
	(the_low_target): Remove the op field.
	* linux-sh-low.cc (class sh_target) <low_arch_setup>: New
	declaration.
	(sh_arch_setup): Turn into ...
	(sh_target::low_arch_setup): ...this.
	(the_low_target): Remove the op field.
	* linux-sparc-low.cc (class sparc_target) <low_arch_setup>: New
	declaration.
	(sparc_arch_setup): Turn into ...
	(sparc_target::low_arch_setup): ...this.
	(the_low_target): Remove the op field.
	* linux-tic6x-low.cc (class tic6x_target) <low_arch_setup>: New
	declaration.
	(tic6x_arch_setup): Turn into ...
	(tic6x_target::low_arch_setup): ...this.
	(the_low_target): Remove the op field.
	* linux-tile-low.cc (class tile_target) <low_arch_setup>: New
	declaration.
	(tile_arch_setup): Turn into ...
	(tile_target::low_arch_setup): ...this.
	(the_low_target): Remove the op field.
	* linux-xtensa-low.cc (class xtensa_target) <low_arch_setup>: New
	declaration.
	(xtensa_arch_setup): Turn into ...
	(xtensa_target::low_arch_setup): ...this.
	(the_low_target): Remove the op field.
This commit is contained in:
Tankut Baris Aktemur 2020-04-02 15:11:23 +02:00
parent ef0478f611
commit 797bcff595
22 changed files with 237 additions and 84 deletions

View file

@ -1,3 +1,121 @@
2020-04-02 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com>
Turn the 'arch_setup' linux target op into a method of
linux_process_target.
* linux-low.h (struct linux_target_ops) <arch_setup>: Delete.
(class linux_process_target) <arch_setup_thread>
<low_arch_setup>: New declarations.
* linux-low.cc (linux_arch_setup): Delete.
(linux_arch_setup_thread): Turn into...
(linux_process_target::arch_setup_thread): ... this.
Update the callers below.
(linux_process_target::handle_extended_wait)
(linux_process_target::post_create_inferior)
(linux_process_target::filter_event)
* linux-x86-low.cc (class x86_target) <low_arch_setup>: New
declaration.
(x86_linux_update_xmltarget): Turn into...
(x86_target::update_xmltarget): ...this.
(x86_linux_process_qsupported): Update the call to
x86_linux_update_xmltarget.
(x86_arch_setup): Turn into ...
(x86_target::low_arch_setup): ...this.
(the_low_target): Remove the op field.
* linux-aarch64-low.cc (class aarch64_target) <low_arch_setup>: New
declaration.
(aarch64_arch_setup): Turn into ...
(aarch64_target::low_arch_setup): ...this.
(the_low_target): Remove the op field.
* linux-arm-low.cc (class arm_target) <low_arch_setup>: New
declaration.
(arm_arch_setup): Turn into ...
(arm_target::low_arch_setup): ...this.
(the_low_target): Remove the op field.
* linux-bfin-low.cc (class bfin_target) <low_arch_setup>: New
declaration.
(bfin_arch_setup): Turn into ...
(bfin_target::low_arch_setup): ...this.
(the_low_target): Remove the op field.
* linux-cris-low.cc (class cris_target) <low_arch_setup>: New
declaration.
(cris_arch_setup): Turn into ...
(cris_target::low_arch_setup): ...this.
(the_low_target): Remove the op field.
* linux-crisv32-low.cc (class crisv32_target) <low_arch_setup>: New
declaration.
(crisv32_arch_setup): Turn into ...
(crisv32_target::low_arch_setup): ...this.
(the_low_target): Remove the op field.
* linux-ia64-low.cc (class ia64_target) <low_arch_setup>: New
declaration.
(ia64_arch_setup): Turn into ...
(ia64_target::low_arch_setup): ...this.
(the_low_target): Remove the op field.
* linux-m32r-low.cc (class m32r_target) <low_arch_setup>: New
declaration.
(m32r_arch_setup): Turn into ...
(m32r_target::low_arch_setup): ...this.
(the_low_target): Remove the op field.
* linux-m68k-low.cc (class m68k_target) <low_arch_setup>: New
declaration.
(m68k_arch_setup): Turn into ...
(m68k_target::low_arch_setup): ...this.
(the_low_target): Remove the op field.
* linux-mips-low.cc (class mips_target) <low_arch_setup>: New
declaration.
(mips_arch_setup): Turn into ...
(mips_target::low_arch_setup): ...this.
(the_low_target): Remove the op field.
* linux-nios2-low.cc (class nios2_target) <low_arch_setup>: New
declaration.
(nios2_arch_setup): Turn into ...
(nios2_target::low_arch_setup): ...this.
(the_low_target): Remove the op field.
* linux-ppc-low.cc (class ppc_target) <low_arch_setup>: New
declaration.
(ppc_arch_setup): Turn into ...
(ppc_target::low_arch_setup): ...this.
(the_low_target): Remove the op field.
* linux-riscv-low.cc (class riscv_target) <low_arch_setup>: New
declaration.
(riscv_arch_setup): Turn into ...
(riscv_target::low_arch_setup): ...this.
(the_low_target): Remove the op field.
* linux-s390-low.cc (class s390_target) <low_arch_setup>: New
declaration.
(s390_arch_setup): Turn into ...
(s390_target::low_arch_setup): ...this.
(the_low_target): Remove the op field.
* linux-sh-low.cc (class sh_target) <low_arch_setup>: New
declaration.
(sh_arch_setup): Turn into ...
(sh_target::low_arch_setup): ...this.
(the_low_target): Remove the op field.
* linux-sparc-low.cc (class sparc_target) <low_arch_setup>: New
declaration.
(sparc_arch_setup): Turn into ...
(sparc_target::low_arch_setup): ...this.
(the_low_target): Remove the op field.
* linux-tic6x-low.cc (class tic6x_target) <low_arch_setup>: New
declaration.
(tic6x_arch_setup): Turn into ...
(tic6x_target::low_arch_setup): ...this.
(the_low_target): Remove the op field.
* linux-tile-low.cc (class tile_target) <low_arch_setup>: New
declaration.
(tile_arch_setup): Turn into ...
(tile_target::low_arch_setup): ...this.
(the_low_target): Remove the op field.
* linux-xtensa-low.cc (class xtensa_target) <low_arch_setup>: New
declaration.
(xtensa_arch_setup): Turn into ...
(xtensa_target::low_arch_setup): ...this.
(the_low_target): Remove the op field.
2020-04-02 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> 2020-04-02 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com>
* linux-low.h (the_linux_target): New extern declaration. * linux-low.h (the_linux_target): New extern declaration.

View file

@ -55,6 +55,9 @@ class aarch64_target : public linux_process_target
{ {
public: public:
protected:
void low_arch_setup () override;
}; };
/* The singleton target ops object. */ /* The singleton target ops object. */
@ -515,10 +518,10 @@ aarch64_linux_new_fork (struct process_info *parent,
/* Matches HWCAP_PACA in kernel header arch/arm64/include/uapi/asm/hwcap.h. */ /* Matches HWCAP_PACA in kernel header arch/arm64/include/uapi/asm/hwcap.h. */
#define AARCH64_HWCAP_PACA (1 << 30) #define AARCH64_HWCAP_PACA (1 << 30)
/* Implementation of linux_target_ops method "arch_setup". */ /* Implementation of linux target ops method "low_arch_setup". */
static void void
aarch64_arch_setup (void) aarch64_target::low_arch_setup ()
{ {
unsigned int machine; unsigned int machine;
int is_elf64; int is_elf64;
@ -3062,7 +3065,6 @@ aarch64_supports_hardware_single_step (void)
struct linux_target_ops the_low_target = struct linux_target_ops the_low_target =
{ {
aarch64_arch_setup,
aarch64_regs_info, aarch64_regs_info,
NULL, /* cannot_fetch_register */ NULL, /* cannot_fetch_register */
NULL, /* cannot_store_register */ NULL, /* cannot_store_register */

View file

@ -60,6 +60,9 @@ class arm_target : public linux_process_target
{ {
public: public:
protected:
void low_arch_setup () override;
}; };
/* The singleton target ops object. */ /* The singleton target ops object. */
@ -889,8 +892,8 @@ arm_read_description (void)
return arm_linux_read_description (ARM_FP_TYPE_NONE); return arm_linux_read_description (ARM_FP_TYPE_NONE);
} }
static void void
arm_arch_setup (void) arm_target::low_arch_setup ()
{ {
int tid = lwpid_of (current_thread); int tid = lwpid_of (current_thread);
int gpregs[18]; int gpregs[18];
@ -1018,7 +1021,6 @@ arm_regs_info (void)
} }
struct linux_target_ops the_low_target = { struct linux_target_ops the_low_target = {
arm_arch_setup,
arm_regs_info, arm_regs_info,
arm_cannot_fetch_register, arm_cannot_fetch_register,
arm_cannot_store_register, arm_cannot_store_register,

View file

@ -29,6 +29,9 @@ class bfin_target : public linux_process_target
{ {
public: public:
protected:
void low_arch_setup () override;
}; };
/* The singleton target ops object. */ /* The singleton target ops object. */
@ -93,8 +96,8 @@ bfin_breakpoint_at (CORE_ADDR where)
return 0; return 0;
} }
static void void
bfin_arch_setup (void) bfin_target::low_arch_setup ()
{ {
current_process ()->tdesc = tdesc_bfin; current_process ()->tdesc = tdesc_bfin;
} }
@ -126,7 +129,6 @@ bfin_regs_info (void)
} }
struct linux_target_ops the_low_target = { struct linux_target_ops the_low_target = {
bfin_arch_setup,
bfin_regs_info, bfin_regs_info,
bfin_cannot_fetch_register, bfin_cannot_fetch_register,
bfin_cannot_store_register, bfin_cannot_store_register,

View file

@ -26,6 +26,9 @@ class cris_target : public linux_process_target
{ {
public: public:
protected:
void low_arch_setup () override;
}; };
/* The singleton target ops object. */ /* The singleton target ops object. */
@ -98,8 +101,8 @@ cris_breakpoint_at (CORE_ADDR where)
return 0; return 0;
} }
static void void
cris_arch_setup (void) cris_target::low_arch_setup ()
{ {
current_process ()->tdesc = tdesc_cris; current_process ()->tdesc = tdesc_cris;
} }
@ -123,7 +126,6 @@ cris_regs_info (void)
} }
struct linux_target_ops the_low_target = { struct linux_target_ops the_low_target = {
cris_arch_setup,
cris_regs_info, cris_regs_info,
cris_cannot_fetch_register, cris_cannot_fetch_register,
cris_cannot_store_register, cris_cannot_store_register,

View file

@ -26,6 +26,9 @@ class crisv32_target : public linux_process_target
{ {
public: public:
protected:
void low_arch_setup () override;
}; };
/* The singleton target ops object. */ /* The singleton target ops object. */
@ -358,8 +361,8 @@ cris_store_gregset (struct regcache *regcache, const void *buf)
} }
} }
static void void
cris_arch_setup (void) crisv32_target::low_arch_setup ()
{ {
current_process ()->tdesc = tdesc_crisv32; current_process ()->tdesc = tdesc_crisv32;
} }
@ -406,7 +409,6 @@ cris_regs_info (void)
} }
struct linux_target_ops the_low_target = { struct linux_target_ops the_low_target = {
cris_arch_setup,
cris_regs_info, cris_regs_info,
NULL, NULL,
NULL, NULL,

View file

@ -29,6 +29,9 @@ class ia64_target : public linux_process_target
{ {
public: public:
protected:
void low_arch_setup () override;
}; };
/* The singleton target ops object. */ /* The singleton target ops object. */
@ -350,15 +353,14 @@ ia64_regs_info (void)
return &regs_info; return &regs_info;
} }
static void void
ia64_arch_setup (void) ia64_target::low_arch_setup ()
{ {
current_process ()->tdesc = tdesc_ia64; current_process ()->tdesc = tdesc_ia64;
} }
struct linux_target_ops the_low_target = { struct linux_target_ops the_low_target = {
ia64_arch_setup,
ia64_regs_info, ia64_regs_info,
ia64_cannot_fetch_register, ia64_cannot_fetch_register,
ia64_cannot_store_register, ia64_cannot_store_register,

View file

@ -440,25 +440,15 @@ linux_add_process (int pid, int attached)
static CORE_ADDR get_pc (struct lwp_info *lwp); static CORE_ADDR get_pc (struct lwp_info *lwp);
/* Call the target arch_setup function on the current thread. */ void
linux_process_target::arch_setup_thread (thread_info *thread)
static void
linux_arch_setup (void)
{
the_low_target.arch_setup ();
}
/* Call the target arch_setup function on THREAD. */
static void
linux_arch_setup_thread (struct thread_info *thread)
{ {
struct thread_info *saved_thread; struct thread_info *saved_thread;
saved_thread = current_thread; saved_thread = current_thread;
current_thread = thread; current_thread = thread;
linux_arch_setup (); low_arch_setup ();
current_thread = saved_thread; current_thread = saved_thread;
} }
@ -706,7 +696,7 @@ linux_process_target::handle_extended_wait (lwp_info **orig_event_lwp,
event_lwp = add_lwp (event_ptid); event_lwp = add_lwp (event_ptid);
event_thr = get_lwp_thread (event_lwp); event_thr = get_lwp_thread (event_lwp);
gdb_assert (current_thread == event_thr); gdb_assert (current_thread == event_thr);
linux_arch_setup_thread (event_thr); arch_setup_thread (event_thr);
/* Set the event status. */ /* Set the event status. */
event_lwp->waitstatus.kind = TARGET_WAITKIND_EXECD; event_lwp->waitstatus.kind = TARGET_WAITKIND_EXECD;
@ -1025,7 +1015,7 @@ linux_process_target::post_create_inferior ()
{ {
struct lwp_info *lwp = get_thread_lwp (current_thread); struct lwp_info *lwp = get_thread_lwp (current_thread);
linux_arch_setup (); low_arch_setup ();
if (lwp->must_set_ptrace_flags) if (lwp->must_set_ptrace_flags)
{ {
@ -2433,7 +2423,7 @@ linux_process_target::filter_event (int lwpid, int wstat)
/* This needs to happen after we have attached to the /* This needs to happen after we have attached to the
inferior and it is stopped for the first time, but inferior and it is stopped for the first time, but
before we access any inferior registers. */ before we access any inferior registers. */
linux_arch_setup_thread (thread); arch_setup_thread (thread);
} }
else else
{ {

View file

@ -131,9 +131,6 @@ struct lwp_info;
struct linux_target_ops struct linux_target_ops
{ {
/* Architecture-specific setup. */
void (*arch_setup) (void);
const struct regs_info *(*regs_info) (void); const struct regs_info *(*regs_info) (void);
/* Return 0 if we can fetch/store the register, 1 if we cannot /* Return 0 if we can fetch/store the register, 1 if we cannot
@ -564,8 +561,14 @@ private:
/* Move THREAD out of the jump pad. */ /* Move THREAD out of the jump pad. */
void move_out_of_jump_pad (thread_info *thread); void move_out_of_jump_pad (thread_info *thread);
/* Call low_arch_setup on THREAD. */
void arch_setup_thread (thread_info *thread);
protected: protected:
/* The architecture-specific "low" methods are listed below. */ /* The architecture-specific "low" methods are listed below. */
/* Architecture-specific setup for the current thread. */
virtual void low_arch_setup () = 0;
}; };
extern linux_process_target *the_linux_target; extern linux_process_target *the_linux_target;

View file

@ -29,6 +29,9 @@ class m32r_target : public linux_process_target
{ {
public: public:
protected:
void low_arch_setup () override;
}; };
/* The singleton target ops object. */ /* The singleton target ops object. */
@ -92,8 +95,8 @@ m32r_breakpoint_at (CORE_ADDR where)
return 0; return 0;
} }
static void void
m32r_arch_setup (void) m32r_target::low_arch_setup ()
{ {
current_process ()->tdesc = tdesc_m32r; current_process ()->tdesc = tdesc_m32r;
} }
@ -125,7 +128,6 @@ m32r_regs_info (void)
} }
struct linux_target_ops the_low_target = { struct linux_target_ops the_low_target = {
m32r_arch_setup,
m32r_regs_info, m32r_regs_info,
m32r_cannot_fetch_register, m32r_cannot_fetch_register,
m32r_cannot_store_register, m32r_cannot_store_register,

View file

@ -25,6 +25,9 @@ class m68k_target : public linux_process_target
{ {
public: public:
protected:
void low_arch_setup () override;
}; };
/* The singleton target ops object. */ /* The singleton target ops object. */
@ -205,8 +208,8 @@ m68k_regs_info (void)
return &regs_info; return &regs_info;
} }
static void void
m68k_arch_setup (void) m68k_target::low_arch_setup ()
{ {
current_process ()->tdesc = tdesc_m68k; current_process ()->tdesc = tdesc_m68k;
} }
@ -220,7 +223,6 @@ m68k_supports_hardware_single_step (void)
} }
struct linux_target_ops the_low_target = { struct linux_target_ops the_low_target = {
m68k_arch_setup,
m68k_regs_info, m68k_regs_info,
m68k_cannot_fetch_register, m68k_cannot_fetch_register,
m68k_cannot_store_register, m68k_cannot_store_register,

View file

@ -31,6 +31,9 @@ class mips_target : public linux_process_target
{ {
public: public:
protected:
void low_arch_setup () override;
}; };
/* The singleton target ops object. */ /* The singleton target ops object. */
@ -159,8 +162,8 @@ mips_read_description (void)
return have_dsp ? tdesc_mips_dsp_linux : tdesc_mips_linux; return have_dsp ? tdesc_mips_dsp_linux : tdesc_mips_linux;
} }
static void void
mips_arch_setup (void) mips_target::low_arch_setup ()
{ {
current_process ()->tdesc = mips_read_description (); current_process ()->tdesc = mips_read_description ();
} }
@ -949,7 +952,6 @@ mips_regs_info (void)
} }
struct linux_target_ops the_low_target = { struct linux_target_ops the_low_target = {
mips_arch_setup,
mips_regs_info, mips_regs_info,
mips_cannot_fetch_register, mips_cannot_fetch_register,
mips_cannot_store_register, mips_cannot_store_register,

View file

@ -37,6 +37,9 @@ class nios2_target : public linux_process_target
{ {
public: public:
protected:
void low_arch_setup () override;
}; };
/* The singleton target ops object. */ /* The singleton target ops object. */
@ -77,10 +80,10 @@ static int nios2_regmap[] = {
0 0
}; };
/* Implement the arch_setup linux_target_ops method. */ /* Implement the low_arch_setup linux target ops method. */
static void void
nios2_arch_setup (void) nios2_target::low_arch_setup ()
{ {
current_process ()->tdesc = tdesc_nios2_linux; current_process ()->tdesc = tdesc_nios2_linux;
} }
@ -248,7 +251,6 @@ nios2_regs_info (void)
struct linux_target_ops the_low_target = struct linux_target_ops the_low_target =
{ {
nios2_arch_setup,
nios2_regs_info, nios2_regs_info,
nios2_cannot_fetch_register, nios2_cannot_fetch_register,
nios2_cannot_store_register, nios2_cannot_store_register,

View file

@ -50,6 +50,9 @@ class ppc_target : public linux_process_target
{ {
public: public:
protected:
void low_arch_setup () override;
}; };
/* The singleton target ops object. */ /* The singleton target ops object. */
@ -816,8 +819,8 @@ ppc_regs_info (void)
return &regs_info; return &regs_info;
} }
static void void
ppc_arch_setup (void) ppc_target::low_arch_setup ()
{ {
const struct target_desc *tdesc; const struct target_desc *tdesc;
struct regset_info *regset; struct regset_info *regset;
@ -3383,7 +3386,6 @@ ppc_get_ipa_tdesc_idx (void)
} }
struct linux_target_ops the_low_target = { struct linux_target_ops the_low_target = {
ppc_arch_setup,
ppc_regs_info, ppc_regs_info,
ppc_cannot_fetch_register, ppc_cannot_fetch_register,
ppc_cannot_store_register, ppc_cannot_store_register,

View file

@ -36,16 +36,19 @@ class riscv_target : public linux_process_target
{ {
public: public:
protected:
void low_arch_setup () override;
}; };
/* The singleton target ops object. */ /* The singleton target ops object. */
static riscv_target the_riscv_target; static riscv_target the_riscv_target;
/* Implementation of linux_target_ops method "arch_setup". */ /* Implementation of linux target ops method "low_arch_setup". */
static void void
riscv_arch_setup () riscv_target::low_arch_setup ()
{ {
static const char *expedite_regs[] = { "sp", "pc", NULL }; static const char *expedite_regs[] = { "sp", "pc", NULL };
@ -268,7 +271,6 @@ riscv_breakpoint_at (CORE_ADDR pc)
/* RISC-V/Linux target operations. */ /* RISC-V/Linux target operations. */
struct linux_target_ops the_low_target = struct linux_target_ops the_low_target =
{ {
riscv_arch_setup,
riscv_regs_info, riscv_regs_info,
NULL, /* cannot_fetch_register */ NULL, /* cannot_fetch_register */
NULL, /* cannot_store_register */ NULL, /* cannot_store_register */

View file

@ -57,6 +57,9 @@ class s390_target : public linux_process_target
{ {
public: public:
protected:
void low_arch_setup () override;
}; };
/* The singleton target ops object. */ /* The singleton target ops object. */
@ -521,8 +524,8 @@ s390_check_regset (int pid, int regset, int regsize)
static int have_hwcap_s390_high_gprs = 0; static int have_hwcap_s390_high_gprs = 0;
static int have_hwcap_s390_vx = 0; static int have_hwcap_s390_vx = 0;
static void void
s390_arch_setup (void) s390_target::low_arch_setup ()
{ {
const struct target_desc *tdesc; const struct target_desc *tdesc;
struct regset_info *regset; struct regset_info *regset;
@ -2803,7 +2806,6 @@ s390_emit_ops (void)
} }
struct linux_target_ops the_low_target = { struct linux_target_ops the_low_target = {
s390_arch_setup,
s390_regs_info, s390_regs_info,
s390_cannot_fetch_register, s390_cannot_fetch_register,
s390_cannot_store_register, s390_cannot_store_register,

View file

@ -25,6 +25,9 @@ class sh_target : public linux_process_target
{ {
public: public:
protected:
void low_arch_setup () override;
}; };
/* The singleton target ops object. */ /* The singleton target ops object. */
@ -148,14 +151,13 @@ sh_regs_info (void)
return &regs_info; return &regs_info;
} }
static void void
sh_arch_setup (void) sh_target::low_arch_setup ()
{ {
current_process ()->tdesc = tdesc_sh; current_process ()->tdesc = tdesc_sh;
} }
struct linux_target_ops the_low_target = { struct linux_target_ops the_low_target = {
sh_arch_setup,
sh_regs_info, sh_regs_info,
sh_cannot_fetch_register, sh_cannot_fetch_register,
sh_cannot_store_register, sh_cannot_store_register,

View file

@ -48,6 +48,9 @@ class sparc_target : public linux_process_target
{ {
public: public:
protected:
void low_arch_setup () override;
}; };
/* The singleton target ops object. */ /* The singleton target ops object. */
@ -265,8 +268,8 @@ sparc_breakpoint_at (CORE_ADDR where)
return 0; return 0;
} }
static void void
sparc_arch_setup (void) sparc_target::low_arch_setup ()
{ {
current_process ()->tdesc = tdesc_sparc64; current_process ()->tdesc = tdesc_sparc64;
} }
@ -310,7 +313,6 @@ sparc_regs_info (void)
} }
struct linux_target_ops the_low_target = { struct linux_target_ops the_low_target = {
sparc_arch_setup,
sparc_regs_info, sparc_regs_info,
sparc_cannot_fetch_register, sparc_cannot_fetch_register,
sparc_cannot_store_register, sparc_cannot_store_register,

View file

@ -44,6 +44,9 @@ class tic6x_target : public linux_process_target
{ {
public: public:
protected:
void low_arch_setup () override;
}; };
/* The singleton target ops object. */ /* The singleton target ops object. */
@ -326,8 +329,8 @@ static struct regset_info tic6x_regsets[] = {
NULL_REGSET NULL_REGSET
}; };
static void void
tic6x_arch_setup (void) tic6x_target::low_arch_setup ()
{ {
register unsigned int csr asm ("B2"); register unsigned int csr asm ("B2");
unsigned int cpuid; unsigned int cpuid;
@ -398,7 +401,6 @@ tic6x_regs_info (void)
} }
struct linux_target_ops the_low_target = { struct linux_target_ops the_low_target = {
tic6x_arch_setup,
tic6x_regs_info, tic6x_regs_info,
tic6x_cannot_fetch_register, tic6x_cannot_fetch_register,
tic6x_cannot_store_register, tic6x_cannot_store_register,

View file

@ -29,6 +29,9 @@ class tile_target : public linux_process_target
{ {
public: public:
protected:
void low_arch_setup () override;
}; };
/* The singleton target ops object. */ /* The singleton target ops object. */
@ -159,8 +162,8 @@ tile_regs_info (void)
return &regs_info; return &regs_info;
} }
static void void
tile_arch_setup (void) tile_target::low_arch_setup ()
{ {
int pid = pid_of (current_thread); int pid = pid_of (current_thread);
unsigned int machine; unsigned int machine;
@ -187,7 +190,6 @@ tile_supports_hardware_single_step (void)
struct linux_target_ops the_low_target = struct linux_target_ops the_low_target =
{ {
tile_arch_setup,
tile_regs_info, tile_regs_info,
tile_cannot_fetch_register, tile_cannot_fetch_register,
tile_cannot_store_register, tile_cannot_store_register,

View file

@ -100,6 +100,13 @@ class x86_target : public linux_process_target
{ {
public: public:
/* Update all the target description of all processes; a new GDB
connected, and it may or not support xml target descriptions. */
void update_xmltarget ();
protected:
void low_arch_setup () override;
}; };
/* The singleton target ops object. */ /* The singleton target ops object. */
@ -885,8 +892,8 @@ x86_linux_read_description (void)
/* Update all the target description of all processes; a new GDB /* Update all the target description of all processes; a new GDB
connected, and it may or not support xml target descriptions. */ connected, and it may or not support xml target descriptions. */
static void void
x86_linux_update_xmltarget (void) x86_target::update_xmltarget ()
{ {
struct thread_info *saved_thread = current_thread; struct thread_info *saved_thread = current_thread;
@ -895,13 +902,13 @@ x86_linux_update_xmltarget (void)
release the current regcache objects. */ release the current regcache objects. */
regcache_release (); regcache_release ();
for_each_process ([] (process_info *proc) { for_each_process ([this] (process_info *proc) {
int pid = proc->pid; int pid = proc->pid;
/* Look up any thread of this process. */ /* Look up any thread of this process. */
current_thread = find_any_thread_of_pid (pid); current_thread = find_any_thread_of_pid (pid);
the_low_target.arch_setup (); low_arch_setup ();
}); });
current_thread = saved_thread; current_thread = saved_thread;
@ -942,7 +949,7 @@ x86_linux_process_qsupported (char **features, int count)
free (copy); free (copy);
} }
} }
x86_linux_update_xmltarget (); the_x86_target.update_xmltarget ();
} }
/* Common for x86/x86-64. */ /* Common for x86/x86-64. */
@ -989,8 +996,8 @@ x86_linux_regs_info (void)
/* Initialize the target description for the architecture of the /* Initialize the target description for the architecture of the
inferior. */ inferior. */
static void void
x86_arch_setup (void) x86_target::low_arch_setup ()
{ {
current_process ()->tdesc = x86_linux_read_description (); current_process ()->tdesc = x86_linux_read_description ();
} }
@ -2872,7 +2879,6 @@ x86_get_ipa_tdesc_idx (void)
struct linux_target_ops the_low_target = struct linux_target_ops the_low_target =
{ {
x86_arch_setup,
x86_linux_regs_info, x86_linux_regs_info,
x86_cannot_fetch_register, x86_cannot_fetch_register,
x86_cannot_store_register, x86_cannot_store_register,

View file

@ -26,6 +26,9 @@ class xtensa_target : public linux_process_target
{ {
public: public:
protected:
void low_arch_setup () override;
}; };
/* The singleton target ops object. */ /* The singleton target ops object. */
@ -258,8 +261,8 @@ static struct regs_info regs_info =
&xtensa_regsets_info &xtensa_regsets_info
}; };
static void void
xtensa_arch_setup (void) xtensa_target::low_arch_setup ()
{ {
current_process ()->tdesc = tdesc_xtensa; current_process ()->tdesc = tdesc_xtensa;
} }
@ -279,7 +282,6 @@ xtensa_regs_info (void)
} }
struct linux_target_ops the_low_target = { struct linux_target_ops the_low_target = {
xtensa_arch_setup,
xtensa_regs_info, xtensa_regs_info,
0, 0,
0, 0,