From: "Maciej W. Rozycki" <macro@codesourcery.com>
To: Yao Qi <yao@codesourcery.com>
Cc: <gdb-patches@sourceware.org>
Subject: Re: [PATCH 5/5] MIPS GDBserver watchpoint
Date: Thu, 25 Jul 2013 21:20:00 -0000 [thread overview]
Message-ID: <alpine.DEB.1.10.1307252205490.32382@tp.orcam.me.uk> (raw)
In-Reply-To: <51F06E54.9000504@codesourcery.com>
On Thu, 25 Jul 2013, Yao Qi wrote:
> gdb/gdbserver:
>
> 2013-07-25 Jie Zhang <jie@codesourcery.com>
> Daniel Jacobowitz <dan@codesourcery.com>
> Yao Qi <yao@codesourcery.com>
>
> * Makefile.in (SFILES): Add common/mips-linux-watch.c.
> (mips-linux-watch.o): New rule.
You've lost an entry for mips_linux_watch_h:
(mips_linux_watch_h): New variable.
should do.
> * configure.srv <mips*-*-linux*>: Add mips-linux-watch.o to
> srv_tgtobj.
> * linux-mips-low.c: Include mips-linux-watch.h.
> (struct arch_process_info, struct arch_lwp_info): New.
> (update_watch_registers_callback): New.
> (mips_linux_new_process, mips_linux_new_thread) New.
> (mips_linux_prepare_to_resume, mips_insert_point): New.
> (mips_remove_point, mips_stopped_by_watchpoint): New.
> (rsp_bp_type_to_target_hw_bp_type): New.
> (mips_stopped_data_address): New.
> (the_low_target): Add watchpoint support functions.
Please name entity types, e.g.: "New function.", "New variables.", etc.
as applicable.
> diff --git a/gdb/gdbserver/linux-mips-low.c b/gdb/gdbserver/linux-mips-low.c
> index 1010528..dd6ebaf 100644
> --- a/gdb/gdbserver/linux-mips-low.c
> +++ b/gdb/gdbserver/linux-mips-low.c
> @@ -257,6 +291,328 @@ mips_breakpoint_at (CORE_ADDR where)
> return 0;
> }
>
> +/* Mark the watch registers of lwp, represented by ENTRY, as changed,
> + if the lwp's process id is *PID_P. */
> +
> +static int
> +update_watch_registers_callback (struct inferior_list_entry *entry,
> + void *pid_p)
> +{
> + struct lwp_info *lwp = (struct lwp_info *) entry;
> + int pid = *(int *) pid_p;
> +
> + /* Only update the threads of this process. */
> + if (pid_of (lwp) == pid)
> + {
> + /* The actual update is done later just before resuming the lwp,
> + we just mark that the registers need updating. */
> + lwp->arch_private->watch_registers_changed = 1;
> +
> + /* If the lwp isn't stopped, force it to momentarily pause, so
> + we can update its watch registers. */
> + if (!lwp->stopped)
> + linux_stop_lwp (lwp);
> + }
> +
> + return 0;
> +}
> +
> +/* This is the implementation of linux_target_ops method
> + new_process. */
> +
> +static struct arch_process_info *
> +mips_linux_new_process (void)
> +{
> + struct arch_process_info *info = xcalloc (1, sizeof (*info));
> +
> + return info;
> +}
> +
> +/* This is the implementation of linux_target_ops method new_thread.
> + Mark the watch registers as changed, so the threads' copies will
> + be updated. */
> +
> +static struct arch_lwp_info *
> +mips_linux_new_thread (void)
> +{
> + struct arch_lwp_info *info = xcalloc (1, sizeof (*info));
> +
> + info->watch_registers_changed = 1;
> +
> + return info;
> +}
> +
> +/* This is the implementation of linux_target_ops method
> + prepare_to_resume. If the watch regs have changed, update the
> + thread's copies. */
> +
> +static void
> +mips_linux_prepare_to_resume (struct lwp_info *lwp)
> +{
> + ptid_t ptid = ptid_of (lwp);
> + struct process_info *proc = find_process_pid (ptid_get_pid (ptid));
> + struct arch_process_info *private = proc->private->arch_private;
> +
> + if (lwp->arch_private->watch_registers_changed)
> + {
> + /* Only update the watch registers if we have set or unset a
> + watchpoint already. */
> + if (mips_linux_watch_get_num_valid (&private->watch_mirror) > 0)
> + {
> + /* Write the mirrored watch register values. */
> + int tid = ptid_get_lwp (ptid);
> +
> + if (-1 == ptrace (PTRACE_SET_WATCH_REGS, tid,
> + &private->watch_mirror))
> + perror_with_name ("Couldn't write watch register");
> + }
> +
> + lwp->arch_private->watch_registers_changed = 0;
> + }
> +}
> +
> +/* Translate breakpoint type TYPE in rsp to 'enum target_hw_bp_type'. */
> +
> +static enum target_hw_bp_type
> +rsp_bp_type_to_target_hw_bp_type (char type)
> +{
> + switch (type)
> + {
> + case '2':
> + return hw_write;
> + case '3':
> + return hw_read;
> + case '4':
> + return hw_access;
> + }
> +
> + gdb_assert_not_reached ("unhandled RSP breakpoint type");
> + return -1;
> +}
gdb_assert_not_reached is `__attribute__ ((noreturn))', so there's no
need for the `return -1' statement. Please remove it.
OK with this change and the ChangeLog updates, thanks for your work.
Maciej
next prev parent reply other threads:[~2013-07-25 21:20 UTC|newest]
Thread overview: 52+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-05-30 2:44 [PATCH 0/3] mips hardware watchpoint support in gdbserver Yao Qi
2013-05-30 2:44 ` [PATCH 2/3] Move mips hardware watchpoint stuff to common/ Yao Qi
2013-06-13 4:12 ` Yao Qi
2013-06-19 22:05 ` Maciej W. Rozycki
2013-06-20 14:21 ` Yao Qi
2013-06-20 15:27 ` Maciej W. Rozycki
2013-06-20 17:50 ` Joel Brobecker
2013-06-21 8:03 ` Maciej W. Rozycki
2013-06-21 15:55 ` Joel Brobecker
2013-05-30 2:44 ` [PATCH 1/3] Include asm/ptrace.h in mips-linux-nat.c Yao Qi
2013-06-13 17:49 ` Maciej W. Rozycki
2013-06-14 6:53 ` Yao Qi
2013-06-14 12:53 ` Maciej W. Rozycki
2013-06-20 19:40 ` Pedro Alves
2013-06-20 20:45 ` Maciej W. Rozycki
2013-06-21 14:58 ` Pedro Alves
2013-06-17 16:04 ` Maciej W. Rozycki
2013-05-30 2:44 ` [PATCH 3/3] MIPS h/w watchpoint in GDBserver Yao Qi
2013-06-13 8:20 ` Yao Qi
2013-06-13 13:09 ` Eli Zaretskii
2013-06-13 16:56 ` Pedro Alves
2013-06-19 22:22 ` Maciej W. Rozycki
2013-06-21 15:00 ` Pedro Alves
2013-05-30 12:29 ` [PATCH 0/3] mips hardware watchpoint support in gdbserver Maciej W. Rozycki
2013-05-30 18:06 ` Pedro Alves
2013-05-30 18:08 ` Pedro Alves
2013-06-29 3:11 ` [PATCH v2 0/5] " Yao Qi
2013-06-29 3:11 ` [PATCH 1/5] Share 'enum target_hw_bp_type' in GDB and GDBserver Yao Qi
2013-07-24 0:26 ` Maciej W. Rozycki
2013-07-24 14:04 ` Tom Tromey
2013-07-28 0:41 ` Yao Qi
2013-06-29 3:11 ` [PATCH 2/5] Include asm/ptrace.h in mips-linux-nat.c Yao Qi
2013-07-24 0:26 ` Maciej W. Rozycki
2013-07-28 0:43 ` Yao Qi
2013-06-29 3:11 ` [PATCH 3/5] Refactor " Yao Qi
2013-07-24 0:27 ` Maciej W. Rozycki
2013-07-28 0:44 ` Yao Qi
2013-06-29 3:11 ` [PATCH 5/5] MIPS GDBserver watchpoint Yao Qi
2013-06-29 15:20 ` Eli Zaretskii
2013-07-24 0:35 ` Maciej W. Rozycki
2013-07-25 0:17 ` Yao Qi
2013-07-25 21:20 ` Maciej W. Rozycki [this message]
2013-07-28 0:49 ` Yao Qi
2013-07-24 18:11 ` Pedro Alves
2013-06-29 8:01 ` [PATCH 4/5] Move mips hardware watchpoint stuff to common/ Yao Qi
2013-07-24 0:31 ` Maciej W. Rozycki
2013-07-24 2:08 ` Yao Qi
2013-07-24 18:09 ` Pedro Alves
2013-07-25 0:07 ` Yao Qi
2013-07-25 21:17 ` Maciej W. Rozycki
2013-07-28 0:47 ` Yao Qi
2013-07-22 1:11 ` [PATCH v2 0/5] mips hardware watchpoint support in gdbserver Yao Qi
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=alpine.DEB.1.10.1307252205490.32382@tp.orcam.me.uk \
--to=macro@codesourcery.com \
--cc=gdb-patches@sourceware.org \
--cc=yao@codesourcery.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox