diff options
author | Jim Ingham <jingham@apple.com> | 2016-01-08 00:20:47 +0000 |
---|---|---|
committer | Jim Ingham <jingham@apple.com> | 2016-01-08 00:20:47 +0000 |
commit | 962260c852c945d529ac32dced2c456b6f58097f (patch) | |
tree | 17a0701cf8db9fcf8b896811e530898378d1ea0f /lldb/packages/Python/lldbsuite/test/driver/batch_mode/main.c | |
parent | 3a7c2f6f44627ab325a0af706760e53d3f491c76 (diff) | |
download | bcm5719-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.c | 25 |
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"); |