diff options
author | John Baldwin <jhb@FreeBSD.org> | 2017-06-28 10:41:57 -0700 |
---|---|---|
committer | John Baldwin <jhb@FreeBSD.org> | 2017-07-07 16:06:45 -0700 |
commit | 6e5eab33abe09041b29e0ce484f684ad0ffe80a5 (patch) | |
tree | cbfdf80b7ea3dda1bfffc218f117b2513595e946 /gdb/gdbcore.h | |
parent | 929edea98d27cf9d72305c1584ee77627da7fa96 (diff) | |
download | gdb-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.h | 45 |
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); |