From 6e62758f0249b3b8e4f2f82af6074eed44246cb5 Mon Sep 17 00:00:00 2001 From: Gary Benson Date: Tue, 17 Jun 2014 11:32:26 +0100 Subject: [PATCH] Comment changes This commit fixes various comment differences between i386-nat.[ch] and i386-low.[ch]. gdb/ 2014-06-18 Gary Benson * i386-nat.c: Comment changes. gdb/gdbserver/ 2014-06-18 Gary Benson * i386-low.h: Comment changes. * i386-low.c: Likewise. --- gdb/ChangeLog | 4 ++++ gdb/gdbserver/ChangeLog | 5 ++++ gdb/gdbserver/i386-low.c | 24 +++++++++++++------ gdb/gdbserver/i386-low.h | 6 ++--- gdb/i386-nat.c | 51 +++++++++++++++++++++------------------- 5 files changed, 56 insertions(+), 34 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 03a19e96ba3..1028f85fe16 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,7 @@ +2014-06-18 Gary Benson + + * i386-nat.c: Comment changes. + 2014-06-18 Gary Benson * i386-nat.c (I386_DR_WATCH_MASK): Remove macro. diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog index b3bf319bcc2..78cf89b574c 100644 --- a/gdb/gdbserver/ChangeLog +++ b/gdb/gdbserver/ChangeLog @@ -1,3 +1,8 @@ +2014-06-18 Gary Benson + + * i386-low.h: Comment changes. + * i386-low.c: Likewise. + 2014-06-18 Gary Benson * i386-low.c: Whitespace changes. diff --git a/gdb/gdbserver/i386-low.c b/gdb/gdbserver/i386-low.c index 304d6f3e1f0..d122ff7811f 100644 --- a/gdb/gdbserver/i386-low.c +++ b/gdb/gdbserver/i386-low.c @@ -21,6 +21,17 @@ #include "target.h" #include "i386-low.h" +/* Support for hardware watchpoints and breakpoints using the i386 + debug registers. + + This provides several functions for inserting and removing + hardware-assisted breakpoints and watchpoints, testing if one or + more of the watchpoints triggered and at what address, checking + whether a given region can be watched, etc. + + The functions below implement debug registers sharing by reference + counts, and allow to watch regions up to 16 bytes long. */ + /* Support for 8-byte wide hw watchpoints. */ #ifndef TARGET_HAS_DR_LEN_8 /* NOTE: sizeof (long) == 4 on win64. */ @@ -156,8 +167,7 @@ i386_low_init_dregs (struct i386_debug_reg_state *state) state->dr_status_mirror = 0; } -/* Print the values of the mirrored debug registers. This is enabled via - the "set debug-hw-points 1" monitor command. */ +/* Print the values of the mirrored debug registers. */ static void i386_show_dr (struct i386_debug_reg_state *state, @@ -427,7 +437,7 @@ i386_update_inferior_debug_regs (struct i386_debug_reg_state *inf_state, /* Insert a watchpoint to watch a memory region which starts at address ADDR and whose length is LEN bytes. Watch memory accesses - of the type TYPE_FROM_PACKET. Return 0 on success, -1 on failure. */ + of the type TYPE. Return 0 on success, -1 on failure. */ int i386_low_insert_watchpoint (struct i386_debug_reg_state *state, @@ -523,8 +533,8 @@ i386_low_region_ok_for_watchpoint (struct i386_debug_reg_state *state, } /* If the inferior has some break/watchpoint that triggered, set the - address associated with that break/watchpoint and return true. - Otherwise, return false. */ + address associated with that break/watchpoint and return non-zero. + Otherwise, return zero. */ int i386_low_stopped_data_address (struct i386_debug_reg_state *state, @@ -603,8 +613,8 @@ i386_low_stopped_data_address (struct i386_debug_reg_state *state, return rc; } -/* Return true if the inferior has some watchpoint that triggered. - Otherwise return false. */ +/* Return non-zero if the inferior has some watchpoint that triggered. + Otherwise return zero. */ int i386_low_stopped_by_watchpoint (struct i386_debug_reg_state *state) diff --git a/gdb/gdbserver/i386-low.h b/gdb/gdbserver/i386-low.h index 8d8e73fceb2..681ade00b3e 100644 --- a/gdb/gdbserver/i386-low.h +++ b/gdb/gdbserver/i386-low.h @@ -32,9 +32,9 @@ /* Debug registers' indices. */ #define DR_FIRSTADDR 0 #define DR_LASTADDR 3 -#define DR_NADDR 4 /* The number of debug address registers. */ -#define DR_STATUS 6 -#define DR_CONTROL 7 +#define DR_NADDR 4 /* The number of debug address registers. */ +#define DR_STATUS 6 /* Index of debug status register (DR6). */ +#define DR_CONTROL 7 /* Index of debug control register (DR7). */ /* Global state needed to track h/w watchpoints. */ diff --git a/gdb/i386-nat.c b/gdb/i386-nat.c index f9fb52f74ef..a7742f2ea44 100644 --- a/gdb/i386-nat.c +++ b/gdb/i386-nat.c @@ -37,6 +37,7 @@ The functions below implement debug registers sharing by reference counts, and allow to watch regions up to 16 bytes long. */ +/* Low-level function vector. */ struct i386_dr_low_type i386_dr_low; /* Support for 8-byte wide hw watchpoints. */ @@ -265,9 +266,7 @@ i386_cleanup_dregs (void) i386_forget_process (ptid_get_pid (inferior_ptid)); } -/* Print the values of the mirrored debug registers. This is called - when maint_show_dr is non-zero. To set that up, type "maint - show-debug-regs" at GDB's prompt. */ +/* Print the values of the mirrored debug registers. */ static void i386_show_dr (struct i386_debug_reg_state *state, @@ -439,7 +438,7 @@ i386_remove_aligned_watchpoint (struct i386_debug_reg_state *state, && state->dr_mirror[i] == addr && I386_DR_GET_RW_LEN (state->dr_control_mirror, i) == len_rw_bits) { - if (--state->dr_ref_count[i] == 0) /* no longer in use? */ + if (--state->dr_ref_count[i] == 0) /* No longer in use? */ { /* Reset our mirror. */ state->dr_mirror[i] = 0; @@ -646,8 +645,8 @@ i386_region_ok_for_watchpoint (struct target_ops *self, return nregs <= DR_NADDR ? 1 : 0; } -/* If the inferior has some watchpoint that triggered, set the - address associated with that watchpoint and return non-zero. +/* If the inferior has some break/watchpoint that triggered, set the + address associated with that break/watchpoint and return non-zero. Otherwise, return zero. */ static int @@ -668,24 +667,25 @@ i386_stopped_data_address (struct target_ops *ops, CORE_ADDR *addr_p) unsigned control = 0; /* In non-stop/async, threads can be running while we change the - STATE (and friends). Say, we set a watchpoint, and let threads - resume. Now, say you delete the watchpoint, or add/remove - watchpoints such that STATE changes while threads are running. - On targets that support non-stop, inserting/deleting watchpoints - updates the STATE only. It does not update the real thread's - debug registers; that's only done prior to resume. Instead, if - threads are running when the mirror changes, a temporary and - transparent stop on all threads is forced so they can get their - copy of the debug registers updated on re-resume. Now, say, - a thread hit a watchpoint before having been updated with the new - STATE contents, and we haven't yet handled the corresponding - SIGTRAP. If we trusted STATE below, we'd mistake the real - trapped address (from the last time we had updated debug - registers in the thread) with whatever was currently in STATE. - So to fix this, STATE always represents intention, what we _want_ - threads to have in debug registers. To get at the address and - cause of the trap, we need to read the state the thread still has - in its debug registers. + global dr_mirror (and friends). Say, we set a watchpoint, and + let threads resume. Now, say you delete the watchpoint, or + add/remove watchpoints such that dr_mirror changes while threads + are running. On targets that support non-stop, + inserting/deleting watchpoints updates the global dr_mirror only. + It does not update the real thread's debug registers; that's only + done prior to resume. Instead, if threads are running when the + mirror changes, a temporary and transparent stop on all threads + is forced so they can get their copy of the debug registers + updated on re-resume. Now, say, a thread hit a watchpoint before + having been updated with the new dr_mirror contents, and we + haven't yet handled the corresponding SIGTRAP. If we trusted + dr_mirror below, we'd mistake the real trapped address (from the + last time we had updated debug registers in the thread) with + whatever was currently in dr_mirror. So to fix this, dr_mirror + always represents intention, what we _want_ threads to have in + debug registers. To get at the address and cause of the trap, we + need to read the state the thread still has in its debug + registers. In sum, always get the current debug register values the current thread has, instead of trusting the global mirror. If the thread @@ -727,6 +727,9 @@ i386_stopped_data_address (struct target_ops *ops, CORE_ADDR *addr_p) return rc; } +/* Return non-zero if the inferior has some watchpoint that triggered. + Otherwise return zero. */ + static int i386_stopped_by_watchpoint (struct target_ops *ops) { -- 2.30.2