aboutsummaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
authorSimon Marchi <simon.marchi@polymtl.ca>2021-06-25 21:38:51 -0400
committerSimon Marchi <simon.marchi@polymtl.ca>2021-06-25 21:38:51 -0400
commitd6ff04a343f97026f7d23bb036e0f858b21f3bfd (patch)
treefba88a27803f0729e6e5193e3a62eef51e5df8fb /gdb
parent0f8e2034128e4a73e02cb8311eeeea7e886a5985 (diff)
downloadgdb-d6ff04a343f97026f7d23bb036e0f858b21f3bfd.zip
gdb-d6ff04a343f97026f7d23bb036e0f858b21f3bfd.tar.gz
gdb-d6ff04a343f97026f7d23bb036e0f858b21f3bfd.tar.bz2
gdb: add assert in cmd_list_element::set_context
If something tries to set a context pointer on a cmd_list_element and m_context is not nullptr, it's likely that two parts of the code are trying to set different contexts, and one will overwrite the other. This is almost guaranteed to lead to bad behavior or a crash, as one of the spots will not be using the data it expects. This happened to me during development, so I think having this assert would be useful to catch this problem earlier. gdb/ChangeLog: * cli/cli-decode.h (struct cmd_list_element) <set_context>: Add assert. Change-Id: I1f2e9fda1bf2bec1b732c9b90e7d7910a97f2ac6
Diffstat (limited to 'gdb')
-rw-r--r--gdb/ChangeLog5
-rw-r--r--gdb/cli/cli-decode.h5
2 files changed, 9 insertions, 1 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index c523186..6ba91d8 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,10 @@
2021-06-25 Simon Marchi <simon.marchi@polymtl.ca>
+ * cli/cli-decode.h (struct cmd_list_element) <set_context>: Add
+ assert.
+
+2021-06-25 Simon Marchi <simon.marchi@polymtl.ca>
+
* cli/cli-decode.h (struct cmd_list_element) <set_context,
context>: New.
<context>: Rename to...
diff --git a/gdb/cli/cli-decode.h b/gdb/cli/cli-decode.h
index 1692a6e..241535a 100644
--- a/gdb/cli/cli-decode.h
+++ b/gdb/cli/cli-decode.h
@@ -94,7 +94,10 @@ struct cmd_list_element
{ return this->func == nullptr; }
void set_context (void *context)
- { m_context = context; }
+ {
+ gdb_assert (m_context == nullptr);
+ m_context = context;
+ }
void *context () const
{ return m_context; }