From: Jan Kiszka <jan.kiszka@web.de>
To: qemu-devel@nongnu.org
Subject: [Qemu-devel] Re: [PATCH 02/13] Refactor and enhance break/watchpoint API
Date: Tue, 14 Oct 2008 19:45:21 +0200 [thread overview]
Message-ID: <48F4DAB1.4020308@web.de> (raw)
In-Reply-To: <5d6222a80810141024x1077066ek851f96a815c0cbe4@mail.gmail.com>
[-- Attachment #1: Type: text/plain, Size: 2694 bytes --]
Glauber Costa wrote:
>> Index: b/exec.c
>> ===================================================================
>> --- a/exec.c
>> +++ b/exec.c
>> @@ -537,7 +537,6 @@ void cpu_exec_init(CPUState *env)
>> cpu_index++;
>> }
>> env->cpu_index = cpu_index;
>> - env->nb_watchpoints = 0;
>> *penv = env;
>> #if defined(CPU_SAVE_VERSION) && !defined(CONFIG_USER_ONLY)
>> register_savevm("cpu_common", cpu_index, CPU_COMMON_SAVE_VERSION,
>> @@ -1311,107 +1310,150 @@ static void breakpoint_invalidate(CPUSta
>> #endif
>>
>> /* Add a watchpoint. */
>> -int cpu_watchpoint_insert(CPUState *env, target_ulong addr, int type)
>> +int cpu_watchpoint_insert(CPUState *env, target_ulong addr, target_ulong len,
>> + int flags, CPUWatchpoint **watchpoint)
>> {
>> - int i;
>> + CPUWatchpoint *wp;
>>
>> - for (i = 0; i < env->nb_watchpoints; i++) {
>> - if (addr == env->watchpoint[i].vaddr)
>> - return 0;
>> - }
>> - if (env->nb_watchpoints >= MAX_WATCHPOINTS)
>> - return -1;
>> + wp = qemu_malloc(sizeof(*wp));
>> + if (!wp)
>> + return -ENOBUFS;
>> +
>> + wp->vaddr = addr;
>> + wp->len = len;
>> + wp->flags = flags;
>> +
>> + wp->next = env->watchpoints;
>> + wp->prev = NULL;
>> + if (wp->next)
>> + wp->next->prev = wp;
>> + env->watchpoints = wp;
>>
>> - i = env->nb_watchpoints++;
>> - env->watchpoint[i].vaddr = addr;
>> - env->watchpoint[i].type = type;
>> tlb_flush_page(env, addr);
>> /* FIXME: This flush is needed because of the hack to make memory ops
>> terminate the TB. It can be removed once the proper IO trap and
>> re-execute bits are in. */
>> tb_flush(env);
>
>> Index: b/cpu-defs.h
>> +typedef struct CPUBreakpoint {
>> + target_ulong pc;
>> + int flags; /* BP_* */
>> + struct CPUBreakpoint *prev, *next;
>> +} CPUBreakpoint;
>> +
>> +typedef struct CPUWatchpoint {
>> + target_ulong vaddr;
>> + target_ulong len;
>> + int flags; /* BP_* */
>> + struct CPUWatchpoint *prev, *next;
>> +} CPUWatchpoint;
>> +
>
> Most of the time, you are transversing the list in a single direction.
> So any particular reason to use a double linked list?
When looking as this patch only, one may get along with a singly-linked
list. But patch 13 adds a use case where the back-reference pays off.
> By the way, /me thinks it is about time for us to have a generic
> linked list implementation
Probably - but $SOMEONE will have to do the time-consuming conversion
work to make QEMU really benefit from this...
Jan
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 257 bytes --]
next prev parent reply other threads:[~2008-10-14 17:47 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-10-14 9:12 [Qemu-devel] [PATCH 00/13] Enhance debugging support - 3rd take Jan Kiszka
2008-10-14 9:12 ` [Qemu-devel] [PATCH 01/13] Return appropriate watch message to gdb Jan Kiszka
2008-10-14 9:12 ` [Qemu-devel] [PATCH 02/13] Refactor and enhance break/watchpoint API Jan Kiszka
2008-10-14 17:24 ` Glauber Costa
2008-10-14 17:45 ` Jan Kiszka [this message]
2008-10-14 17:51 ` [Qemu-devel] " Glauber Costa
2008-10-14 17:35 ` [Qemu-devel] " Glauber Costa
2008-10-14 17:53 ` [Qemu-devel] " Jan Kiszka
2008-10-14 9:12 ` [Qemu-devel] [PATCH 03/13] Set mem_io_vaddr on io_read Jan Kiszka
2008-10-14 17:39 ` Glauber Costa
2008-10-14 17:49 ` [Qemu-devel] " Jan Kiszka
2008-10-14 9:12 ` [Qemu-devel] [PATCH 04/13] Respect length of watchpoints Jan Kiszka
2008-10-14 17:50 ` Glauber Costa
2008-10-14 18:26 ` [Qemu-devel] " Jan Kiszka
2008-10-14 9:12 ` [Qemu-devel] [PATCH 05/13] Introduce next_cflags Jan Kiszka
2008-10-14 9:12 ` [Qemu-devel] [PATCH 06/13] Switch self-modified code recompilation to next_cflags Jan Kiszka
2008-10-14 9:12 ` [Qemu-devel] [PATCH 07/13] Restore pc on watchpoint hits Jan Kiszka
2008-10-14 9:12 ` [Qemu-devel] [PATCH 08/13] Remove premature memop TB terminations Jan Kiszka
2008-10-14 9:12 ` [Qemu-devel] [PATCH 09/13] qemu: gdbstub: manage CPUs as threads Jan Kiszka
2008-10-14 9:12 ` [Qemu-devel] [PATCH 10/13] Introduce BP_WATCHPOINT_HIT flag Jan Kiszka
2008-10-14 9:12 ` [Qemu-devel] [PATCH 11/13] Add debug exception hook Jan Kiszka
2008-10-14 9:12 ` [Qemu-devel] [PATCH 12/13] Introduce BP_CPU as a breakpoint type Jan Kiszka
2008-10-14 9:12 ` [Qemu-devel] [PATCH 13/13] x86: Debug register emulation Jan Kiszka
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=48F4DAB1.4020308@web.de \
--to=jan.kiszka@web.de \
--cc=qemu-devel@nongnu.org \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.