aboutsummaryrefslogtreecommitdiff
path: root/gdb/gdbcore.h
diff options
context:
space:
mode:
authorJohn Baldwin <jhb@FreeBSD.org>2017-06-28 10:41:57 -0700
committerJohn Baldwin <jhb@FreeBSD.org>2017-07-07 16:06:45 -0700
commit6e5eab33abe09041b29e0ce484f684ad0ffe80a5 (patch)
treecbfdf80b7ea3dda1bfffc218f117b2513595e946 /gdb/gdbcore.h
parent929edea98d27cf9d72305c1584ee77627da7fa96 (diff)
downloadgdb-6e5eab33abe09041b29e0ce484f684ad0ffe80a5.zip
gdb-6e5eab33abe09041b29e0ce484f684ad0ffe80a5.tar.gz
gdb-6e5eab33abe09041b29e0ce484f684ad0ffe80a5.tar.bz2
Move the thread_section_name class to gdbcore.h.
This allows it to be used outside of corelow.c.
Diffstat (limited to 'gdb/gdbcore.h')
-rw-r--r--gdb/gdbcore.h45
1 files changed, 45 insertions, 0 deletions
diff --git a/gdb/gdbcore.h b/gdb/gdbcore.h
index e3eed03..87f3dcd 100644
--- a/gdb/gdbcore.h
+++ b/gdb/gdbcore.h
@@ -226,6 +226,51 @@ struct core_fns
};
+/* Build either a single-thread or multi-threaded section name for
+ PTID.
+
+ If ptid's lwp member is zero, we want to do the single-threaded
+ thing: look for a section named NAME (as passed to the
+ constructor). If ptid's lwp member is non-zero, we'll want do the
+ multi-threaded thing: look for a section named "NAME/LWP", where
+ LWP is the shortest ASCII decimal representation of ptid's lwp
+ member. */
+
+class thread_section_name
+{
+public:
+ /* NAME is the single-threaded section name. If PTID represents an
+ LWP, then the build section name is "NAME/LWP", otherwise it's
+ just "NAME" unmodified. */
+ thread_section_name (const char *name, ptid_t ptid)
+ {
+ if (ptid.lwp_p ())
+ {
+ m_storage = string_printf ("%s/%ld", name, ptid.lwp ());
+ m_section_name = m_storage.c_str ();
+ }
+ else
+ m_section_name = name;
+ }
+
+ /* Return the computed section name. The result is valid as long as
+ this thread_section_name object is live. */
+ const char *c_str () const
+ { return m_section_name; }
+
+ /* Disable copy. */
+ thread_section_name (const thread_section_name &) = delete;
+ void operator= (const thread_section_name &) = delete;
+
+private:
+ /* Either a pointer into M_STORAGE, or a pointer to the name passed
+ as parameter to the constructor. */
+ const char *m_section_name;
+ /* If we need to build a new section name, this is where we store
+ it. */
+ std::string m_storage;
+};
+
/* NOTE: cagney/2004-04-05: Replaced by "regset.h" and
regset_from_core_section(). */
extern void deprecated_add_core_fns (struct core_fns *cf);