summaryrefslogtreecommitdiffstats
path: root/src/btparser/thread.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/btparser/thread.c')
-rw-r--r--src/btparser/thread.c33
1 files changed, 31 insertions, 2 deletions
diff --git a/src/btparser/thread.c b/src/btparser/thread.c
index af480eb3..4d52a9d4 100644
--- a/src/btparser/thread.c
+++ b/src/btparser/thread.c
@@ -313,8 +313,15 @@ btp_thread_parse(char **input,
return NULL;
}
- /* Read the thread identification number. */
- digits = btp_skip_unsigned_integer(&local_input);
+ /* Read the thread identification number. It can be either in
+ * decimal or hexadecimal form.
+ * Examples:
+ * "Thread 10 (Thread 2476):"
+ * "Thread 8 (Thread 0xb07fdb70 (LWP 6357)):"
+ */
+ digits = btp_skip_hexadecimal_number(&local_input);
+ if (0 == digits)
+ digits = btp_skip_unsigned_integer(&local_input);
location->column += digits;
if (0 == digits)
{
@@ -323,6 +330,28 @@ btp_thread_parse(char **input,
return NULL;
}
+ /* Handle the optional " (LWP [0-9]+)" section. */
+ chars = btp_skip_string(&local_input, " (LWP ");
+ if (0 < chars)
+ {
+ location->column += chars;
+ digits = btp_skip_unsigned_integer(&local_input);
+ if (0 == digits)
+ {
+ location->message = "The LWP number expected.";
+ btp_thread_free(imthread);
+ return NULL;
+ }
+ location->column += digits;
+ if (!btp_skip_char(&local_input, ')'))
+ {
+ location->message = "Closing parenthesis for LWP expected.";
+ btp_thread_free(imthread);
+ return NULL;
+ }
+ location->column += 1;
+ }
+
/* Read the end of the parenthesis. */
chars = btp_skip_string(&local_input, "):\n");
if (0 == chars)