summaryrefslogtreecommitdiffstats
path: root/lldb/source/Plugins/Process/Linux/ProcessLinuxLog.h
diff options
context:
space:
mode:
authorJohnny Chen <johnny.chen@apple.com>2011-10-18 18:09:30 +0000
committerJohnny Chen <johnny.chen@apple.com>2011-10-18 18:09:30 +0000
commit0d5f2d425aef5bc593c81be4d7573f3c19e050d3 (patch)
treead2e0e1bd007a0afa5f6b08db6c98c5a331a9232 /lldb/source/Plugins/Process/Linux/ProcessLinuxLog.h
parentd1bc6da6575160887cd7e8e4b82016bc555ed792 (diff)
downloadbcm5719-llvm-0d5f2d425aef5bc593c81be4d7573f3c19e050d3.tar.gz
bcm5719-llvm-0d5f2d425aef5bc593c81be4d7573f3c19e050d3.zip
This patch fixes debugging of single threaded apps on Linux.
It also adds some asserts and additional logging support. from dawn@burble.org llvm-svn: 142384
Diffstat (limited to 'lldb/source/Plugins/Process/Linux/ProcessLinuxLog.h')
-rw-r--r--lldb/source/Plugins/Process/Linux/ProcessLinuxLog.h46
1 files changed, 45 insertions, 1 deletions
diff --git a/lldb/source/Plugins/Process/Linux/ProcessLinuxLog.h b/lldb/source/Plugins/Process/Linux/ProcessLinuxLog.h
index e4e178455d8..0553df6d1e4 100644
--- a/lldb/source/Plugins/Process/Linux/ProcessLinuxLog.h
+++ b/lldb/source/Plugins/Process/Linux/ProcessLinuxLog.h
@@ -29,11 +29,18 @@
#define LINUX_LOG_STEP (1u << 9)
#define LINUX_LOG_COMM (1u << 10)
#define LINUX_LOG_ASYNC (1u << 11)
+#define LINUX_LOG_PTRACE (1u << 12)
+#define LINUX_LOG_REGISTERS (1u << 13)
#define LINUX_LOG_ALL (UINT32_MAX)
#define LINUX_LOG_DEFAULT LINUX_LOG_PACKETS
+// The size which determines "short memory reads/writes".
+#define LINUX_LOG_MEMORY_SHORT_BYTES (4 * sizeof(ptrdiff_t))
+
class ProcessLinuxLog
{
+ static int m_nestinglevel;
+
public:
static lldb::LogSP
GetLogIfAllCategoriesSet(uint32_t mask = 0);
@@ -42,13 +49,50 @@ public:
DisableLog (lldb_private::Args &args, lldb_private::Stream *feedback_strm);
static lldb::LogSP
- EnableLog (lldb::StreamSP &log_stream_sp, uint32_t log_options, lldb_private::Args &args, lldb_private::Stream *feedback_strm);
+ EnableLog (lldb::StreamSP &log_stream_sp, uint32_t log_options,
+ lldb_private::Args &args, lldb_private::Stream *feedback_strm);
static void
ListLogCategories (lldb_private::Stream *strm);
static void
LogIf (uint32_t mask, const char *format, ...);
+
+ // The following functions can be used to enable the client to limit
+ // logging to only the top level function calls. This is useful for
+ // recursive functions. FIXME: not thread safe!
+ // Example:
+ // void NestingFunc() {
+ // LogSP log (ProcessLinuxLog::GetLogIfAllCategoriesSet(LINUX_LOG_ALL));
+ // if (log)
+ // {
+ // ProcessLinuxLog::IncNestLevel();
+ // if (ProcessLinuxLog::AtTopNestLevel())
+ // log->Print(msg);
+ // }
+ // NestingFunc();
+ // if (log)
+ // ProcessLinuxLog::DecNestLevel();
+ // }
+
+ static bool
+ AtTopNestLevel()
+ {
+ return m_nestinglevel == 1;
+ }
+
+ static void
+ IncNestLevel()
+ {
+ ++m_nestinglevel;
+ }
+
+ static void
+ DecNestLevel()
+ {
+ --m_nestinglevel;
+ assert(m_nestinglevel >= 0);
+ }
};
#endif // liblldb_ProcessLinuxLog_h_
OpenPOWER on IntegriCloud