summaryrefslogtreecommitdiffstats
path: root/lldb/packages/Python/lldbsuite/test/driver/batch_mode/main.c
diff options
context:
space:
mode:
authorJim Ingham <jingham@apple.com>2016-01-08 00:20:47 +0000
committerJim Ingham <jingham@apple.com>2016-01-08 00:20:47 +0000
commit962260c852c945d529ac32dced2c456b6f58097f (patch)
tree17a0701cf8db9fcf8b896811e530898378d1ea0f /lldb/packages/Python/lldbsuite/test/driver/batch_mode/main.c
parent3a7c2f6f44627ab325a0af706760e53d3f491c76 (diff)
downloadbcm5719-llvm-962260c852c945d529ac32dced2c456b6f58097f.tar.gz
bcm5719-llvm-962260c852c945d529ac32dced2c456b6f58097f.zip
Fix a glitch in the Driver's batch mode when used with "attach".
Batch mode is supposed to stop execution and return control to the user when an exceptional stop occurs (crash, signal or instrumentation). But attach always stops with a SIGSTOP on OSX (maybe on Linux too?) which would short circuit the rest of the commands given. This change allows a command result object to indicate that it expected to leave the process stopped with an exceptional stop reason, and it is okay for batch mode to keep going. <rdar://problem/22243143> llvm-svn: 257120
Diffstat (limited to 'lldb/packages/Python/lldbsuite/test/driver/batch_mode/main.c')
-rw-r--r--lldb/packages/Python/lldbsuite/test/driver/batch_mode/main.c25
1 files changed, 24 insertions, 1 deletions
diff --git a/lldb/packages/Python/lldbsuite/test/driver/batch_mode/main.c b/lldb/packages/Python/lldbsuite/test/driver/batch_mode/main.c
index 418160eaa36..7f943689d15 100644
--- a/lldb/packages/Python/lldbsuite/test/driver/batch_mode/main.c
+++ b/lldb/packages/Python/lldbsuite/test/driver/batch_mode/main.c
@@ -1,10 +1,33 @@
#include <stdio.h>
#include <string.h>
+#include <unistd.h>
int
main (int argc, char **argv)
{
- if (argc >= 2 && strcmp (argv[1], "CRASH") == 0)
+ int do_crash = 0;
+ int do_wait = 0;
+
+ for (int idx = 1; idx < argc; idx++)
+ {
+ if (strcmp(argv[idx], "CRASH") == 0)
+ do_crash = 1;
+ if (strcmp(argv[idx], "WAIT") == 0)
+ do_wait = 1;
+ }
+ printf("PID: %d END\n", getpid());
+
+ if (do_wait)
+ {
+ int keep_waiting = 1;
+ while (keep_waiting)
+ {
+ printf ("Waiting\n");
+ sleep(1); // Stop here to unset keep_waiting
+ }
+ }
+
+ if (do_crash)
{
char *touch_me_not = (char *) 0;
printf ("About to crash.\n");
OpenPOWER on IntegriCloud