Make lwp_info.arch_private handling shared

This commit moves the code to handle lwp_info.arch_private for
Linux x86 into a new shared file, nat/x86-linux.c.

gdb/ChangeLog:

	* nat/x86-linux.h: New file.
	* nat/x86-linux.c: Likewise.
	* Makefile.in (HFILES_NO_SRCDIR): Add nat/x86-linux.h.
	(x86-linux.o): New rule.
	* config/i386/linux.mh (NATDEPFILES): Add x86-linux.o.
	* config/i386/linux64.mh (NATDEPFILES): Likewise.
	* nat/linux-nat.h (struct arch_lwp_info): New forward declaration.
	(lwp_set_arch_private_info): New declaration.
	(lwp_arch_private_info): Likewise.
	* linux-nat.c (lwp_set_arch_private_info): New function.
	(lwp_arch_private_info): Likewise.
	* x86-linux-nat.c: Include nat/x86-linux.h.
	(arch_lwp_info): Removed structure.
	(update_debug_registers_callback):
	Use lwp_set_debug_registers_changed.
	(x86_linux_prepare_to_resume): Use lwp_debug_registers_changed
	and lwp_set_debug_registers_changed.
	(x86_linux_new_thread): Use lwp_set_debug_registers_changed.

gdb/gdbserver/ChangeLog:

	* Makefile.in (x86-linux.o): New rule.
	* configure.srv: Add x86-linux.o to relevant targets.
	* linux-low.c (lwp_set_arch_private_info): New function.
	(lwp_arch_private_info): Likewise.
	* linux-x86-low.c: Include nat/x86-linux.h.
	(arch_lwp_info): Removed structure.
	(update_debug_registers_callback):
	Use lwp_set_debug_registers_changed.
	(x86_linux_prepare_to_resume): Use lwp_debug_registers_changed
	and lwp_set_debug_registers_changed.
	(x86_linux_new_thread): Use lwp_set_debug_registers_changed.
This commit is contained in:
Gary Benson
2015-03-24 14:05:44 +00:00
parent 34c703da6c
commit 4b134ca108
14 changed files with 198 additions and 38 deletions

View File

@@ -38,6 +38,7 @@
#include "tracepoint.h"
#include "ax.h"
#include "nat/linux-nat.h"
#include "nat/x86-linux.h"
#ifdef __x86_64__
/* Defined in auto-generated file amd64-linux.c. */
@@ -152,14 +153,6 @@ struct arch_process_info
struct x86_debug_reg_state debug_reg_state;
};
/* Per-thread arch-specific data we want to keep. */
struct arch_lwp_info
{
/* Non-zero if our copy differs from what's recorded in the thread. */
int debug_registers_changed;
};
#ifdef __x86_64__
/* Mapping between the general-purpose registers in `struct user'
@@ -579,7 +572,7 @@ update_debug_registers_callback (struct lwp_info *lwp, void *arg)
{
/* The actual update is done later just before resuming the lwp,
we just mark that the registers need updating. */
lwp->arch_private->debug_registers_changed = 1;
lwp_set_debug_registers_changed (lwp, 1);
/* If the lwp isn't stopped, force it to momentarily pause, so
we can update its debug registers. */
@@ -760,11 +753,7 @@ x86_linux_new_process (void)
static void
x86_linux_new_thread (struct lwp_info *lwp)
{
struct arch_lwp_info *info = XCNEW (struct arch_lwp_info);
info->debug_registers_changed = 1;
lwp->arch_private = info;
lwp_set_debug_registers_changed (lwp, 1);
}
/* See nat/x86-dregs.h. */
@@ -786,7 +775,7 @@ x86_linux_prepare_to_resume (struct lwp_info *lwp)
ptid_t ptid = ptid_of_lwp (lwp);
int clear_status = 0;
if (lwp->arch_private->debug_registers_changed)
if (lwp_debug_registers_changed (lwp))
{
struct x86_debug_reg_state *state
= x86_debug_reg_state (ptid_get_pid (ptid));
@@ -809,7 +798,7 @@ x86_linux_prepare_to_resume (struct lwp_info *lwp)
if (state->dr_control_mirror != 0)
x86_linux_dr_set (ptid, DR_CONTROL, state->dr_control_mirror);
lwp->arch_private->debug_registers_changed = 0;
lwp_set_debug_registers_changed (lwp, 0);
}
if (clear_status